1、第第7 7讲讲 循环的嵌套循环的嵌套一、一、continue 语句和语句和 break 语句语句 1、continue语句语句 2、break语句语句二、循环的嵌套二、循环的嵌套三、三、goto语句语句一、一、continue 语句和语句和 break 语句语句1、continue语句语句格式:格式:continue;功能:结束本次循环,使程序回行到循环条件,功能:结束本次循环,使程序回行到循环条件,判断是否提前进入下一次循环。判断是否提前进入下一次循环。continue语句只用于循环结构的内部,常与语句只用于循环结构的内部,常与if语语句联合起来使用,以便在满足条件时提前结束句联合起来使用,
2、以便在满足条件时提前结束本次循环。本次循环。例例7.1 对除对除5的倍数以外的的倍数以外的1100的数求和。的数求和。main()int i,s;s=0;for(i=1;i=100;i+)if(!(i%5)continue;s+=i;如果如果if判断语句为判断语句为真,则跳出本次循真,则跳出本次循环,回到循环条件,环,回到循环条件,判断是否进行下一判断是否进行下一次循环次循环此处,当此处,当i为为5的倍的倍数时,数时,!(i%5)为真,为真,跳出本次循环,不跳出本次循环,不执行执行continue下面下面的语句,直接进入的语句,直接进入下一次循环,即执下一次循环,即执行行for语句语句运行序列
3、如下:运行序列如下:i if(!(i%5)si 1 假假 s=0+1=1 2 假假 s=1+2=3 3 假假 s=3+3=6 4 假假 s=6+4=10 5 真真 不执行不执行 6 假假 s=10+6=16 main()int n,s;for(n=1,s=0;n=20;n=n+1)if(n%3=0)continue;printf(%dt,n);s=s+1;printf(ntotal:%dn,s);例例7.2 统计统计150150之间不能被之间不能被3 3整除的数的个数并整除的数的个数并输出这些数。输出这些数。运行结果:运行结果:2 4 5 7 8 10 11 13 14 16 17 19 20
4、total:14格式:格式:break;功能:功能:循环体中遇见循环体中遇见breakbreak语句,立即结束循语句,立即结束循环,跳到循环体外,执行循环结构后面的语环,跳到循环体外,执行循环结构后面的语句。句。2、break语句语句 在循环体中在循环体中break语句常与语句常与if语句搭配使语句搭配使用,并且用,并且break语句只能用在语句只能用在switch语句和循语句和循环语句中。环语句中。break只能跳出一层循环(或者一层只能跳出一层循环(或者一层switch语句结构)语句结构)例例7.3 统计输入的字符个数,并输出它们,以统计输入的字符个数,并输出它们,以“!”终终止。止。ma
5、in()char chr;int s;for(s=0;s+)chr=getchar();if(chr=!)break;else printf(“c%”,chr);printf(“s=%dn”,s);如果如果if判断语句为判断语句为真,则结束循环,真,则结束循环,执行循环结构后面执行循环结构后面的语句的语句此处,当输入字符此处,当输入字符为为“!”时,时,chr=!为真,结为真,结束束for循环,执行循循环,执行循环结构后面的语句,环结构后面的语句,即执行即执行printf(“s=%dn”,s)语句语句运行序列如下:运行序列如下:输入输入 if(chr=!)输出输出 a 假假 a 5 假假 5$
6、假假$B 假假 B !真真 4*输出图形:输出图形:for(i=1;i=4;i+)printf(“*”);printf(“n”);其中语句:其中语句:printf(“*”);等价于等价于for(j=1;j=8;j+)printf(“*”);于是构成了二重循环语句:于是构成了二重循环语句:for(i=1;i=4;i+)for(j=1;j=8;j+)printf(“*”);printf(“n”);上面的例子中:上面的例子中:外循环由外循环控制变量外循环由外循环控制变量i控制,控制,i由由1递增到递增到4。for(i=1;i=4;i+)for(j=1;j=8;j+)printf(“*”);print
7、f(“n”);每每1次的外循环中,都要执行由内循环控制变次的外循环中,都要执行由内循环控制变量量j控制的控制的8次内循环操作和次内循环操作和1次换行操作。次换行操作。由此:每次内循环输出一个星号由此:每次内循环输出一个星号,每次外循环输出一每次外循环输出一行行(8个个)星号星号,4次外循环,输出了次外循环,输出了4行行8列星号。列星号。n=1;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
8、+;n+;例例7.5读程序,写出运行结果:读程序,写出运行结果:输出外循环输出外循环n=11)输出内循环输出内循环 i=11)输出内循环输出内循环 i=22)输出内循环输出内循环 j=12)输出内循环输出内循环 j=22)输出内循环输出内循环 j=3输出外循环输出外循环n=2输出结果:输出结果:1)输出内循环输出内循环 i=11)输出内循环输出内循环 i=22)输出内循环输出内循环 j=1输出外循环输出外循环n=31)输出内循环输出内循环 i=1例例7.6 输出输出九九乘法表九九乘法表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递增
9、递增 19递增递增 99递增递增 39递增递增 29相同为相同为1相同为相同为2相同为相同为3相同为相同为9 外循环外循环内循环内循环i=1j =j+1j=1输 出 乘 法 表i 9j ii =i+1图 5.1 0假真真假main()int i,j ;for (i=1;i =9;i+)for(j=1;j =i;j+)printf(%d*%d=%2d,i,j,i*j);printf(n);程序程序:例例7.7 输出输出31003100中的所有素数。中的所有素数。分析:分析:1)对于某个数)对于某个数n,如果从如果从2到到n1都不能被都不能被n整除整除,则该数则该数n为素数。为素数。此处此处,除数
10、除数2到到n可以用一个可以用一个for语句来表示语句来表示:for(i=2;i=n-1;i=i+1)2)对于)对于3100之间的数之间的数,可以表示如下:可以表示如下:for(n=3;n=100;n=n+1)main()int n,i;for(n=3;n=100;n=n+1)for(i=2;i=n)printf(%dt,n);程序程序:例例7.8 读程序段读程序段,写出输出结果:写出输出结果:for(i=1;i=2;i+)for(j=1;j=3;j+)for(k=1;k=4;j+)printf(“*”);printf(“n”);*输出如下图形:输出如下图形:i从从1到到2k从从1到到4j从从1
11、到到3例例7.9 输出如下图形:输出如下图形:*分析:分析:共有共有5行,外循环行,外循环 i:15第一行输出第一行输出4个空格,个空格,1个星号个星号第三行输出第三行输出2个空格,个空格,5个星号个星号第二行输出第二行输出3个空格,个空格,3个星号个星号第五行输出第五行输出0个空格,个空格,9个星号个星号空格用循环变量空格用循环变量j控制,控制,j=5-i星号用循环变量星号用循环变量k控制,控制,k=2i-1程序程序:main()int i,j,k;for(i=1;i=5;i+)for(j=1;j=5-i;j+)printf(“”);for(k=1;k=2i-1;j+)printf(“*”)
12、;printf(“n”);练习练习7.10 输入一个整数输入一个整数n,输出如下回文塔。输出如下回文塔。1 1 2 1 1 2 3 2 1n3时时n5时时1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1三、三、goto语句语句格式:格式:goto 语句标号语句标号;标号:语句标号:语句;作用:作用:1)与)与 if 语句构成循环结构。语句构成循环结构。2)从循环体中强制退出。)从循环体中强制退出。说明:说明:1)goto语句为无条件转向语句。语句为无条件转向语句。goto语句可语句可以从循环体内跳出循环,尤其在多层循环中,以从循环体内跳出循环,尤其在多层循环中,使用使用goto语句可以跳到任意一层循环体内。语句可以跳到任意一层循环体内。2)标号的命名规则同变量名。)标号的命名规则同变量名。3)goto语句不符合结构化程序设计原则,一语句不符合结构化程序设计原则,一般不主张使用。般不主张使用。