《chap5(循环结构).ppt》由会员分享,可在线阅读,更多相关《chap5(循环结构).ppt(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1.概述概述 重重复复执执行行某某个个程程序序段段称称为为循循环环。在在C中中可可用用如如下下语句实现循环:语句实现循环:1用用goto语句和语句和 if 语句构成循环;语句构成循环;2用用while语句;语句;3用用dowhile语句;语句;4用用for语句。语句。2.goto 语句语句 goto语句为无条件转向语句。其形式为:语句为无条件转向语句。其形式为:goto 语句标号;语句标号;说明:说明:goto语语句句的的作作用用是是无无条条件件地地转转去去执执行行“语语句句标标号号”标明的某一段程序。标明的某一段程序。第第5章章 循循 环环 控控 制制“语语句句标标号号”为为某某一一语语句句
2、前前的的一一个个标标识识符符。其其定定名名规规则与变量名相同。则与变量名相同。例例5.1 用用 if 语句和语句和goto语句构成循环求语句构成循环求 。在在C中,除非不得已时才使用中,除非不得已时才使用goto语句。语句。main()int i,sum=0;i=1;loop:if(i=100)/*语语句句标标号号后后的的“:”是是必必须须的的 */sum=sum+i;i+;goto loop;printf(“%d”,sum);用用while语语句句可可实实现现“当当型型”循循环环,语语句句形形式式为:为:while(表达式表达式)语句;语句;说明:说明:“表表达达式式”的的值值为为真真(非非
3、0)时时执执行行“语语句句”,然然后后返返回回while处处判判断断“表表达达式式”是是否否为为假假(0),若若为为假假,则则转转去去执执行行“语语句句”后后面面的的语语句句,否否则则,继续执行继续执行“语句语句”。“语句语句”可以是用可以是用 括起的复合语句。括起的复合语句。3.while 语句语句例例5.2用用while语语句句求求1+2+100 。main()int i,sum=0;i=1;while (i=100)sum=sum+i;i+;printf(“%d”,sum);用用dowhile语语句句可可实实现现“直直到到型型”循循环环,语语句句形形式为:式为:do 语句;语句;whil
4、e(表达式表达式);说明:说明:执执行行“语语句句”后后,判判断断“表表达达式式”是是否否为为假假(0),若若为为假假,则则结结束束循循环环,否否则则返返回回do处处继继续续执执行行“语语句句”。“语句语句”可以是用可以是用 括起的复合语句。括起的复合语句。while循循环环是是先先判判断断“表表达达式式”,后后执执行行“语语句句”。因此。因此。while循环可能一次也不会执行。循环可能一次也不会执行。do while循循环环是是先先执执行行“语语句句”,后后判判断断“表表达达式式”。因此,。因此,do while 循环至少要执行循环至少要执行 1 次次。4.do while语句语句例例5.3
5、 用用do while语句求语句求1+2+100 。main()int i,sum=0;i=1;do sum=sum+i;i+;while(i=100);printf(“%d”,sum);main()int i,sum=0;for(i=1;i=100;i+)sum=sum+i;printf(“%d”,sum);5.for 语句语句for语句的一般形式:语句的一般形式:for(表达式表达式1;表达式表达式2;表达式表达式3)语句;语句;其中:其中:“语句语句”可以是用可以是用 括起的复合语句。括起的复合语句。for语句的执行过程如图所示。语句的执行过程如图所示。例例5.3 用用 for 循环语句
6、求循环语句求1+2+100 。i=1;for(;i=100;i+)sum=sum+i;表表达达式式2常常称称为为循循环环条条件件表表达达式式,如如果果省省略略“表表达达式式2”或或三三个个表表达达式式均均省省略略,则则成为成为“死循环死循环”。如:。如:for(i=1;i+)sum=sum+i;for(;)语句;语句;表达式表达式3常用于常用于循环变量的修改循环变量的修改,可置于可置于“语句语句”中。如:中。如:for(sum=0,i=1;i=100;)sum=sum+i;i+;如果只有如果只有“表达式表达式2”,则完全等同于,则完全等同于while循环。如:循环。如:“表达式表达式1”常称为
7、常称为初始初始表达式表达式可置于可置于for语句之前,但必须保留语句之前,但必须保留“;”如:如:“表表达达式式1”可可以以是是设设置置循循环环变变量量初初值值的的赋赋值值表表达达式式,也也可可以以是是与与循循环环变变量量无无关的其它表达式。如:关的其它表达式。如:for(sum=0;i=100;i+)sum=sum+i;“表达式表达式1”和和“表达式表达式3”可以是简单表达式,也可以是逗号表达式。如:可以是简单表达式,也可以是逗号表达式。如:for(i=0,j=100;i=j;i+,j-)k=i+j;“表表达达式式2”一一般般为为关关系系表表达达式式或或逻逻辑辑表表达达式式,但但也也可可以以
8、是是数数值值表表达达式式或或字字符符表达式,只要其值为非表达式,只要其值为非0,就执行,就执行“语句语句”。for(sum=0,i=1;i=100;)sum=sum+i;i+;while(i=100)sum=sum+i;i+;1)break语句语句 break语语句句用用于于从从while、do while和和for循循环环中中跳跳出去而终止其循环出去而终止其循环。例例:for(i=1;i30)break;printf(“%f n”,s);注注:break语语句句不不能能用用于于循循环环语语句句和和switch语语句句以以外外的的任何其它语句中。任何其它语句中。2)continue语句语句co
9、ntinue语句的作用是结束语句的作用是结束本次本次循环并循环并开始下一次循环。开始下一次循环。6.break 语句和语句和 continue 语句语句例例5.4 编编程程输输出出100 200之之间间不不能能被被3整整除除的的数。数。main()int n;for(n=100;n=200;n+)if(n%3=0)continue;printf(“%d”,n);3)break语句和语句和continue语句执行流程比较语句执行流程比较例例5.5 用用“辗转相除法辗转相除法”求正整数求正整数m和和n的最大公约数。的最大公约数。“辗转相除法辗转相除法”的步骤为的步骤为:(演示演示)若若mn,则,则
10、m n;m%n r;若若r=0,转转 n m,r n,转转 输出输出n。main()int r,m,n;printf(“Enter m,n=”);scanf(“%d%d”,&m,&n);printf(“m=%d,n=%dn”,m,n);if(mn)r=m;m=n;n=r;r=m%n;while(r!=0)m=n;n=r;r=m%n;printf(“H.C.F=%dn”,n);交换例例5.6 求求100 200之之间间的的所所有有素素数数(循循环环嵌嵌套套)。(演示演示):#include“math.h”main()int f,m,i,k,n=0;for(m=101;m=200;m=m+2)if
11、(n%10=0)printf(“n”);k=sqrt(m);f=1;for(i=2;i=k;i+)if(m%i=0)f=0;break;if(f=1)printf(“%d”,m);n=n+1;例例5.8 编程求编程求1000以内的完数。以内的完数。(一个数等于因子之和为完数一个数等于因子之和为完数)#include“stdio.h”main()int m,n,sum;for(m=2;m1000;m+)sum=1;for(n=2;nm;n+)if(m%n=0)sum+=n;/*求求m的因子之和的因子之和*/if(m=sum)/*按规定格式打印按规定格式打印m*/printf(%d=1,m);for(n=2;nm;n+)if(m%n=0)printf(+%d,n);printf(n);循环小结循环小结:For while dowhile 三种循环可以相互转换。三种循环可以相互转换。用用if goto 可以构成循环可以构成循环,但不符合结构化程序设计但不符合结构化程序设计,尽量少尽量少用或不用。用或不用。三种循环可以相互嵌套。三种循环可以相互嵌套。本章习题:本章习题:P97 5.12 5.13 5.16 5.18P99 5.20 5.24 5.25 5.32 5.36 5.37
限制150内