资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,Program Design in C Language,Page,WUCC,第七讲,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(,*,);,printf(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 嵌套循环结构,输出结果:,5.4 嵌套循环结构,对每,1,行而言,列编号从,1,行编号,行编号从,19,例,输出,九九乘法表,1*1=1,1*2=2 2*2=4,1*3=3 2*3=6 3*3=9,1*9=9 2*9=18 9*9=81,5.4 嵌套循环结构,#include,void m,ain(),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,行而言,空格个数为,5-,行编号,#include,void 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,的倍数以外的,1,100,的数求和。,#include,void main(),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,语句,#include,void 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;,功能:,立即终止循环语句的执行,执行后续语句。,2,、,break,语句,注意:,(1)b,reak,语句只能用在,switch,语句和循环语句中。,(2)break,只能跳出直接包含它的循环语句(或者直接包含它的,switch,语句)。,5.5 continue,语句和,break,语句,例,统计输入的字符个数并输出它们,以“,!”,终止。,#include,void 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,中的所有素数。,分析:,1),对于某整数,n,,如果不能被,2n/2,中的任何整数所整除,则该整数为素数,否则该整数为合数。,上述描述可用一个,for,语句来表示:,for(i=2;i=n/2;i+),if(n%i=0)break;,表示只要,n,能被,2n/2,中任何一个整数所整除,则,n,一定为合数,素数判断过程立即终止。,2),对于,3,100,之间的整数,可以表示如下:,for(n=3;n=100;n+),5.,5,continue语句和break语句,#include,void main(),int n,i;,for,(n=3;n=100;n+),for,(i=2;in/2),/*,条件满足则,n,为素数*,/,printf(%dt,n);,printf(n);,5.,5,continue语句和break语句,格式:,goto,标号,;,标号,:,语句,作用:使程序流程无条件转向标号所标示的位置。,5.6 goto,语句和语句标号的使用,#include,void main(),int n=3,i;,L1,:if(n=100),i=2;,L2,:if(in/2)printf(%dt,n);,n+;,goto,L1,;,例,输出,3100,中的所有素数。,5.6 goto,语句和语句标号的使用,说明:,1)goto,语句为无条件转向语句,可与,if,语句配合形成循环结构。,2),在循环结构中可使用,goto,语句来一次跳出多层循环。,3),标号的命名规则同变量名。,4)goto,语句不符合结构化程序设计原则,一般不主张使用。,5.6 goto,语句和语句标号的使用,#include,void 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&j!=k&i!=k),printf(%dt,i*100+j*10+k);,printf(n);,程序举例,例,输出由,1,、,2,、,3,、,4,四个数字组成的互不相同且无重复数字的三位数。,程序举例,例,中国古代数学家张丘建在他的算经中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?,请编写程序求解该问题。,#include,void 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&cock*5+hen*3+chick/3=100),printf(cock=%dthen=%dtchick=%dn,cock,hen,chick);,程序举例,The End,上机实验内容:,熟悉嵌套循环结构,,continue,和,break,语句;,实验教程,第,5,章 实验二、实验三,
展开阅读全文