《第07讲循环结构程序设计.ppt》由会员分享,可在线阅读,更多相关《第07讲循环结构程序设计.ppt(25页珍藏版)》请在课桌文档上搜索。
1、第七讲,Begin:,第五章 循环结构程序设计,嵌套循环结构continue 语句和 break 语句goto语句,在一个循环体内又包含另一个或多个完整的循环结构,称为循环的嵌套。,说明:(1)嵌套原则:不允许交叉。(2)循环与分支可以相互嵌套但不允许交叉。,5.4 嵌套循环结构,*,输出图形:,程序段:for(i=1;i=4;i+)printf(*);printf(n);,5.4 嵌套循环结构,其中语句:printf(*);等价于,for(j=1;j=8;j+)printf(*);,于是构成了二重循环语句:,for(i=1;i=4;i+)for(j=1;j=8;j+)printf(*);pr
2、intf(n);,5.4 嵌套循环结构,上面的例子中:外循环由循环控制变量i控制,i由1递增到4。,for(i=1;i=4;i+)for(j=1;j=8;j+)printf(*);printf(n);,每执行1次外循环,都要执行由循环控制变量j控制的8次内循环操作和1次换行操作。,5.4 嵌套循环结构,int n=1,i,j;while(n=3)printf(输出外循环 n=%dn,n);i=1;while(i=2)printf(1)输出内循环 i=%dn,i);i+;j=1;while(j=3)printf(2)输出内循环 j=%dn,j);j+;n+;,例 读程序,写出运行结果。,5.4
3、嵌套循环结构,输出结果:,5.4 嵌套循环结构,对每1行而言,列编号从1行编号,行编号从19,例 输出九九乘法表,1*1=11*2=2 2*2=41*3=3 2*3=6 3*3=9 1*9=9 2*9=18 9*9=81,5.4 嵌套循环结构,#includevoid main()int i,j;/*i表示行编号,j表示列编号*/for(i=1;i=9;i+)for(j=1;j=i;j+)printf(%d*%d=%-2d,j,i,j*i);printf(n);,5.4 嵌套循环结构,例 输出如下图形:,*,5.4 嵌套循环结构,行编号从15,对每1行而言,*个数为2行编号-1,基准行,对每1
4、行而言,空格个数为5-行编号,#includevoid main()int i,j,k;/*i表示行编号,j表示空格个 数,k表示*个数*/for(i=1;i=5;i+)for(j=1;j=5-i;j+)printf();for(k=1;k=2*i-1;k+)printf(*);printf(n);,5.4 嵌套循环结构,1、continue语句,格式:continue;,功能:结束本次循环,直接使程序回到循环控制条件重新判断。,注意:continue语句只能用于循环结构。,5.5 continue语句和break语句,例 对除5的倍数以外的1100的数求和。,#includevoid mai
5、n()int i,s=0;for(i=1;i=100;i+)if(!(i%5)continue;/*i是5的倍数则结束本次循环*/s+=i;/*i不是5的倍数则进行求和*/printf(s=%dn,s);,5.5 continue语句和break语句,#includevoid main()int i,cnt=0;for(i=1;i=50;i+)if(i%3=0)continue;printf(%dt,i);cnt+;printf(ntotal:%dn,cnt);,例 统计150之间不能被3整除的数的个数并输出这些数。,5.5 continue语句和break语句,格式:break;功能:立即终
6、止循环语句的执行,执行后续语句。,2、break语句,注意:(1)break语句只能用在switch语句和循环语句中。(2)break只能跳出直接包含它的循环语句(或者直接包含它的switch语句)。,5.5 continue语句和break语句,例 统计输入的字符个数并输出它们,以“!”终止。,#includevoid main()char ch;int cnt=0;while(1)ch=getchar();if(ch=!)break;cnt+;printf(%c,ch);printf(n字符个数=%dn,cnt);,5.5 continue语句和break语句,例 输出3100中的所有素数
7、。,分析:1)对于某整数n,如果不能被2n/2中的任何整数所整除,则该整数为素数,否则该整数为合数。,上述描述可用一个for语句来表示:for(i=2;i=n/2;i+)if(n%i=0)break;表示只要n能被2n/2中任何一个整数所整除,则n一定为合数,素数判断过程立即终止。,2)对于3100之间的整数,可以表示如下:,for(n=3;n=100;n+),5.5 continue语句和break语句,#includevoid main()int n,i;for(n=3;nn/2)/*条件满足则n为素数*/printf(%dt,n);printf(n);,5.5 continue语句和br
8、eak语句,格式:goto 标号;标号:语句,作用:使程序流程无条件转向标号所标示的位置。,5.6 goto语句和语句标号的使用,#includevoid main()int n=3,i;L1:if(nn/2)printf(%dt,n);n+;goto L1;,例 输出3100中的所有素数。,5.6 goto语句和语句标号的使用,说明:1)goto语句为无条件转向语句,可与if语句配合形成循环结构。2)在循环结构中可使用goto语句来一次跳出多层循环。3)标号的命名规则同变量名。4)goto语句不符合结构化程序设计原则,一般不主张使用。,5.6 goto语句和语句标号的使用,#includev
9、oid main()int i,j,k;for(i=1;i=4;i+)for(j=1;j=4;j+)for(k=1;k=4;k+)if(i!=j,程序举例,例 输出由1、2、3、4四个数字组成的互不相同且无重复数字的三位数。,程序举例,例 中国古代数学家张丘建在他的算经中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?请编写程序求解该问题。,#includevoid main()int cock,hen,chick;for(cock=0;cock=20;cock+)for(hen=0;hen=33;hen+)chick=100-cock-hen;if(chick%3=0,程序举例,The End,上机实验内容:熟悉嵌套循环结构,continue和break语句;实验教程第5章 实验二、实验三,