1《C语言程序设计》第六章循环控制结构2《C语言程序设计》本节内容•1while循环结构•2do-while循环结构•3for循环结构•4嵌套循环语句考点笔试说明机试说明要求考核率分值while循环结构记忆100%2-3分重点理解掌握do-while循环结构理解100%2-3分重点理解掌握for循环结构了解100%4-6分重点理解掌握嵌套循环语句理解100%3-5分重点理解掌握3《C语言程序设计》一般格式:执行流程:表达式2循环体假(0)真(非0)for表达式1表达式3for(表达式1;表达式2;表达式3){循环体语句}for语句for(k=1;k=4;k++)4《C语言程序设计》i=1i=5sum=sum+iTruei=i+1False退出循环for循环控制结构for(i=1;i=5;i++)sum=sum+i;5《C语言程序设计》课堂练习voidmain(){ints=0,i;for(i=1;i=5;i++)s=s+i;printf(“1+2+3+4+5=%d\n”,s);}1+2+3+…+100把5改为1006《C语言程序设计》voidmain(){ints=0,i;for(i=1;i=100;i++)s=s+i;printf(“s=%d\n”,s);}1+2+3+…+10011×2×3×…×100*思考题:1+2!+3!+4!+5!7《C语言程序设计》#includestdio.hmain(){inti,j,sum=0,s;for(i=1;i=5;i++){s=1;for(j=1;j=i;j++)s=s*j;sum=sum+s;}printf(sum=%d\n,sum);}求i的阶乘:i!求1+2!+3!+4!+5!之和i是在1到5之间任取一个数循环嵌套!!8《C语言程序设计》循环嵌套是否看过《盗梦空间》电影?----谜团重重六层梦境,六度轮回−第1层飞车枪战-街头飞车−第2层真空搏斗-豪华的酒店(第1层面包车正在坠河)−第3层雪地厮杀−第4层情感纠葛--柯布和妻子梅尔建造的潜意识边缘−第5层梦境边缘--唤醒齐藤,两人穿越回到现实−第6层亦真亦幻--柯布在飞机上醒来,“只要陀螺不停,他就会在梦中保持清醒”9《C语言程序设计》循环嵌套鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?百鸡问题鸡兔共笼解方程组10《C语言程序设计》解决问题的一般步骤实际问题(百鸡)抽象、简化、假设确定变量建立数学模型求解模型(编程)cocks+hens+chicks=1005*cocks+3*hens+chicks/3=100cocks-鸡公hens-母鸡chicks-小鸡11《C语言程序设计》已知2000年我国的人口是12.66亿,如果在以后的5年内人口每年平均增长1.07%,问到2005年我国的人口是多少?P=12.66:R=0.0107P=P*(1+R)for(i=;i=;i++)20012005已知2000年我国的人口是12.66亿,如果在以后每年平均增长1.07%,问多少年后我国的人口达到13亿?思考必须循环次数已知!程序的关键代码如下:12《C语言程序设计》while(){}p=p*(1+r);n=n+1;p=12.66,r=0.0107,n=0;已知2000年我国的人口是12.66亿,如果在以后每年平均增长1.07%,问多少年后我国的人口达到13亿?思考p1313《C语言程序设计》条件性循环While循环条件性循环Do…while循环14《C语言程序设计》while语句1.while循环语句的形式while(表达式)循环语句先判断条件,后执行语句表达式语句零非零2.执行过程:跳出循环15《C语言程序设计》例1:求1001nni=1,sum=0i=100?sum=sum+ii=i+1零非零main(){inti=1,sum=0;while(i=100){sum=sum+i;i++;}printf(%d,sum);}注意:(1)循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现.(2)在循环体中应有使循环趋向于结束的语句累加和sum变量需置初值0累乘积sum变量需置初值1while语句16《C语言程序设计》1.do-while循环语句的形式do循环体while(条件表达式);先执行语句,后判断条件2.执行过程表达式语句零非零跳出循环do-while语句17《C语言程序设计》表达式=0?语句零非零i=100?sum=sum+ii=i+1i=1例2:用do-while型循环求:1001nnmain(){inti=1,sum=0;do{sum=sum+i;i++;}while(i=100);printf(%d,sum);}do-while语句18《C语言程序设计》【例5.3】while和do-while循环的比较。#includestdio.hvoidmain(){intsum=0,i;scanf(%d,&i);while(i=10){sum=sum+i;i++;}printf(sum=%d\n,sum);}#includestdio.hvoidmain(){intsum=0,i;scanf(%d,&i);do{sum=sum+i;i++;}while(i=10);printf(sum=%d\n,sum);}运行结果:1↙sum=55再运行一次:11↙sum=0运行结果:1↙sum=55再运行一次:11↙sum=11结论:(1)do—while循环语句首先执行循环体,然后计算表达式并检查循环条件,所以循环体至少执行一次。(2)退出do—while循环的条件与退出while循环的条件相同do-while语句19《C语言程序设计》6.3for语句——总结用上述三种循环语句求while语句:n=1;s=1;while(n=100){s=s*n;n++;}n=1;s=1;do{s=s*n;n++;}while(n=100);do-while语句:for(n=1,s=1;n=100;n++)s=s*n;for语句:20《C语言程序设计》6.3for语句——使用格式说明for(循环变量赋初值;循环条件;循环变量增值){循环体语句}说明:for语句中任意一个表达式均可省,但分号“;”不可省!(1)省略“表达式1”,此时在for语句之前给循环变量赋初值。如for(;i=100;i++)sum=sum+i;执行时,跳过“求解表达式1”这一步,其他不变。i=1;for(;i=100;i++)sum=sum+i;21《C语言程序设计》for语句——使用格式说明for(循环变量赋初值;循环条件;循环变量增值){循环体语句}说明:(2)省略表达式2:即不判断循环条件,认为表达式2始终为真。例如:for(i=1;;i++)sum=sum+i;它相当于:i=1;while(1){sum=sum+1;i++;}22《C语言程序设计》for语句——使用格式说明for(循环变量赋初值;循环条件;循环变量增值){循环体语句}说明:(3)省略表达式3:此时程序设计者应另外设法保证循环能正常结束。如:for(i=1;i=100;){sum=sum+i;i++;}23《C语言程序设计》for语句的使用格式灵活!!!!表达式类型任意,可省略,但分号“;”不可省当表达式2被省略时,需要在循环体中设置循环结束语句,否则构成死循环无限循环:for(;;)括号后边的表达式可以是任意有效的C语言表达式for(i=1;;i++){if(i100)break;sum+=i;}6.3for语句——总结for(i=1;;i++)sum+=i;for(i=1;1;i++)sum+=i;24《C语言程序设计》break和continue语句1、break语句◦一般形式:break;◦功能:在switch语句中,结束case分支,跳出switch语句在循环语句,终止并跳出循环体◦说明:break只能终止并跳出最近一层的结构break只能用于循环语句和switch语句中25《C语言程序设计》表达式……break;……假(0)真(非0)while表达式2……break;…...假(0)真(非0)for表达式1表达式3break和continue语句26《C语言程序设计》26switch表达式语句组1break;语句组2break;语句组nbreak;语句组break;…...const1const2constndefaultcasebreak和continue语句27《C语言程序设计》2、continue语句一般形式:continue;功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断说明:仅用于循环语句中continue语句仅结束本次循环。break语句则是结束整个循环过程。break和continue语句28《C语言程序设计》真(非0)do……continue;…...表达式假(0)while表达式……continue;……假(0)真(非0)while表达式2……continue;…...假(0)真(非0)for表达式1表达式3break和continue语句29《C语言程序设计》while循环(21)有以下程序【2010年9月】#includestdio.hmain(){inty=10;while(y--);printf(y=%d\n,y);}程序执行后的输出结果是A)y=0B)y=-1C)y=1D)while构成无限循环30《C语言程序设计》while循环真题3:下列程序的输出结果是。[2007.9]#includestdio.hmain(){intn=12345,d;while(n!=0){d=n%10;printf(''%d'',d);n/=10;}}答案:5432131《C语言程序设计》dowhile循环真题2:下列程序的功能是:将输入的正整数按逆序输出。例如,若输入135则输出531。请填空。【2006.9】#includestdio.hmain(){intn,s;scanf(''%d'',&n);do{s=n%10;printf(''%d'',s);;}while(n!=0);printf(''\n'');}答案:n=n/1032《C语言程序设计》21、有以下程序#includestdio.hmain(){ints=0,n;for(n=0;n3;n++){switch(s){case0:case1:s+=1;case2:s+=2;break;case3:s+3;case4:s+=4;}printf((%d\n,s);}}程序运行后的结果是A1,2,4B1,3,6C3,10,14D3,6,1033《C语言程序设计》真题5:有以下程序【2008.9】#includestdio.hmain(){inti=5;do{if(i%3==1)if(i%5==2){printf(*%d,i);break;}i++;}while(i!=0);printf(\n);}程序的运行结果是A)*7B)*3*5C)*5D)*2*6break语句34《C语言程序设计》continue语句真题:执有以下程序#includestdi0.hmain(){intx=8;for(;x0;x--){if(x%3){printf(''%d,'',x--);continue;}printf(''%d,'',--x);}}程序的运行结果是()。【2008.4】A)7,4,2,B)8,7,5,2,C)9,7,6,4,D)8,5,4,2,35《C语言程序设计》break和continue语句真题1:下列程序的输出结果是()。【2005.4】main(){inta=1,b;for(b=1;b=10;b++){if(a=8)break;i