1 / 38

第 5 章 循环结构程序设计

第 5 章 循环结构程序设计. 5.1 循环结构程序设计的概念 5.2 语句标号和 goto 语句 5.3 while 语句 5.4 do … while 语句 5.5 for 语句 5.6 循环结构嵌套 5.7 break 语句和 continue 语句. 第 5 章 循环结构程序设计. 5.1 循环结构程序设计的概念. 实现循环的程序结构称为循环结构,是计算机科学中用以描述客观世界循环现象的重要手段。

Download Presentation

第 5 章 循环结构程序设计

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第5章 循环结构程序设计 5.1 循环结构程序设计的概念 5.2 语句标号和 goto 语句 5.3 while 语句 5.4 do … while 语句 5.5 for 语句 5.6 循环结构嵌套 5.7 break 语句和 continue 语句

  2. 第5章 循环结构程序设计 5.1 循环结构程序设计的概念 实现循环的程序结构称为循环结构,是计算机科学中用以描述客观世界循环现象的重要手段。 程序设计中的循环(简称循环)是指在程序设计中,从某处开始有规律地反复执行某一操作块(或程序块)。如果循环永远不会终止,这样的循环就称为死循环。

  3. 第5章 循环结构程序设计 5.2 语句标号和goto语句 goto语句为无条件转向语句,它的一般格式为: goto 语句标号 ;

  4. 100 n=1 例5.1用if语句和goto语句构成循环,求∑n。 main( ) { int i, sum=0; i=1; loop: if(i<=100) { sum=sum+i; i++; goto loop; } printf("%d",sum); }

  5. 第5章 循环结构程序设计 5.3 while语句 while语句用来实现“当型”循环结构。 5.3.1 while语句的一般格式 while语句是一个循环控制语句,用来控制程序段的重复执行。其一般格式为: while(表达式) 循环体 ; 格式中的循环体,可以是单个语句、空语句,也可以是复合语句。

  6. 第5章 循环结构程序设计 5.3.2 while语句的执行过程 当表达式为非0时,执行while语句中的循环体,然后继续进行表达式的判断,如此循环。当表达式为0时,则退出循环。 说明:如果循环体包含一个以上的语句,就构成块语句,应该用花括号{ }括起来。 返回章目录

  7. 当表达式为非0值时,执行while语句中的内嵌语句。其流程图见图5.1。其特点是:先判断表达式,后执行语句。当表达式为非0值时,执行while语句中的内嵌语句。其流程图见图5.1。其特点是:先判断表达式,后执行语句。 图5.1 图5.2

  8. 100 n=1 例5.2求∑n。用传统流程图和N-S结构流程图表示算法,见图 P84 5.2(a)和图5.2(b)。根据流程图写出程序: main() { int i,sum=0; i=1; while (i<=100) { sum=sum+i; i++; } printf("%d",sum); }

  9. 第5章 循环结构程序设计 5.4 do … while语句 C语言中,用do … while语句构成直到型循环结构。 5.4.1 do … while语句的一般格式 do … while语句也是一个循环控制语句。其特点是先执行循环体,然后判断条件是否成立。其一般格式为: do 循环体 while(表达式) ; 说明:循环体至少执行一次。当循环体有多个语句时必须加花括号{ }。

  10. 第5章 循环结构程序设计 5.4.2 do … while语句的执行过程 先执行一次指定的循环体语句,然后判断表达式。当表达式的值为非0的数据时,返回重新执行循环体,如此反复直到表达式的值为0为止,此时循环结束。 返回章目录

  11. 图5.3

  12. 100 n=1 例5.3用dowhile语句求∑n。 先画出流程图,见图5.4。 图5.5 图5.4

  13. 程序如下: main() { int i,sum=0; i=1; do {sum=sum+i; i++; } while(i<=100); printf("%d",sum); }

  14. 例5.4while和do-while循环的比较。 (1) main ( ) (2) main( ) {int sum=0,i; {int sum=0,i; scanf(“%d”,&i); scanf("%d",&i); while (i<=10) do {sum=sum+i; {sum=sum+i; i++; i++; } } while (i<=10) printf(“sum=%d”,sum); printf(“sum=%d”,sum); } }

  15. 第5章 循环结构程序设计 5.5 for 语句 for语句可以用于循环次数已经确定的情况,还可用于循环次数不确定而只给出循环结束条件的情况。 5.5.1 for语句的一般格式 for语句的一般格式为: for (表达式1 ; 表达式2 ; 表达式3) 循环体

  16. 第5章 循环结构程序设计 5.5.2 for语句的执行过程 for语句的执行过程为: (1) 先求解表达式1,表达式1只执行一次,一般是赋值语句,用于初始化变量。 (2) 求解表达式2,若为假(0),则结束循环。 (3) 当表达式2为真(非0)时,执行循环体。 (4) 执行表达式3。 (5) 转回(2)。

  17. for(i=1;i<=100;i++) sum=sum+i; 图 5.6

  18. 第5章 循环结构程序设计 5.6 循环结构嵌套 一个循环体内包含另一个完整的循环结构,称为循环的嵌套。循环之中还可以套循环,称为多层循环。三种循环(while循环、do … while循环和for循环)可以互相嵌套。例如: while( ) { … for ( ) { … } … }

  19. 第5章 循环结构程序设计 5.7 break语句和continue语句 5.7.1 break语句 break语句可以使流程跳出Switch结构,继续执行Switch语句下面的一个语句。break语句还可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。如: for(r=1;r<=10;r++) { area=Pi*r*r; if(area>100) break; printf("%f",area); }

  20. 第5章 循环结构程序设计 5.7.2 continue语句 continue语句的作用是结束本次循环,忽略continue后面的语句,进行下一次循环判定。 continue语句和break语句的区别是:continue语句只结束本次循环,而不是终止整个循环的执行。而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。 返回章目录

  21. 5.9 程序举例 例5.6用π/4≈1-13+15-17+…公式求π的近似值,直到最后一项的绝对值小于10-6为止。 用N\|S结构化流程图表示算法(见图5.12)。 图5.12

  22. 程序如下: #include<math.h> 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;

  23. t=S/n; } Pi=Pi*4; printf("Pi=%10.6f\n",Pi); } 运行结果为: Pi= 3.141594

  24. 例5.7求fibonacci数列40个数。这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即:例5.7求fibonacci数列40个数。这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即: f1=1 (n=1) f2=1 (n=2) fn=fn-1+fn-2 (n≥3) 解此题的算法如图5.13所示。

  25. 图5.13 程序如下:

  26. 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; } }

  27. 运行结果为: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 57022887 9227465 14930352 24157817 39088169 63245986 102334155

  28. 例5.8判断m是否素数。算法如图5.14所示。 我们采用的算法是这样的:让m被2到m 除,如果m能被2~m 之中任何一个整数整除,则提前结束循环,此时i必然小于或等于k(即m);如果m不能

  29. 图5.14

  30. #include <math.h> main() { int m,i,k; scanf("%d",&m); k=sqrt(m+1);/*加1是为了避免在求m时可能出现的误差*/

  31. for (i=2;i<=k;i++) if(m%i==0) break; if(i>=k+1) printf("%d is a Prime muber\n",m); else printf("%d is not a Prime number\n",m); } 运行情况如下: 17 17 is a Prime number

  32. 例5.9求100~200间的全部素数。 在例5.8的基础上,对本题用一个嵌套的for循环即可处理。程序如下:# include <math.h> main() { int m,k,i,n=0; for(m=101;m<=200;m=m+2) { k=sqrt(m); for (i=2;i<=k;i++) if (m%i==0) break;

  33. if (i>=k+1){printf("%d ",m);n=n+1;} if(n%10==0) printf("\n"); } printf ("\n"); } 运行结果如下: 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 n的作用是累计输出素数的个数,控制每行输出10个数据。

  34. 例5.10译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码: 例5.10译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码: 将字母a变成字母E,a变成e,即变成其后的第4个字母,W变成a,X变成b,Y变成c,Z变成D。见图5.15。字母按上述规律转换,非字母字符不变。如“china!”转换为“Glmre!” 。 输入一行字符,要求输出其相应的密码。

  35. 图5.15

  36. 程序如下: #include <Stdio.h> 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; }

  37. printf("%c",c); } } 运行结果如下: china!  Glmre! 程序中对输入的字符处理办法是:先判定它是否大写字母或小写字母,若是,则将其值加4(变成其后的第4个字母)。如果加4以后字符值大于‘Z’或‘z’,则表示原来的字母在V(或v)之后,应按图5.15所示的规律将它转换为a~D(或a~d)之一。办法是

  38.  使c减26,如果读者对此还有疑问,请查ascII码表即可清楚。还有一点请读者注意:内嵌的if语句不能写成 使c减26,如果读者对此还有疑问,请查ascII码表即可清楚。还有一点请读者注意:内嵌的if语句不能写成 if(c>'Z'|| c>'z') c=c-26; 因为当字母为小写时都满足“c>‘Z’”条件,从而也执行“c=c-26;”语句,这就会出错。 因此必须限制其范围为“c>‘Z’ && c<=‘Z’+4”,即原字母为‘W’到‘Z’,在此范围以外的不是大写字母W~Z,不应按此规律转换。请考虑:为什么对小写字母不按此处理,即写成 c>'z' && c<='z'+4 而只须写成“c>‘z’”即可。

More Related