《Chapter5(2).ppt》由会员分享,可在线阅读,更多相关《Chapter5(2).ppt(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第5章 循环结构程序设计 5.1 循环结构程序设计的概念5.2 语句标号和 goto 语句 5.3 while 语句 5.4 do while 语句 5.5 for 语句 5.6 循环结构嵌套 5.7 break 语句和 continue 语句 5.1 循环结构程序设计的概念 实现循环的程序结构称为循环结构,是计算机科学中用以描述客观世界循环现象的重要手段。程序设计中的循环(简称循环)是指在程序设计中,从某处开始有规律地反复执行某一操作块(或程序块)。如果循环永远不会终止,这样的循环就称为死循环。第5章 循环结构程序设计 5.2 语句标号和goto语句 goto语句为无条件转向语句,它的一般格
2、式为:goto 语句标号语句标号;第5章 循环结构程序设计 例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);100n=15.3 while语句 while语句用来实现“当型”循环结构。5.3.1 while语句的一般格式语句的一般格式 while语句是一个循环控制语句,用来控制程序段的重复执行。其一般格式为:while(表达式表达式)循环体循环体;格式中的循环体,可以是单个语句、空语句,也可以是复合语句。第5章 循环结构程序设计 5.3.2 whi
3、le语句的执行过程语句的执行过程 当表达式为非0时,执行while语句中的循环体,然后继续进行表达式的判断,如此循环。当表达式为0时,则退出循环。说明:如果循环体包含一个以上的语句,就构成块语句,应该用花括号 括起来。第5章 循环结构程序设计 返回章目录当表达式为非0值时,执行while语句中的内嵌语句。其流程图见图5.1。其特点是:先判断表达式,后执行语句。图图5.1图图5.2例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+;prin
4、tf(%d,sum);100n=15.4 do while语句 C语言中,用do while语句构成直到型循环结构。5.4.1 do while语句的一般格式语句的一般格式 do while语句也是一个循环控制语句。其特点是先执行循环体,然后判断条件是否成立。其一般格式为:do 循环体循环体 while(表达式表达式);说明:循环体至少执行一次。当循环体有多个语句时必须加花括号。第5章 循环结构程序设计 5.4.2 do while语句的执行过程语句的执行过程 先执行一次指定的循环体语句,然后判断表达式。当表达式的值为非0的数据时,返回重新执行循环体,如此反复直到表达式的值为0为止,此时循环结
5、束。第5章 循环结构程序设计 返回章目录图5.3例5.3用dowhile语句求n。先画出流程图,见图5.4。图图5.45.4图图5.55.5100n=1程序如下:main()int i,sum=0;i=1;do sum=sum+i;i+;while(i=100);printf(%d,sum);例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(“
6、sum=%d”,sum);printf(“sum=%d”,sum);5.5 for 语句 for语句可以用于循环次数已经确定的情况,还可用于循环次数不确定而只给出循环结束条件的情况。5.5.1 for语句的一般格式语句的一般格式 for语句的一般格式为:for(表达式表达式1;表达式表达式2;表达式表达式3)循环体循环体 第5章 循环结构程序设计 5.5.2 for语句的执行过程语句的执行过程for语句的执行过程为:(1)先求解表达式1,表达式1只执行一次,一般是赋值语句,用于初始化变量。(2)求 解 表 达 式 2,若 为 假(0),则 结 束 循 环。(3)当表达式2为真(非0)时,执行循
7、环体。(4)执行表达式3。(5)转回(2)。第5章 循环结构程序设计 图图 5.6for(i=1;i=100;i+)sum=sum+i;5.6 循环结构嵌套 一个循环体内包含另一个完整的循环结构,称为循环的嵌套。循环之中还可以套循环,称为多层循环。三种循环(while循环、do while循环和for循环)可以互相嵌套。例如:while()for()第5章 循环结构程序设计 5.7 break语句和continue语句 5.7.1 break语句语句 break语句可以使流程跳出Switch结构,继续执行Switch语句下面的一个语句。break语句还可以用来从循环体内跳出循环体,即提前结束循
8、环,接着执行循环下面的语句。如:for(r=1;r100)break;printf(%f,area);第5章 循环结构程序设计 5.7.2 continue语句语句 continue语句的作用是结束本次循环,忽略continue后面的语句,进行下一次循环判定。continue语句和语句和break语句的区别是:语句的区别是:continue语句只结束本次循环,而不是终止整个循环的执行。而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。第5章 循环结构程序设计 返回章目录5.9 程序举例例5.6用/41-13+15-17+公式求的近似值,直到最后一项的绝对值小于10-6为止。
9、用N|S结构化流程图表示算法(见图5.12)。图图5.125.12程序如下:#includemain()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.6fn,Pi);运行结果为:Pi=3.141594例5.7求fibonacci数列40个数。这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即:f1=1 (n=1)f2=1 (n=2)fn=fn-1+fn-2 (n3)解此题的算法如图5.13所示。图5.
10、13程序如下: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;运行结果为: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
11、 14930352 24157817 39088169 63245986 102334155例5.8判断m是否素数。算法如图5.14所示。我们采用的算法是这样的:让m被2到m 除,如果m能被2m 之中任何一个整数整除,则提前结束循环,此时i必然小于或等于k(即m);如果m不能图5.14#include main()int m,i,k;scanf(%d,&m);k=sqrt(m+1);/*加1是为了避免在求m时可能出现的误差*/for(i=2;i=k+1)printf(%d is a Prime mubern,m);else printf(%d is not a Prime numbern,m)
12、;运行情况如下:1717 is a Prime number 例5.9求100200间的全部素数。在例5.8的基础上,对本题用一个嵌套的for循环即可处理。程序如下:#include main()int m,k,i,n=0;for(m=101;m=200;m=m+2)k=sqrt(m);for(i=2;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 149151 157 163 167 173 179 181 191 193 197199 n的作
13、用是累计输出素数的个数,控制每行输出10个数据。例5.10译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码:将字母a变成字母E,a变成e,即变成其后的第4个字母,W变成a,X变成b,Y变成c,Z变成D。见图5.15。字母按上述规律转换,非字母字符不变。如“china!”转换为“Glmre!”。输入一行字符,要求输出其相应的密码。图5.15程序如下:#include main()char c;while(c=getchar()!=n)if(c=a&c=a&cZ&cz)c=c-26;printf(%c,c);运行结果如下:china!Glmre!程序中对输入的字符处理办法是:先判定它是否大写字母或小写字母,若是,则将其值加4(变成其后的第4个字母)。如果加4以后字符值大于Z或z,则表示原来的字母在V(或v)之后,应按图5.15所示的规律将它转换为aD(或ad)之一。办法是使c减26,如果读者对此还有疑问,请查ascII码表即可清楚。还有一点请读者注意:内嵌的if语句不能写成if(cZ|cz)c=c-26;因为当字母为小写时都满足“cZ”条件,从而也执行“c=c-26;”语句,这就会出错。因此必须限制其范围为“cZ&cz&cz”即可。
限制150内