1、第6章 循环控制,主要内容,概述,goto语句,while语句实现循环,do.while语句实现循环,for语句实现循环,循环的嵌套,break、continue语句,几种循环语句的比较,do.while语句实现循环,for语句实现循环,循环的嵌套,do.while语句实现循环,for语句实现循环,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套
2、,do.while语句实现循环,for语句实现循环,goto语句,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,goto语句,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,概述,goto语句,打印整数110 打印整数1100 打印整数1n,6.1 概述,printf(“%d”,1); printf(“%d”,2); printf(“%d”,10);,printf(“%d”,i); i+; printf(“%d
3、”,i); i+; printf(“%d”,i); i+;,i=1,语言提供了多种循环语句,可以组成 各种不同形式的循环结构。 用goto语句和if语句构成循环;-不提倡 用while语句; -当型循环 用do-while语句; -直到型循环 用for语句; -多功能,6.1 概述,主要内容,概述,goto语句,while语句实现循环,do.while语句实现循环,for语句实现循环,循环的嵌套,break、continue语句,几种循环语句的比较,do.while语句实现循环,for语句实现循环,循环的嵌套,do.while语句实现循环,for语句实现循环,break、continue语句,
4、循环的嵌套,do.while语句实现循环,for语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,goto语句,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,goto语句,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现
5、循环,for语句实现循环,概述,goto语句,6.2 goto语句,一般形式:goto 语句标号;,语句标号:标识符 (用于定义程序中的某个位置) 功 能:无条件转向语句标号所指的语句 附: 与if语句一起构成循环结构。 从循环体中跳转到循环体外。,例6-1 1+2+100=?,#include main( ) int i,sum=0; i=1; loop: if(i=100) sum+=i;i+;goto loop; printf(“%dn“,sum); ,【课后练习】 究竟是谁?,12个“1”字分站在等号的两边,成为:111111=111111 忽然跑来一个人,带着两个乘号“*”,挤进等号
6、的右 边,“ 1 ”字们说,“喂,你别捣乱”,他却说:“没关 系,我不影响你们”,于是他把“*”号插在几个“1”字 的中间, 自己也占据了一个位置, 果然,两边仍然 相等:111111=111*11*1 请问这个多余的第三者究竟是谁。,主要内容,概述,goto语句,while语句实现循环,do.while语句实现循环,for语句实现循环,循环的嵌套,break、continue语句,几种循环语句的比较,do.while语句实现循环,for语句实现循环,循环的嵌套,do.while语句实现循环,for语句实现循环,break、continue语句,循环的嵌套,do.while语句实现循环,for
7、语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,goto语句,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,goto语句,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,概述,goto语句,如
8、:k=1; while ( k 5 ) s=s+k; k+; ,6.3 用while语句实现循环,一般形式:while(表达式) 语句;,6.3 用while语句实现循环,若循环体有一条以上的语句,应以复合语句形式出现。循环前,必须给循环控制变量赋初值。循环体中,必须有使循环趋于结束的语句。循环体可以为空。,如:k=1; while ( k 5 ) s=s+k; k+; ,while(k+5) ;,例6-2 求1+2+3+50,sum=0,sum+1 sum,sum+2 sum,sum+3 sum,sum+50 sum,sum =sum+?,int s=0,i=1; while(i=50) s
9、=s+i;i+; ,#include main( ) int s=0,i=1; while(i=50) s=s+i; i+; printf(“s=%dn“,s); ,例6-3 求1*2*5,#include main( ) int t=1,i=1; while(i=5) t=t*i; i+; printf(“t=%dn“,t); ,int t=1,i=1,s=0;,插入语句s+=t;,printf(“t=%d,s=%dn”,t,s);,主要内容,概述,goto语句,while语句实现循环,do.while语句实现循环,for语句实现循环,循环的嵌套,break、continue语句,几种循环语
10、句的比较,do.while语句实现循环,for语句实现循环,循环的嵌套,do.while语句实现循环,for语句实现循环,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,goto语句,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实
11、现循环,for语句实现循环,goto语句,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,概述,goto语句,6.4 用do-while语句实现循环,一般形式:,i=1; do printf(“%d”,i); i+; while(i=10);,do 循环体语句 while(表达式) ;,例6-4 求1+2+50,#include main( ) int s=0,i=1; dos=s+i;i+; while(i=50); printf(“s=%dn“,s); ,while(表达式) 语句;,do 语句 w
12、hile(表达式),后执行 循环体,先判断,先执行 循环体,后判断,sum=0;i=1; do sum=sum+i; i+; while(i=10); printf(“sum=%dn”,sum),sum=0;i=1; while(i=10) sum=sum+i; i+; printf(“sum=%dn”,sum),while(表达式) 语句;,do语句 while(表达式),scanf (“ %d ”,dowhile 至少执行一次循环体,#include main( ) int x,sum=0; scanf(“%d“, ,例6-5 输入一些整数,求和,直到输入负数为止。,#include ma
13、in( ) int x,sum=0; scanf(“%d“, ,主要内容,概述,goto语句,while语句实现循环,do.while语句实现循环,for语句实现循环,循环的嵌套,break、continue语句,几种循环语句的比较,do.while语句实现循环,for语句实现循环,循环的嵌套,do.while语句实现循环,for语句实现循环,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,while语句实现循环,几种循环语句的比较
14、,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,goto语句,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,goto语句,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,概述,goto语句,6.5 用for语句实现循环,for语句的一般形式:,for(表达式1;表达式2;表达式3) 语句,6.5 用for语句实现循环,for(表达式1;表达式2;表达式3) 语句
15、,for(循环变量赋初值;循环条件;循环变量增值),语句,真,假,for(A;B;C) 语句,A; while(B) 语句; C; ,for(i=1;i=100;i+) sum+=i;,i=1; while(i=100) sum+=i;i+; ,6.5 用for语句实现循环,#include main( ) int s=0,i;printf(“s=%dn”,s); ,例6-6 求1+2+3+50 (for语句),#include main( ) int s=0,i=1; while(i=50) s=s+i;i+; printf(“s=%dn“,s); ,for(i=1;i=50;i+)s=s+
16、i;,例6-7 求1!+2!+5! (for语句),#include main( ) int t=1,i=1,s=0; while(i=5) t=t*i; s+=t; i+; printf(“s=%dn“,s); ,#include main( ) int t=1,i,s=0;for(i=1;i=5;i+)t=t*i;s+=t; printf(“s=%dn“,s); ,例6-8 求100以内奇数和与偶数和 (for语句),#include main( ) int i,j,s;j=0,s=0;for(i=1;i=100;i+=2)j=j+i;s=s+(i+1); printf(“j=%d,s=%
17、dn“,j,s); ,for(i=1;i=100;i+) sum+=i;,注意, for循环中的“A”、“B”和“C”都是可选择项, 即可以缺省, 但“;”不能缺省。 省略了“A(循环变量赋初值)”, 表示不对循环控制变量赋初值。,for(;i=100;i+) sum+=i;,i=1; for(;i=100;i+) sum+=i;,for(i=1; ;i+) sum+=i;, 省略了“B(循环条件)”, 则不作其它处理时便成为死循环,也即B始终为真。,int i=1; while(1) sum+=i; i+;,for(i=1;i=100;i+) sum+=i;,注意, 省略了“C(循环变量增量
18、)”, 可在语句体中加入修改循环控制变量的语句。,for(i=1;i=100;) sum+=i;i+; , 省略了“A”和“C”。,i=1; for(;i=100;) sum+=i;i+; ,i=1; while(i=100) sum+=i;i+; ,for(i=1;i=100;i+) sum+=i;,注意, 3个表达式都可省略。,for( ; ; ) 语句,while(1) 语句, A可以是对循环变量的初值的设置,也可以是其他表达式。,i=1; for(sum=0;i=100;i+) sum=sum+i;,for(i=1;i=100;i+) sum+=i;,注意, B一般是关系表达式或逻辑表
19、达式,但也可是其它表达式,只要其值非零,就执行循环体。,for(i=0; (c=getchar( )!=n ;i+=c) ;,for(k=1;k-4;k+) s=s+k ;,for(i=1;i=100;i+) sum+=i;,注意, A和C可以是一个简单表达式也可以是逗号表达式,for(sum=0,i=1;i=100;i+) sum=sum+i;,for (i=0,j=50;i=j ;i+ ,j- ) sum=j+i;,例6-9 读程序,判断程序的功能,#include main( ) char c; for( ; (c=getchar( )!=n ; )printf (“%c“ ,c); ,
20、例6-10,打印整数110 打印整数1100 打印整数1n,#include main( ) int i=1; while(i=10) printf(“ %d “,i);i+; ,打印整数110 打印整数1100 打印整数1n,#include main( ) int i=1; do printf(“ %d “,i);i+; while(i=10); ,例6-10,打印整数110 打印整数1100 打印整数1n,#include main( ) int i; for(i=1;i=10;i+) printf(“ %d “,i); ,例6-10,主要内容,概述,goto语句,while语句实现循环
21、,do.while语句实现循环,for语句实现循环,循环的嵌套,break、continue语句,几种循环语句的比较,do.while语句实现循环,for语句实现循环,循环的嵌套,do.while语句实现循环,for语句实现循环,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,goto语句,wh
22、ile语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,goto语句,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,概述,goto语句,6.6 循环的嵌套,while(表达式)语句;,循环结构,while( ) while( ),6.6 循环的嵌套,main( ) int i,j,sum=0; for(i=1;i=3;i+)for(j=1;j=2;j+)sum+=i+j; printf(“%d“,sum); ,j=1,j=
23、2,i=1,i=2,i=3,sum=2,sum=5,sum=8,sum=12,sum=16,sum=21,j=3,i=4,例6-11 编程实现九九乘法表,main( ) int i , j , t;for(i=1;i=9;i+)for(j=1;j=9;j+) t=i*j;printf(“%d*%d=%dt“,i,j,t);printf(“n“); ,例6-11 编程实现乘法表(2),main( ) int i , j , t; for(i=1;i=9;i+) for(j=1; j=i; j+) t=i*j;printf(“%d*%d=%dt“,i,j,t); printf(“n“); ,主要内
24、容,概述,goto语句,while语句实现循环,do.while语句实现循环,for语句实现循环,循环的嵌套,break、continue语句,几种循环语句的比较,do.while语句实现循环,for语句实现循环,循环的嵌套,do.while语句实现循环,for语句实现循环,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实
25、现循环,for语句实现循环,goto语句,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,goto语句,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,概述,goto语句,6.7 break语句和continue语句,一、break语句,一般形式:break;,switch(x) case 1: .; case 2: .;break; case 3: .; ,while(x5)break; . ,功能,6.7 b
26、reak语句和continue语句,for(s=0,i=1;i15) break;printf(“s=%d”,s); ,注意: break 不能用于循环语句和switch语句之外的任何其它语句中在多层循环中,一个break 语句只向外跳一层。,6.7 break语句和continue语句,二、continue语句,一般形式:continue;,功能:continue语句的作用是跳过循环体中剩余的语句 而强行执行下一次循环,即结束本次循环。continue语句只用在for、while、do-while等循环 体中,常与if条件语句一起使用,用来加速循环。,while(表达式1) if(表达式2)
27、break; ,while(表达式1) if(表达式2)continue; ,continue:只结束本次循环,而不是终止整个循环的执行; break:结束整个循环,不再判断执行循环的条件是否成立。,#include main( ) char c; int i=0; for(i=0;i10;i+) c=getchar( );if(c=n) break;putchar(c); ,#include main( ) char c; int i=0; for(i=0;i10;i+) c=getchar( );if(c=n) continue;putchar(c); ,例6-11 break 和 con
28、tinue,输入:abcefgh 123 ,输出:abc,输出:abcefgh1,主要内容,概述,goto语句,while语句实现循环,do.while语句实现循环,for语句实现循环,循环的嵌套,break、continue语句,几种循环语句的比较,do.while语句实现循环,for语句实现循环,循环的嵌套,do.while语句实现循环,for语句实现循环,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,while语句实现循环,
29、几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,goto语句,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,goto语句,while语句实现循环,几种循环语句的比较,break、continue语句,循环的嵌套,do.while语句实现循环,for语句实现循环,概述,goto语句,6.8 几种循环的比较,四种循环都可以用来处理同一个问题,一般可以互相代替。但一般不提倡用goto型循环。while和do-while循环,循环体中应包括使
30、循环趋于结束的语句。for语句功能最强。,6.8 几种循环的比较,用 while 和 do-while 循环时,循环变量初始化的操作应在while和do-while语句之前完成,而for语句可以在表达式1中实现循环变量的初始化。 while、do.while、for循环,可用break语句跳出循环,用continue结束本次循环。而对于goto语句和if语句构成的循环,不能用break和continue进行控制。,例6-12 输入m,判断m是否是素数,分析:除了1和它本身,不能被其它数整除m %2,%3,%4,%(m-1) 不是素数 :%2=0,%3=0. ( | ) 是素数:%2!=0 ,
31、%3!=0%(m-1)!=0 ( & ),例6-12 输入m,判断m是否是素数,n=sqrt(m); for(i=2;in) printf(“yesn“); else printf(“non“);,for(i=2;i(m-1) printf(“yesn“); else printf(“non“);,#include main( ) int i,m,n; scanf(“%d“, ,#include #include main( ) int i,m,n;for(m=101;mn) printf(“%6d”,m); ,例6-13 求出100-200间的素数,例6-14 求出fibonacci数列的前
32、20个数,1,1,2,3,5,8 x1 x2 tx1 x2 t,x1=x2=1 t=x1+x2 x1=x2 x2=t,x1=1;x2=1; printf(“n%8d%8d“,x1,x2); for(i=1;i=18;i+)t=x1+x2;printf(“%8d“,t);x1=x2;x2=t;,例6-15 求1-1/3+1/5-1/7.前n项和,#include main( ) int i,flag=1,n;float s=0,t=1,m=1;scanf(“%d“, ,算法:flag=1; i=1to n s=s+t; flag=-flag; m=m+2; t=flag/m ; i+;,本章结束,