5339171
This presentation is the property of its rightful owner.
Sponsored Links
1 / 30

甘肃工业职业技术学院信息工程系 PowerPoint PPT Presentation


  • 142 Views
  • Uploaded on
  • Presentation posted in: General

C 语言程序设计. 刘亚奇. 甘肃工业职业技术学院信息工程系. 200 9 年 12 月. 内容提要 循环概述 goto 语句及它构成的循环 While 语句 Do-While 语句 For 语句 循环的嵌套 控制语句. 5.1 概述 C 语言可实现循环的语句: 用 goto 和 if 构成循环 while 语句 do ~ while 语句 for 语句 5.2 goto 语句及用 goto 语句 构成循环 无条件转向 goto 语句一般格式:. goto 语句标号 ;. 说明: 语句标号用标识符表示,不能用整数

Download Presentation

甘肃工业职业技术学院信息工程系

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


5339171

C语言程序设计

刘亚奇

甘肃工业职业技术学院信息工程系

2009年12月


5339171

内容提要

  • 循环概述

  • goto语句及它构成的循环

  • While语句

  • Do-While语句

  • For语句

  • 循环的嵌套

  • 控制语句


5339171

5.1概述

C语言可实现循环的语句:

用goto 和 if 构成循环

while 语句

do ~ while 语句

for 语句

5.2 goto语句及用goto语句构成循环

无条件转向goto语句一般格式:

  • goto 语句标号;

  • 说明:

    • 语句标号用标识符表示,不能用整数

    • 结构化程序设计限制使用goto语句


5339171

例 5.1 用if 和goto语句构成循环,求

循环条件

循环初值

循环变量增值

循环终值

循环体

  • 用途:

    • 与if语句一起构成循环结构

    • 从循环体中跳转到循环体外

#include<stdio.h>

void main()

{ int i,sum=0;

i=1;

loop: if(i<=100)

{ sum+=i;

i++;

goto loop;

}

printf("%d",sum);

}

i=2

sum=0+1

sum=1+2=3

sum=3+3=6

sum=6+4

……

sum=4950+100=5050

i=3

i=4

i=5

i=101


5339171

while

假(0)

表达式

真(非0)

循环体

  • 5.3while语句

    • 一般形式:

while(表达式)

循环体语句;

  • 执行流程:


5339171

例5.2 用while循环求

循环条件

循环初值

循环变量增值

循环终值

循环体

#include <stdio.h>

void main()

{ int i,sum=0;

i=1;

while(i<=100)

{ sum=sum+i;

i++;

}

printf("%d",sum);

}


5339171

  • 特点:先判断表达式,后执行循环体

  • 说明:

    • 循环变量应有一个初值

    • 循环体有可能一次也不执行

    • 循环体可为任意类型语句

    • 循环体如果包含一个以上的语句,应用花括号括起来,以复合语句的形式出现,否则,while语句的范围只到while后第一个分号处

    • 循环体中应有使循环趋向于结束的语句

      如本例中的i++语句


5339171

do

循环体

while

真(非0)

表达式

假(0)

  • 5.4 do~while语句

    • 一般形式:

do

循环体语句;

while(表达式);

  • 执行流程:


5339171

例5.3 用do~while循环求

#include <stdio.h>

void main()

{ int i,sum=0;

i=1;

do

{ sum+=i;

i++;

}while(i<=100);

printf("%d",sum);

}


5339171

循环体

While循环

假(0)

表达式

真(非0)

循环体

  • 特点:先执行循环体,后判断表达式

  • 说明:

    • 至少执行一次循环体

    • do~while可转化成while结构


5339171

例 5.4 while和do~while比较

#include<stdio.h>

void main()

{ int i,sum=0;

scanf("%d",&i);

do

{ sum+=i;

i++;

}while(i<=10);

printf("%d",sum);

}

#include<stdio.h>

void main()

{ int i,sum=0;

scanf("%d",&i);

while(i<=10)

{ sum+=i;

i++;

}

printf("%d",sum);

}

11↙

11

11↙

0

1↙

55

1↙

55


5339171

for

表达式1

假(0)

表达式2

真(非0)

语句

表达式3

  • 5.5for语句

    • 一般形式:

for(表达式1 ; 表达式2;表达式3)语句

  • 执行流程:


5339171

例_1 用for循环求

#include <stdio.h>

void main()

{ int i,sum=0;

for(i=1;i<=100;i++)

sum+=i;

printf("%d",sum);

}

  • for语句一般应用形式:

for(循环变量赋初值;循环条件;循环变量增值)

{

循环体语句;

}

  • 说明:

    • for语句可以转换成while结构

    • for语句中表达式1,表达式2 ,表达式3 类型任意,都可省略,但分号;不可省,表达式2 省略时,不判断循环条件,也就是认为表达式2始终为真

    • 三个表达式可都省略: for(; ;)

i=1;

for (;i<=100 ;i++)

sum=sum+i;

表达式1;

while(表达式2)

{

循环体语句;

表达式3;

}

for (i=1; ;i++)

sum=sum+i;

i=1;

for (;i<=100 ;)

{sum=sum+i; i ++}

for ( i=1;i<=100 ;)

{sum=sum+i; i++;}


5339171

例_3:#include<stdio.h>

void main( )

{ int i=0;

for(;i<10;i++)

putchar(‘a’+i);

}

例_2:#include<stdio.h>

void main( )

{ int i;

for(i=0;i<10;i++)

putchar(‘a’+i);

}

例_4:#include<stdio.h>

void main( )

{ int i=0;

for(;i<10;)

putchar(‘a’+(i++));

}

运行结果:abcdefghij


5339171

  • 表达式1,3也可以是逗号表达式

例_5:#include<stdio.h>

void main()

{ int i,j,sum;

for(sum=0,i=1;i<=100;i++)

sum=sum+i;

printf("%d\n",sum);}

例_6: #include<stdio.h>

void main()

{ int i,j,k;

for(i=0,j=100;i<=j;i++,j--)

k+=i*j;

printf("%d,%d,%d\n",i,j,k);}


5339171

  • 表达式2可以是关系或逻辑表达式,也可以是其它类型的表达式,只要其值非0,就执行循环体

例_7: #include<stdio.h>

void main()

{ int i,c;

for(i=0;(c=getchar())!=‘\n’;i+=c);

printf("%d ",i);

}

例_8: #include<stdio.h>

void main()

{ char c;

for(;(c=getchar())!='\n';)

printf("%c ",c);

}


5339171

外循环

(4) for( ; ;)

{ ……

do

{ ……

}while();

……

while()

{ ……

}

…...

}

内循环

内循环

  • 5.6 循环的嵌套

    • 三种循环可互相嵌套,层数不限

    • 外层循环可包含两个以上内循环

    • 嵌套循环的执行流程

(1) while()

{ ……

while()

{ ……

}

…...

}

(3) while()

{ ……

do

{ ……

}while( );

…….

}

(2) do

{ ……

do

{ ……

}while( );

…...

}while( );


5339171

1

2

9

3

1

4

18

2

6

2

27

3

6

3

9

12

8

4

36

4

45

5

10

15

5

6

54

12

6

18

21

63

14

7

7

8

8

16

72

24

81

27

9

18

9

j

i

1

2

3

……………..

9

例 循环嵌套,输出九九表

例_9:#include <stdio.h>

void main()

{ int i,j;

printf(“ ”);

for(i=1;i<10;i++) printf("%4d",i);

printf("\n---------------------------------------\n");

for(i=1;i<10;i++)

{printf(“%d”,i);

for(j=1;j<10;j++)

printf("%4d",i*j);

printf(“\n”);

}

}


5339171

6.7循环控制语句

break语句

功能:在循环语句和switch语句中,终止并跳出循环体或跳出switch结构

说明:

break只能终止并跳出最近一层的结构

break不能用于循环语句和switch语句之外的任何其它语句之中

If和goto构成的循环语句中不能用break语句


5339171

while

do

假(0)

表达式

……

break;

…...

真(非0)

……

break;

……

while

真(非0)

表达式

假(0)


5339171

for

switch

表达式1

表达式

假(0)

表达式2

case

真(非0)

const 1

const 2

const n

default

……

break;

…...

语句组1

break;

语句组2

break;

语句组n

break;

语句组

break;

…...

expr3


5339171

例_10:输出圆面积,面积大于100时停止

#define PI 3.14159

#include<stdio.h>

void main()

{

int r;

float area;

for(r=1;r<=10;r++)

{ area=PI*r*r;

if(area>100)

break;

printf("r=%d,area=%.2f\n",r,area);

}

}


5339171

例_11:小写字母转换成大写字母,直至输入非字母字符

#include <stdio.h>

void main()

{

int i,j;

char c;

while(1)

{ c=getchar();

if(c>='a' && c<='z')

putchar(c-'a'+'A');

else

break;

}

}


5339171

for

表达式1

while

do

假(0)

表达式2

假(0)

表达式

真(非0)

……

continue;

…...

真(非0)

……

continue;

…...

……

continue;

……

while

真(非0)

表达式

表达式3

假(0)

  • continue语句

    • 功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断

    • 仅用于循环语句中


5339171

例_12求输入的十个整数中正数的个数及其平均值

#include <stdio.h>

void main()

{ int i,num=0,a;

float sum=0;

for(i=0;i<10;i++)

{ scanf("%d",&a);

if(a<=0) continue;

num++;

sum+=a;

}

printf("%d plus integer's sum :%6.0f\n",num,sum);

printf("Mean value:%6.2f\n",sum/num);

}


5339171

例5.5把100~200之间的不能被3整除的数输出

#include<stdio.h>

void main()

{ int n;

for(n=100;n<=200;n++)

{

if(n%3= =0) continue;

printf("%d\n",n);

}

}


5339171

t=1,pi=0,n=1.0,s=1

当|t|1e-6

pi=pi+t

n=n+2

s=-s

t=s/n

pi=pi*4

输出pi

#include <stdio.h>

#include <math.h>

void main()

{ int s;

float n,t,pi;

t=1; pi=0; n=1.0; s=1;

while((fabs(t))>=1e-6)

{ pi=pi+t;

n=n+2;

s=-s;

t=s/n;

}

pi=pi*4;

printf("pi=%10.6f\n",pi);

}

  • 5.8程序举例

分子:1,-1,1,-1…

分母:1,3,5,7,...


5339171

1

5

34

233

1597

10946

75025

514229

3524578

24157817

1

8

55

377

2584

17711

121393

832040

5702887

39088169

2

13

89

610

4181

28657

196418

1346269

9227465

63245986

3

21

144

987

6765

46368

317811

2178309

14930352

102334155

f1=1,f2=1

for i=1 to 20

输出f1,f2

f1=f1+f2

f2=f2+f1

例5.7 求Fibonacci数列:1,1,2,3,5,8,……的前40个数

#include<stdio.h>

void main()

{ long int f1,f2;

int i;

f1=1;f2=1;

for(i=1;i<=20;i++)

{ printf(“%12ld %12ld”,f1,f2);

if(i%2= =0) printf(“\n”);

f1=f1+f2;

f2=f2+f1;

}

}


5339171

读入m

k=m

i=2

当ik

m被i整除

用break

结束循环

i=i+1

ik+1

输出:m”不是素数”

输出:m”是素数”

例5.9 求100~200间的全部素数

例6.8 判断m是否素数

#include <stdio.h>

#include <math.h>

void main()

{ int m,i,k;

scanf("%d",&m);

k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0) break;

if(i>k) printf("%d is a prime number\n",m);

else printf("%d is not a prime number\n",m);

}

#include <stdio.h>

#include <math.h>

void main()

{ int m,i,k,n=0;

for(m=101;m<=200;m=m+2)

{ k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0) break;

if(i>=k+1) {printf("%d ",m);n=n+1;}

if(n%10==0) printf("\n");

}

printf("\n");

}


5339171

ABCDEFGHIJKLMNOPQRSTUVWXYZ

例5.10 译密码

#include <stdio.h>

#include<stdio.h>

void main()

{ char c;

while((c=getchar())!='\n')

{ if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))

{ c=c+4;

if(c>'Z'&&c<='Z'+4||c>'z')

c=c-26;

}

printf("%c",c);

}

}

例如 Hello,world!

译成密码:Lipps,asvph!


  • Login