(精品)C语言程序设计第8讲(2012级).ppt
1/29/20231 Program Design in C LanguagePage第八讲第八讲第五章第五章 循环结构程序设计循环结构程序设计循环结构程序设计循环结构程序设计 continue 语句和语句和 break 语句语句循环的嵌套循环的嵌套goto语句语句1/29/20232 Program Design in C LanguagePage1、continue语句语句格式:格式:continue;功能:结束本次循环,使程序回行到循环条件,功能:结束本次循环,使程序回行到循环条件,判断是否提前进入下一次循环。判断是否提前进入下一次循环。continue语句只用于循环结构的内部,常与语句只用于循环结构的内部,常与if语语句联合起来使用,以便在满足条件时提前结束句联合起来使用,以便在满足条件时提前结束本次循环。本次循环。5.4 continue语句和break语句 1/29/20233 Program Design in C LanguagePage例例 对除对除5的倍数以外的的倍数以外的1100的数求和。的数求和。main()int i,s;s=0;for(i=1;i=100;i+)if(!(i%5)continue;s+=i;printf(“%d,%dn”,i,s);如果如果if判断语句为判断语句为真,则跳出本次循真,则跳出本次循环,回到循环条件,环,回到循环条件,判断是否进行下一判断是否进行下一次循环次循环此处,当此处,当i为为5的倍的倍数时,数时,!(i%5)为真,为真,跳出本次循环,不跳出本次循环,不执行执行continue下面下面的语句,直接进入的语句,直接进入下一次循环,即执下一次循环,即执行行for语句语句运行序列如下:运行序列如下: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 5.4 continue语句和break语句 1/29/20234 Program Design in C LanguagePagemain()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);例例 统计统计150150之间不能被之间不能被3 3整除的数的个数并输出这整除的数的个数并输出这些数。些数。运行结果:运行结果:1 2 4 5 7 8 10 11 13 14 16 17 19 20total:145.4 continue语句和break语句 1/29/20235 Program Design in C LanguagePage格式:格式:break;功能:功能:循环体中遇见循环体中遇见breakbreak语句,立即结束循语句,立即结束循环,跳到循环体外,执行循环结构后面的语环,跳到循环体外,执行循环结构后面的语句。句。2、break语句语句 在循环体中在循环体中break语句常与语句常与if语句搭配使用语句搭配使用,并且,并且break语句只能用在语句只能用在switch语句和循环语句和循环语句中。语句中。break只能跳出一层循环(或者一层只能跳出一层循环(或者一层switch语句结构)语句结构)5.4 continue语句和break语句 1/29/20236 Program Design in C LanguagePage例例 统计输入的字符个数,并输出它们,以统计输入的字符个数,并输出它们,以“!”终止。终止。main()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$假假$B 假假 B !真真 45.4 continue语句和break语句 1/29/20237 Program Design in C LanguagePage例例 计算半径计算半径r=1到到r=10时圆的面积,直到面积时圆的面积,直到面积area大于大于100为止。为止。#define pi 3.14159main()int r;float area;for(r=1;r100)break;printf(“%fn”,area);5.4 continue语句和break语句 1/29/20238 Program Design in C LanguagePage一个循环体内又包含另一个完整的循环结构,称一个循环体内又包含另一个完整的循环结构,称为循环的嵌套,内嵌的循环中还可以嵌套循环即为循环的嵌套,内嵌的循环中还可以嵌套循环即为多层循环。为多层循环。说明:说明:嵌套的原则嵌套的原则:不允许交叉不允许交叉 循环与分支可以相互嵌套但不允许交叉。循环与分支可以相互嵌套但不允许交叉。5.5 循环的嵌套 1/29/20239 Program Design in C LanguagePage*输出图形:输出图形:for(i=1;i=4;i+)printf(“*”);printf(“n”);5.5 循环的嵌套 1/29/202310 Program Design in C LanguagePage其中语句:其中语句:printf(“*”);等价于等价于for(j=1;j=8;j+)printf(“*”);于是构成了二重循环语句:于是构成了二重循环语句:for(i=1;i=4;i+)for(j=1;j=8;j+)printf(“*”);printf(“n”);5.5 循环的嵌套 1/29/202311 Program Design in C LanguagePage 上面的例子中:上面的例子中:外循环由外循环控制变量外循环由外循环控制变量i控制,控制,i由由1递增到递增到4。for(i=1;i=4;i+)for(j=1;j=8;j+)printf(“*”);printf(“n”);每每1次的外循环中,都要执行由内循环控制变次的外循环中,都要执行由内循环控制变量量j控制的控制的8次内循环操作和次内循环操作和1次换行操作。次换行操作。由此:每次内循环输出一个星号由此:每次内循环输出一个星号,外循环输出一行外循环输出一行(8个个)星号星号,4次外循环,输出了次外循环,输出了4行行8列星号。列星号。5.5 循环的嵌套 1/29/202312 Program Design in C LanguagePagen=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+;n+;例例 读程序,写出运行结果:读程序,写出运行结果:5.5 循环的嵌套 1/29/202313 Program Design in C LanguagePage输出外循环输出外循环n=11)输出内循环输出内循环 i=11)输出内循环输出内循环 i=22)输出内循环输出内循环 j=12)输出内循环输出内循环 j=22)输出内循环输出内循环 j=3输出外循环输出外循环n=2输出结果:输出结果:1)输出内循环输出内循环 i=11)输出内循环输出内循环 i=22)输出内循环输出内循环 j=1输出外循环输出外循环n=31)输出内循环输出内循环 i=15.5 循环的嵌套 1/29/202314 Program Design in C LanguagePage例例 输出输出九九乘法表九九乘法表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递递增增 19递递增增 99递递增增 39递递增增 29相相同同为为1相相同同为为2相相同同为为3相相同同为为95.5 循环的嵌套 1/29/202315 Program Design in C LanguagePage例例 输出输出九九乘法表九九乘法表1*1=11*2=2 2*2=41*3=3 2*3=6 3*3=9 1*9=9 2*9=18 9*9=815.5 循环的嵌套 i=1,j=1i=2,i=1至至2iji=3,i=1至至31/29/202316 Program Design in C LanguagePage 外外循循环环内内循循环环5.5 循环的嵌套 1/29/202317 Program Design in C LanguagePagemain()int i,j ;for (i=1;i =9;i+)for(j=1;j =i;j+)printf(%d*%d=%2d,j,i,i*j);printf(n);程序程序:5.5 循环的嵌套 1/29/202318 Program Design in C LanguagePage例例 输出输出31003100中的所有素数。中的所有素数。分析:分析:1)对于某个数)对于某个数n,如果从如果从2到到n1都不能被都不能被n整除整除,则该数则该数n为素数。为素数。此处此处,除数除数2到到n可以用一个可以用一个for语句来表示语句来表示:for(i=2;i=n-1;i=i+1)2)对于)对于3100之间的数之间的数,可以表示如下:可以表示如下:for(n=3;n=100;n=n+1)5.5 循环的嵌套 1/29/202319 Program Design in C LanguagePagemain()int n,i;for(n=3;n=100;n=n+1)for(i=2;i=n)printf(%dt,n);程序程序:5.5 循环的嵌套 1/29/202320 Program Design in C LanguagePage例例 读程序段读程序段,写出输出结果:写出输出结果:for(i=1;i=2;i+)for(j=1;j=3;j+)for(k=1;k=4;k+)printf(“*”);printf(“n”);printf(“nn”);5.5 循环的嵌套 1/29/202321 Program Design in C LanguagePage*输出如下图形:输出如下图形:i从从1到到2k从从1到到4j从从1到到35.5 循环的嵌套 1/29/202322 Program Design in C LanguagePage例例 输出如下图形:输出如下图形:*5.5 循环的嵌套 1/29/202323 Program Design in C LanguagePage *分析:分析:共有共有5行,外循环行,外循环 i:15第一行输出第一行输出4个空格,个空格,1个星号个星号第三行输出第三行输出2个空格,个空格,5个星号个星号第二行输出第二行输出3个空格,个空格,3个星号个星号第五行输出第五行输出0个空格,个空格,9个星号个星号空格用循环变量空格用循环变量j控制,控制,j=5-i星号用循环变量星号用循环变量k控制,控制,k=2*i-15.5 循环的嵌套 1/29/202324 Program Design in C LanguagePage程序程序:main()int 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.5 循环的嵌套 1/29/202325 Program Design in C LanguagePage练习练习 输入一个整数输入一个整数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 15.5 循环的嵌套 1/29/202326 Program Design in C LanguagePage程序程序:main()int n,i;printf(“input a numbern”);scanf(“%d”,&n);for(i=1;i=n;i+)for(j=1;j=n-i;j+)printf(“”);for(j=1;j=1;j-)printf(“%d”,j);printf(“n”);5.5 循环的嵌套 1/29/202327 Program Design in C LanguagePage练习练习 求数的因子求数的因子5.5 循环的嵌套 1/29/202328 Program Design in C LanguagePage程序程序:#include void main()int num;int i;printf(please input a number);scanf(%d,&num);for(i=1;inum;i+)if(num%i=0)printf(%d is a 因子因子,i);5.5 循环的嵌套 1/29/202329 Program Design in C LanguagePage练习练习 求完数求完数所谓完数是指这样的数:该数的各因子之和正好等于该所谓完数是指这样的数:该数的各因子之和正好等于该数本身。数本身。5.5 循环的嵌套 1/29/202330 Program Design in C LanguagePage程序程序:#include void main()int m,i,s;for(m=2;m1000;m+)s=1;for(i=2;i=m/2;i+)if(m%i=0)s=s+i;if(s=m)printf(%d is 完数完数 its factors are,m);for(i=1;i=m;i+)if(m%i=0)printf(%d,i);printf(n);5.5 循环的嵌套 1/29/202331 Program Design in C LanguagePage程序程序:#include void main()char c;int letters=0,space=0,digit=0,others=0;printf(please input some charactersn);while(c=getchar()!=n)if(c=a&c=A&c=0&c=9)digit+;else others+;printf(all in all:char=%d space=%d digit=%d others=%dn,letters,space,digit,others);5.5 循环的嵌套 1/29/202332 Program Design in C LanguagePage格式:格式:goto 语句标号语句标号;标号:语句标号:语句;作用:作用:1)与)与 if 语句构成循环结构。语句构成循环结构。2)从循环体中强制退出。)从循环体中强制退出。5.6 goto语句和语句标号的使用 1/29/202333 Program Design in C LanguagePage说明:说明:1)goto语句为无条件转向语句。语句为无条件转向语句。goto语句可语句可以从循环体内跳出循环,尤其在多层循环中,以从循环体内跳出循环,尤其在多层循环中,使用使用goto语句可以跳到任意一层循环体内。语句可以跳到任意一层循环体内。2)标号的命名规则同变量名。)标号的命名规则同变量名。3)goto语句不符合结构化程序设计原则,一语句不符合结构化程序设计原则,一般不主张使用。般不主张使用。5.6 goto语句和语句标号的使用 1/29/202334 Program Design in C LanguagePage上机实验内容,在网站上查看。上机实验内容,在网站上查看。网站网站: 点击作业页面点击作业页面刘英刘英_C语言第语言第7次作业次作业(第第8周上机课完成周上机课完成)1/29/202335 Program Design in C LanguagePage上机实验内容:上机实验内容:编程题:编程题:(1)(1)从输入的若干个大于零的正整数中选出最从输入的若干个大于零的正整数中选出最大数,用大数,用-1-1结束输入。结束输入。1/29/202336 Program Design in C LanguagePage上机实验内容:上机实验内容:编程题:编程题:(2)(2)编写程序打印如下图形:编写程序打印如下图形:*1/29/202337 Program Design in C LanguagePage上机实验内容:上机实验内容:编程题:编程题:(3)(3)编写程序,输出从公元编写程序,输出从公元20002000年至年至30003000年年所有的闰年的年号,每输出所有的闰年的年号,每输出1010个年号换一个年号换一行。判断闰年的条件是:行。判断闰年的条件是:公元年数能被公元年数能被4 4整除而不能被整除而不能被100100整除,是闰整除,是闰年,或者公元年数能被年,或者公元年数能被400400整除也是闰年。整除也是闰年。