1、谭浩强谭浩强 著著清华大学出版社清华大学出版社1.概述概述 2.2.gotogoto语句以及用语句以及用gotogoto语句构成循环语句构成循环 3.3.whilewhile语句语句 4.4.do-whiledo-while语句语句 5.5.forfor语句语句6.6.循环的嵌套循环的嵌套7.7.几种循环的比较几种循环的比较8.8.breakbreak语句和语句和continuecontinue语句语句9.9.程序举例程序举例 C C程序设计程序设计 第六章第六章 循环控制循环控制 C C程序设计程序设计 第六章第六章 循环控制循环控制在给定条件成立时,反复执行某程序段,直到条件不成立为止。特
2、点:循环条件循环体分类:1)用goto语句和if语句构成循环;2)用while语句;3)用do-while语句;4)用)用for语句语句 返回主菜单 C C程序设计程序设计 第六章第六章 循环控制循环控制一般形式:goto 语句标号语句标号;由字母、数字和下划线组成,不能使用整数例6.1返回主菜单main()int i,sum=0;i=1;loop:if(i=100)sum=sum+i;i+;goto loop;printf(%dn,sum);运行程序输出:5050 C C程序设计程序设计 第六章第六章 循环控制循环控制1001nn C C程序设计程序设计 第六章第六章 循环控制循环控制一般形
3、式:while(表达式表达式)语句语句 流程图例6.2返回主菜单main()int i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%dn,sum);运行程序输出:5050 C C程序设计程序设计 第六章第六章 循环控制循环控制1001nn流程图传统流程图N-S流程图一般形式一般形式 C C程序设计程序设计 第六章第六章 循环控制循环控制 do 语句语句 while(表达式表达式);例6.3例6.4返回主菜单main()int i,sum=0;i=1;do sum=sum+i;i+;while(i=100)printf(%dn,sum);运行程序 C C
4、程序设计程序设计 第六章第六章 循环控制循环控制1001nn流程图main()int sum=0,i;scanf(“%d”,&i);while(i=10)sum=sum+i;i+;printf(“sum=%d”,sum);运行程序1 C C程序设计程序设计 第六章第六章 循环控制循环控制main()int sum=0,i;scanf(“%d”,&i);do sum=sum+i;i+;while(i=10);printf(“sum=%d”,sum);(1)(2)结果比较运行程序2(1)(2)运行情况:运行情况:1 sum55运行情况:运行情况:1 sum55再运行一次:再运行一次:11 sum0
5、再运行一次:再运行一次:11 sum11 C C程序设计程序设计 第六章第六章 循环控制循环控制一般形式一般形式for(表达式表达式1;表达式;表达式2;表达式;表达式3)语句语句 理解形式理解形式for(循环变量赋初值;循环条件;循环变量增量循环变量赋初值;循环条件;循环变量增量)语句语句改写成改写成while循环形式循环形式表达式表达式1;while(表达式表达式2)语句语句 表达式表达式3;执行过程说明返回主菜单1)先求解表达式)先求解表达式1;2)求解表达式)求解表达式2,若其值为真(非,若其值为真(非0),),则执行则执行for语句中指定的内嵌语句,语句中指定的内嵌语句,然后执行下面
6、第然后执行下面第3)步;若其值为假)步;若其值为假(0),则结束循环,转到第),则结束循环,转到第5)步)步;3)求解表达式)求解表达式3;4)转回上面第)转回上面第2)步继续执行)步继续执行;5)循环结束,执行)循环结束,执行for语句下面的一个语句下面的一个语句。语句。1)for循环中的循环中的“表达式表达式1(循环变量赋初值)(循环变量赋初值)”、“表达式表达式2(循环条件循环条件)”和和“表达式表达式3(循环变量增量循环变量增量)”都是选择项都是选择项,即即可以缺省可以缺省,但但“;”不能缺省。不能缺省。2)省略了)省略了“表达式表达式1(循环变量赋初值)(循环变量赋初值)”,表示不对
7、循环控表示不对循环控制变量赋初值。制变量赋初值。3)省略了)省略了“表达式表达式2(循环条件循环条件)”,则不做其它处理时便成为死循则不做其它处理时便成为死循环。环。4)省略了)省略了“表达式表达式3(循环变量增量循环变量增量)”,则不对循环控制变量进则不对循环控制变量进行操作行操作,这时可在语句体中加入修改循环控制变量的语句。这时可在语句体中加入修改循环控制变量的语句。5)可以省略)可以省略“表达式表达式1(循环变量赋初值)(循环变量赋初值)”和和“表达式表达式3(循环循环变量增量变量增量)”。for(i=1;i=100;)sum=sum+i;i+;for(;i=100;)相当于 while
8、(i=100)sum=sum+i;sum=sum+i;i+;i+;6)3个表达式都可以省略。个表达式都可以省略。7)表达式)表达式1可以是设置循环变量的初值的赋值表达式,也可以可以是设置循环变量的初值的赋值表达式,也可以是其他表达式。是其他表达式。8)表达式)表达式1和表达式和表达式3可以是一个简单表达式也可以是逗号表可以是一个简单表达式也可以是逗号表达式。达式。9)表达式)表达式2一般是关系表达式或逻辑表达式,但也可是数值一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,只要其值非零,就执行循环体。表达式或字符表达式,只要其值非零,就执行循环体。for(sum=0;i=100;i
9、+)sum=sum+i;for(sum=0,i=1;i=100;i+)sum=sum+i;for(;(c=getchar()!=n;)printf(“%c”,c);C C程序设计程序设计 第六章第六章 循环控制循环控制定义定义:一个循环体内又包含另一个完整的循环一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。结构,称为循环的嵌套。几种形式几种形式:while()while()while()do while()for(;)for(;)返回主菜单 C C程序设计程序设计 第六章第六章 循环控制循环控制1)四种循环都可以用来处理同一个问题,一般可以互相代替。但一般不提倡用goto型循环。2)
10、while和do-while循环,循环体中应包括使循环趋于结束的语句。for语句功能最强。3)用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成,而for语句可以在表达式1中实现循环变量的初始化。返回主菜单 C C程序设计程序设计 第六章第六章 循环控制循环控制n break语句语句n continue语句语句不能用于循环语句和switch语句之外的任何其他语句跳过循环体中剩余的语句而强行执行下一次循环 n break语句和语句和continue语句的区别语句的区别返回主菜单例6.5程序(程序(1)while(表达式表达式1)if(表达式表达
11、式2)break;程序(程序(2)while(表达式表达式1)if(表达式表达式2)continue;流程图(流程图(1)流程图(流程图(2)main()int n;for(n=100;n=200;n+)if(n%3=0)continue;printf(%d,n);运行程序 C C程序设计程序设计 第六章第六章 循环控制循环控制例:(习题例:(习题6.66.6)打印出所有的打印出所有的“水仙花数水仙花数”,所谓,所谓“水水仙花数仙花数”是指一个三位数,其各位数字的是指一个三位数,其各位数字的立方和等于该数本身。如:立方和等于该数本身。如:153153是一水仙花是一水仙花数,因为数,因为 153
12、=1153=13 3+5+53 3+3+33 3。main()main()intint i,j,k,n;i,j,k,n;for(n=100;n=999;n+)for(n=100;n=999;n+)i=?i=?j=?j=?k=?k=?if(i if(i*i i*i+ji+j*j j*j+kj+k*k k*k=n)k=n)printf(“n%d”,nprintf(“n%d”,n););通过循环列出通过循环列出n n的所有可能的范围的所有可能的范围 i=n/100;k=n%10;j=n/10%10;main()main()intint i,j,k,n;i,j,k,n;for(i=1;i=9;i+)f
13、or(i=1;i=9;i+)for(j=0;j=9;j+)for(j=0;j=9;j+)for(k=0;k=9;k+)for(k=0;k=9;k+)n=i n=i*100+j100+j*10+k;10+k;if(i if(i*i i*i+ji+j*j j*j+kj+k*k k*k=n)k=n)printf(“n%d”,nprintf(“n%d”,n););通过循环列出通过循环列出i,j,ki,j,k的所有可能的范围的所有可能的范围 C C程序设计程序设计 第六章第六章 循环控制循环控制例6.6例6.7例6.8返回主菜单例6.9例6.10#includemain()int s;float n,t
14、,pi;t=1,pi=0;n=1.0;s=1;while(fabs(t)1e-6)pi=pi+t;n=n+2;s=-s;t=s/n;pi=pi*4;printf(pi=%10.6fn,pi);运行程序 C C程序设计程序设计 第六章第六章 循环控制循环控制.7151311 C C程序设计程序设计 第六章第六章 循环控制循环控制main()long int f1,f2;int i;f1=1;f2=1;for(i=1;i=20;i+)printf(“%12ld%12ld”,f1,f2);if(i%2=0)printf(“n”);f1=f1+f2;f2=f2+f1;运行程序l有一分数序列有一分数序列
15、 2/1,3/2,5/3,8/5,13/8,21/13,.求出这个数列的前求出这个数列的前20项之和项之和.输入两个正整数m和n,求其最大公约数和最小公倍数#includemain()int m,i,k;scanf(“%d”,&m);k=sqrt(m);for(i=2;i=k+1)printf(“%d is a prime numbern”,m);elseprintf(“%d is not a prime numbern”,m);运行程序 C C程序设计程序设计 第六章第六章 循环控制循环控制 C C程序设计程序设计 第六章第六章 循环控制循环控制#include#includemain()i
16、nt m,i,k,n=0;for(m=101;m=200;m=m+2)k=sqrt(m);for(i=2;i=k+1)printf(%5d,m);n=n+1;if(n%10=0)printf(n);printf(n);运行程序 C C程序设计程序设计 第六章第六章 循环控制循环控制include main()char c;while(c=getchar()!=n)if(c=a&c=A&cZ&cz)c=c-26;printf(“%c”,c);运行程序习题习题6.2输入一行字符输入一行字符,分别统计出其中英文字母分别统计出其中英文字母,空空格格,数字和其它字符的个数数字和其它字符的个数.l编程求下
17、式的值:编程求下式的值:104321.nnnnn例例:(:(习题习题6.46.4)求求S=i!=1 1!+2+2!+3+3!+4+4!+19+19!+20+20!20i=1main()main()intint i,j;i,j;float t,s=0;float t,s=0;for(i=1;i=20;i+)for(i=1;i=20;i+)s+=?;s+=?;printf(“nprintf(“n s=%f”,s);s=%f”,s);用两重循环实现用两重循环实现s+=t;t=1;t=1;for(j=1;j=i;j+)tfor(j=1;j=i;j+)t*=j;=j;用递推法:用递推法:递推公式:递推公
18、式:t ti i=t=ti-1i-1.i.i求求S=i!=1 1!+2+2!+3+3!+4+4!+19+19!+20+20!20i=1=1+(i-1)!.i=1+ti-1.i 20i=220i=2main()main()intint i,j;i,j;float t=1,s=t;float t=1,s=t;for(i=2;i=20;i+)for(i=2;i=20;i+)t=t t=t*i;i;s+=t;s+=t;printf(“nprintf(“n s=%f”,s);s=%f”,s);例:例:递推公式:递推公式:s=s=i i!1120=+1!2!3!4!20!1 1 1 1 1t ti i=t
19、=ti-1 i-1/i imain()int i,j;float t=1,s=t;for(i=2;i=20;i+)t=t*i;s+=t;printf(“n s=%f”,s);t=t/i;t=t/i;习题习题6.3:6.3:s=s=a+aa+aaa+aaaa+aaaaaa+aa+aaa+aaaa+aaaaa 2+22+222+2222+22222 2+22+222+2222+22222 递推公式:递推公式:t ti i=t=ti-1i-1?t ti i=t=ti-1 i-1*10+a10+amain()int i,j,a=2;float t=a,s=t;for(i=2;i=5;i+)t=t*10+a;s+=t;printf(“n s=%f”,s);