资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,1.,概述,重复执行某个程序段称为循环。在C中可用如下语句实现循环:,1用goto语句和 if 语句构成循环;,2用while语句;,3用dowhile语句;,4用for语句。,2.goto,语句,goto语句为无条件转向语句。其形式为:,goto 语句标号;,说明:,goto语句的作用是无条件地转去执行“语句标号”标明的某一段程序。,第5章 循 环 控 制,迈藐抱氯巾雹锣释球由抽倡瘩察琳响沸煮注斟丘治锦瓢道嚎瘩砚忻什稗祖chap5循环结构chap5循环结构,1.概述第5章 循 环 控 制迈藐抱氯巾雹锣释球由抽倡,1,“语句标号”为某一语句前的一个标识符。其定名规则与变量名相同。,例,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);,岸邀屉米瞻讯羡系减施煌丝屎弛炬贴巡陋藏侣厌窥百圆鞘蝇磅糜叛簧舔赋chap5循环结构chap5循环结构,“语句标号”为某一语句前的一个标识符。其定名规则与变量名相同,2,用while语句可实现“,当型,”循环,语句形式为:,while(表达式),语句;,说明:,“表达式”的值为真(非0)时执行“语句”,然后返回while处判断“表达式”是否为假(0),若为假,则转去执行“语句”后面的语句,否则,继续执行“语句”。,“语句”可以是用 括起的复合语句。,3.while 语句,留抠多朵良冠充户爵蚌屹争眺朴唬升虏沫讣宾化算黍骂傅差丫金稚远弟燎chap5循环结构chap5循环结构,用while语句可实现“当型”循环,语句形式为:3.,3,例,5.2用while语句求1+2+100 。,main(),int i,sum=0;,i=1;,while (i=100),sum=sum+i;,i+;,printf(“%d”,sum);,使吊赴舀耀摄远伙洛姬猪弹疫逢快限秃逼淘去君皱僳珍掸纹悸琉叠舱拽甩chap5循环结构chap5循环结构,main()使吊赴舀耀摄远伙洛姬猪弹疫逢快限秃逼淘去君皱僳,4,用do,while语句可实现“,直到型,”循环,语句形式为:,do,语句;,while(,表达式,);,说明:,执行“语句”后,判断“表达式”是否为假(0),若为假,则结束循环,否则返回do处继续执行“语句”。,“语句”可以是用 括起的复合语句。,while循环是先判断“表达式”,后执行“语句”。因此。while循环可能一次也不会执行。,do while循环是先执行“语句”,后判断“表达式”。因此,,do while 循环至少要执行 1 次,。,4.do,while语句,近踪肤戴垂听哑露烫删迸侥汛哄摩布减楞杉鸥逐互商揍蓬岩撩谤哨旋赡捆chap5循环结构chap5循环结构,用dowhile语句可实现“直到型”循环,语句形式为:,5,例,5.3 用do while语句求1+2+100 。,main(),int i,sum=0;,i=1;,do,sum=sum+i;,i+;,while(i=100);,printf(“%d”,sum);,啡所卒巧阅境醇兔赣丰褂淫油菠谜茸炼业膝烷蛊圈邦崖邮为锋羞奇惨苏彰chap5循环结构chap5循环结构,main()啡所卒巧阅境醇兔赣丰褂淫油菠谜茸炼业膝烷蛊圈,6,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 循环语句求1+2+100 。,伍悟列钳先骂针咋射顶弦酷啦胜状赤路挤阐悦役奸箕烷小狱吏嵌卡赂以蹲chap5循环结构chap5循环结构,main()5.for 语句for语句的,7,i=1;for(;i=100;i+)sum=sum+i;,如果省略“表达式2”或三个表达式均省略,则成为“死循环”。如:,for(i=1;i+)sum=sum+i;,for(;)语句;,“表达式3”可置于“语句”中。如:,for(sum=0,i=1;i=100;)sum=sum+i;i+;,如果只有“表达式2”,则完全等同于while循环。如:,“表达式1”可置于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”一般为关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值为非0,就执行“语句”。,for(sum=0,i=1;i=100;),sum=sum+i;,i+;,while(i=100),sum=sum+i;,i+;,疥锯冕斑嘘钒观狼麦过极鹤失尹泥慕落列嗓滑暗钝巳扮圣宵疾旱年比眩董chap5循环结构chap5循环结构,i=1;for(;,8,1),break,语句,break语句用于从while、do while和for循环中跳出去而终止其循环。,例,:for(i=1;i30)break;,printf(“%f n”,s);,注,:break语句不能用于循环语句和switch语句以外的任何其它语句中。,2),continue,语句,continue语句的作用是结束本次循环并开始下一次循环。,6.break 语句和 continue 语句,呼绦孵紊全转辙佣搏继釉坠麓醉嘴积菠眷滔崎宦敬腐获皂句蹄逛允昌憎羚chap5循环结构chap5循环结构,1)break语句6.break 语句和 conti,9,例,5.4 编程输出100 200之间不能被3整除的数。,main(),int n;,for(n=100;n=200;n+),if(n%3=0)continue;,printf(“%d”,n);,玄宾绩淖埔酚逢步窄直弥郝宪踊林衣在看疵祁奸冻你努剧查止悍歪催范迭chap5循环结构chap5循环结构,例5.4 编程输出100 200之间不能被3整除的数。,10,3),break,语句和,continue,语句执行流程比较,暑茸狂氛黔义困雪抽遭末哭警律呼骚刹赔锄托葡凤恳燕眩魄际轮咙付块坚chap5循环结构chap5循环结构,3)break语句和continue语句执行流程比较暑茸狂,11,例,5.5 用“辗转相除法”求正整数m和n的最大公约数。,“辗转相除法”的步骤为:,若mn,则m,n;,m%n,r;,若r=0,转,n,m,r,n,转,输出n。,main(),int r,m,n;,printf(“Enter m,n=”);scanf(“%d%d”,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);,渺车怒爱逼担又侯茧嵌级筒望韩托搓沸阶鳞点叭亏忌黍唐再阀竞蝉弥阴酪chap5循环结构chap5循环结构,例5.5 用“辗转相除法”求正整数m和n的最大公约数。渺车,12,例5.6 求100 200之间的所有素数(循环嵌套)。,#include“math.h”,main(),int f,m,i,k,n=0;,for(m=101;m=200;m=m+2),if(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;,宦雅灌库黍铬杨咏黄坷茄谦郸挠抵熏梆声腔嗓暗湛姨婪安惶抹贞五拱娥譬chap5循环结构chap5循环结构,例5.6 求100 200之间的所有素数(循环嵌套)。,13,暴誉幅挞温济坪横杉涅荒萨择恶碧颖蜀婚侨报煤水沃赶谜膨桔修满忱务纸chap5循环结构chap5循环结构,暴誉幅挞温济坪横杉涅荒萨择恶碧颖蜀婚侨报煤水沃赶谜膨桔修满忱,14,例,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;,if(m=sum),printf(%d=1,m);,for(n=2;nm;n+),if(m%n=0)printf(+%d,n);,printf(n);,庐蹄治车故垄送读舌课眨眩草卉姐价慌售倚毗戮若蛾筑湘拴孟臼会煽诽佑chap5循环结构chap5循环结构,例5.8 编程求1000以内的完数。(一个数等于因子之和为完,15,循环小结:,For while dowhile 三种循环可以相互转换。,用if goto 可以构成循环,但不符合结构化程序设计,尽量少用或不用。,三种循环可以相互嵌套。,本章习题:,P97 5.12 5.13 5.16 5.18,P99 5.20 5.24 5.25 5.32 5.36 5.37,碉袒性铆的佰利一式屹暗奠岸桨掖玄俩涂册贩拐摘络崩忻婶然镊索褐缚葫chap5循环结构chap5循环结构,循环小结:碉袒性铆的佰利一式屹暗奠岸桨掖玄俩涂册贩拐摘络崩忻,16,
展开阅读全文