Presentation is loading. Please wait.

Presentation is loading. Please wait.

第五章 循环结构的C程序设计 5.1 while循环语句 5.2 do-while循环语句 5.3 for循环语句 5.4 多重循环

Similar presentations


Presentation on theme: "第五章 循环结构的C程序设计 5.1 while循环语句 5.2 do-while循环语句 5.3 for循环语句 5.4 多重循环"— Presentation transcript:

1 第五章 循环结构的C程序设计 5.1 while循环语句 5.2 do-while循环语句 5.3 for循环语句 5.4 多重循环
5.4 多重循环 5.5 break语句和continue语句 5.6 goto语句和标号 5.7 程序举例

2 5.1 while循环语句 while循环的一般形式如下:  while(表达式) 语句 图 5.1 while循环

3 while语句的执行过程是:先计算while后面圆括号内表达式的值,如果其值为“真”(非0),则执行语句部分(即循环体);然后再计算表达式的值,并重复上述过程,直到表达式的值为“假”(0)时,循环结束,程序控制转至循环结构的下一语句。  while循环中的表达式一般是关系表达式(如i<=100)或逻辑表达式(如a<b&&x<y),但也可以是数值表达式或字符表达式,只要其值非零, 就可执行循环体。

4 例 5.1 利用while语句实现:从键盘输入n(n>0)个数,求其和。

5 main() { int i, n, k, sum;  i=1; sum=0;  printf("Input n: ");  scanf("%d", &n);  while(i<=n) { scanf("%d", &k);  sum=sum+k;  i++;  } printf("\nsum is: %d\n", sum);  } 运行结果:  Input n: 6  sum is: 73

6 例 5.2 从键盘连续输入字符,直到输入“回车”符为止, 统计输入的字符个数。
图 5.3 统计输入字符的个数

7 #include <stdio.h> 
main() { char ch;  int len=0;  puts("Type in a sentence, then press <Enter>\n");  while ((ch=getch())!=′\r′)  { putchar(ch);  len++;  } printf("\nSentence is %d characters long.\n", len);  运行结果:  Type in a sentence, then press <Enter> this is a sentence. Sentence is 19 characters long.

8 5.2 do-while循环语句 do-while循环的一般形式如下:  do  语句 while (表达式);

9 图 5.4 do-while循环

10 do—while语句的执行过程是:先执行循环体中的语句, 然后计算表达式的值。若表达式的值为“真”(非0), 则再次执行循环体。如此重复,直至表达式的值为“假”(0)时, 结束循环。

11 例 5.3 利用do—while语句重做例5.1。 图 5.5 求n个数的和

12 main() { int i, n, k, sum;  i=1; sum=0;  printf("Input n: ");  scanf("%d", &n);  do { scanf("%d", &k);  sum=sum+k;  i++;  } while(i<=n);  printf("sum is: %d\n", sum);  }  运行结果:  Input n: 6  sum is: 90

13 5.3 for循环语句 for循环语句的一般形式如下:  for (表达式1; 表达式2; 表达式3) 语句

14 图 5.6 for循环

15 其执行过程是:  (1) 首先求解表达式1。  (2) 求解表达式2, 若其值为“真”(非0), 则执行循环体中的语句, 然后执行第(3) 步。若为“假”(0), 则结束循环, 转至第(5)步。  (3) 求解表达式3。  (4) 转至第(2)步重复执行。  (5) 执行for循环语句的下一语句。

16 for语句的功能可用while语句描述如下: 
表达式1;  while (表达式2) { 语句;  表达式3;  } for语句最简单的应用形式, 也是最容易理解的形式: for (循环变量赋初值; 循环条件; 循环变量增值) 语句 例如, for (i=1; i<=50; i++) sum=sum+i;

17 例 5.4 利用for语句重做例5.1。 main() { int i, n, k, sum=0; 
printf("Input n: ");  scanf("%d", &n);  for (i=1; i<=n; i++) { scanf("%d", &k);  sum=sum+k;  } printf("sum is: %d\n", sum);  运行结果:  Input n: 6  sum is: 64

18 例 5.5 计算1至50中是7的倍数的数值之和。 运行结果:  sum=196 main() { int i, sum=0; 
例 5.5 计算1至50中是7的倍数的数值之和。 main() { int i, sum=0;  for (i=1; i<=50; i++) if (i%7==0) sum+=i;  printf("sum=%d\n", sum);  } 运行结果:  sum=196

19 5.4 多重循环 当一个循环体内又包含另一个完整的循环结构时,称为多重循环或循环嵌套,其循环结构可用上述三种循环语句的任意一种。 例如,下面是两种循环嵌套的示意图。 (1) while ( ) {  while ( ) }

20 (2) for (; ; ) {  do {  } while( );   }

21 例 5.6 输出九九表。

22

23 5.5 break语句和continue语句 break语句 其形式为 break;

24 使用break语句应注意如下几个问题: 
(1) break语句只能用于switch结构或循环结构, 如果在程序中有下列语句:  if (…) break;  则此时的if语句一定位于循环体中或switch结构中, break语句跳出的也不是if语句,而是跳出包含此if语句的循环结构或switch结构。

25 (2) 在循环语句嵌套使用的情况下, break语句只能跳出(或终止)它所在的循环,而不能同时跳出(或终止)多层循环,如: 
for (…) { for (…) { … break;  } … /* 注1 */ }

26 例 5.7 计算r=1到r=10时的圆面积,直到面积area大于100为止。
#define PI  main() { int r;  float area;  for (r=1; r<=10; r++) { area=PI*r*r;  if (area>100) break;  printf("r: %d area is: %f\n", r, area);  }

27 运行结果:  r: 1 area is:  r: 2 area is:  r: 3 area is:  r: 4 area is:  r: 5 area is:

28 continue语句 continue语句的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,直接进行下一次是否执行循环的判定。 continue语句的一般形式如下:  continue;  其执行过程是:终止当前这一轮循环,即跳过循环体中位于continue后面的语句而立即开始下一轮循环;对于while和do-while来讲,这意味着立即执行条件测试部分,而对于for语句来讲,则意味着立即求解表达式3。

29 例 5.8 把100到150之间的不能被3整除的数输出,要求一行输出10 个数。
例 5.8 把100到150之间的不能被3整除的数输出,要求一行输出10 个数。 main() { int n, i=0;  for (n=100; n<=150; n++) { if (n%3==0)  continue;  printf("%4d", n);  i++;  if (i%10==0) printf ("\n");  }  }

30 运行结果: 

31 5.6 goto语句和标号 goto语句为无条件转向语句,程序中使用goto语句时要求和标号配合, 它们的一般形式为 
… 标号: 语句;

32 C语言规定,goto语句的使用范围仅局限于函数内部, 不允许在一个函数中使用goto语句把程序控制转移到其它函数之内。 
(1) 与if语句一起构成循环结构。  (2) 退出多重循环。

33 5.7 程 序 举 例 例 5.9 用 公式求出π的近似值, 直到最后一项的绝对值小于10-6为止。 具体程序如下:
5.7 程 序 举 例 例 用 公式求出π的近似值, 直到最后一项的绝对值小于10-6为止。 具体程序如下: #include <math.h> main() {int s;  float n, t, pi;

34

35 例 5.10 从键盘输入一个大于2的整数n,判断n是不是素数。
具体程序如下: #include <stdio.h> #include <math.h> main() {int n, k, i, flag; do { printf("Input a number: ");  scanf("%d", &n); } while(n<=2);  k=sqrt((double)n);  flag=1;  for (i=2; i<=k; i++)

36 if (n%i==0) {flag=0;  break; /* 有一数能整除就不是素数, 不再循环 */ } if (flag) printf("%d is a prime number.\n", n);  else printf("%d is not a prime number.\n", n); } 运行结果:  Input a number: 35 35 is not a prime number.

37 例 5.11 用牛顿迭代法求方程2x3-4x2+3x-6=0的根,要求误差小于10-5。
从图5.7可以看出: 因此, 令f(x)=2x3-4x2+3x-6 可写成以下形式:  f(x)=((2x-4)x+3)x-6

38 图 5.7 用牛顿迭代法求方程的根

39 具体程序如下: #include <stdio.h> #include <math.h> main()
{float x, x0, f, f1;  printf("Enter the first approch x: ");  scanf("%f", &x);  do {x0=x;  f=((2*x0-4)*x0+3)*x0-6; /* 求f(x0) */ f1=(6*x0-8)*x0+3; /* 求f′(x0) */  x=x0-f/f1;  }

40 while(fabs(x-x0)>=1e-5); 
printf("The root of equation is: %10.7f\n", x);  } 运行结果:  Enter the first approch x: 1.5 The root of equation is:

41 例 5.12 从键盘输入4个9以内的数字字符,将其转换为4位十进制数后显示出来。
分析:  (1) 将每个数字字符c变成对应的数字,即将以ASCII码表示的数字字符变成一位十进制数,方法为:c-′0′,如c=′8′时,c-′0′=8。转换中若遇非′0′~′9′字符则结束转换。  (2) 将每次变换的一位十进制数,从高位开始,按位加权, 变成多位的十进制数,放在变量data中。如输入1,2,3,4, 则 结果应是按%d格式显示的1234。

42 具体程序如下: #include <stdio.h> main() {char c;  int i, data=0; 
printf("Input char : ");  for (i=0; i<4; i++) {c=getchar(); /* 输入一数字字符 */ if (c<′0′ ||c>′9′) /* 判断输入字符是否在′0′~′9′范围内 */ break;  data=data*10+c-′0′; /* 计算当前data值 */ } printf("data=%d\n", data);  } 运行结果:  Input char: 1463  data=1463


Download ppt "第五章 循环结构的C程序设计 5.1 while循环语句 5.2 do-while循环语句 5.3 for循环语句 5.4 多重循环"

Similar presentations


Ads by Google