6循环控制结构

上传人:M****1 文档编号:586613860 上传时间:2024-09-05 格式:PPT 页数:94 大小:915.02KB
返回 下载 相关 举报
6循环控制结构_第1页
第1页 / 共94页
6循环控制结构_第2页
第2页 / 共94页
6循环控制结构_第3页
第3页 / 共94页
6循环控制结构_第4页
第4页 / 共94页
6循环控制结构_第5页
第5页 / 共94页
点击查看更多>>
资源描述

《6循环控制结构》由会员分享,可在线阅读,更多相关《6循环控制结构(94页珍藏版)》请在金锄头文库上搜索。

1、第6章 循环循环是计算机解题的一个重要特征。由于计算机运是计算机解题的一个重要特征。由于计算机运 算速度快,最适宜做算速度快,最适宜做重复性重复性的工作。当我们在进行程序的工作。当我们在进行程序 设计时,总是要把复杂的不易理解的求解过程转换为容设计时,总是要把复杂的不易理解的求解过程转换为容 易理解的操作的多次重复,从而降低了问题的复杂度,易理解的操作的多次重复,从而降低了问题的复杂度, 同时也减少程序书写及输入的工作量。同时也减少程序书写及输入的工作量。oosum=1+2+3+4+100oo输出如下输出如下:oo输出所有输出所有210000的素数的素数.*循环结构程序设计循环结构程序设计 循

2、环是在循环条件为真时计算机反复执行的一组指令(循环体)。 循环控制通常有两种方式:计数控制事先能够准确知道循环次数时用之 用专门的循环变量来计算循环的次数,循环变量的值在每次执行完循环体各语句后递增,达到预定循环次数时则终止循环,继续执行循环结构后的语句。标记控制事先不知道准确的循环次数时用之 由专门的标记变量控制循环是否继续进行。当标记变量的值达到指定的标记值时,循环终止,继续执行循环结构后的语句。实现循环结构的语句do/whiledo/while实现循环结构的语句实现循环结构的语句if/if/gotogotobreakbreakwhilewhilefor()for()continuecon

3、tinueC语言中可用以下语句构成循环:o if gotoo whileo do whileo for其中if goto是通过编程技巧(if语句和goto语句组合)构成循环功能。而且goto语句将影响程序流程的模块化,使程序可读性变差,所以结构化程序设计主张限制goto语句的使用。其他三种语句是C语言提供的循环结构专用语句。6.1 if /6.1 if /gotogoto 语句语句语句语句语句功能:语句格式: 语句标号:语句标号:语句;语句; if (if (表达式表达式) ) gotogoto 语句标号;语句标号; 当(表达式)的值为非零时则当(表达式)的值为非零时则重复重复执行执行“ “语

4、句标号语句标号” ”后面的语句。后面的语句。 标识程序中某标识程序中某 个语句的个语句的位置位置 EXAMPLE6-1:EXAMPLE6-1:EXAMPLE6-1:EXAMPLE6-1: 请用请用请用CCC语言实现右侧程序语言实现右侧程序语言实现右侧程序流程图所描述的算法流程图所描述的算法流程图所描述的算法: 即:即:即:sum=1+2+3+4+100sum=1+2+3+4+100sum=1+2+3+4+100 设:设:i i 计数器:计数器:i=i+1i=i+1 sumsum 为累加器:为累加器:sum=sum=sum+isum+iBeginBeginsum=0 i=1sum=0 i=1su

5、m=sum=sum+isum+i输出输出sumsumEndEndi= i+1i= i+1Fi=100i=100TBeginBeginsum=0 i=1sum=0 i=1sum=sum=sum+isum+i输出输出sumsumEndEndi= i+1i= i+1Fi=100i=100T main( )main( ) intint sum=0, i=1; sum=0, i=1;sum=sum=sum+isum+i; ;sum+=i;sum+=i;i=i+1;i=i+1;if if (i=100) (i00T输入输入 x xn+n+i100i100F111、设计算法XX0) if (x0) prin

6、tf(“%d,%dn”,p,nprintf(“%d,%dn”,p,n); );gotogoto bb; bb; bb:bb:p+;p+;p=n=i=0;p=n=i=0;else else If (x0) n+;If (x0) n+;if (i100) if (i100) 5.2 while 5.2 while 语句语句语句语句语句功能:语句格式: whilewhile(表达式)(表达式) statements; statements; 当表达式的值为当表达式的值为非零时非零时,重复重复statementsstatements。 关系关系、逻辑逻辑 赋值赋值表达式表达式 body of loop

7、body of loopo请用while实现 sum=1+2+3+4+100 sum=1+2+3+4+100 main( )main( ) intint sum=0, i=1; sum=0, i=1;sum+=i;sum+=i;While (i=100) While (i=100) printf(“%dnprintf(“%dn”, sum);”, sum); i+;i+; while while while while ( (表达式表达式表达式表达式) ) BeginBeginsum=0 i=1sum=0 i=1sum=sum=sum+isum+i输出输出sumsumEndEndi= i+1i

8、= i+1Fi=100i=100T main() main() intint n=0; n=0; whilewhile ( (n3n3) ) printf(“%dprintf(“%d,”, n ); ,”, n ); n+; n+; printf(“%dnprintf(“%dn”, n); ”, n); 0, 0, main( )main( ) intint n=3; n=3; whilewhile ( (n n) ) printf(“%dprintf(“%d,”, ,”, n-n-); ); n=-3; n=-3; printf(“nprintf(“n”);”); while ( while

9、 (n n) ) printf(“%dprintf(“%d,”, ,”, n+n+); ); 1, 1,2, 2, 3 33, 3, 2, 2, 1, 1,- -3, 3,- -2, 2,-1,-1,EXAMPLE6-2:EXAMPLE6-2:EXAMPLE6-2:EXAMPLE6-2:n n0 0 1 1 2 2 3 3 2 2 1 1 0 0-3-3-2-2-1-10 0 main( )main( ) intint a=1,b=2,c=2,t=0; a=1,b=2,c=2,t=0; while ( while (abab) ) t=a; a=b; t=a; a=b; b=t; c+; b=

10、t; c+; printfprintf( “%( “%d,%d,%d”,a,b,cd,%d,%d”,a,b,c ) ; ) ; EXERCISES6-2:EXERCISES6-2:EXERCISES6-2:EXERCISES6-2:a a0 02 22 21 1b bc ct t1 12 21 13 3 main()main() intint x=0, s=0; x=0, s=0; whilewhile( (!x!x!=0!=0) ) s+=+x; s+=+x; printf(“%dprintf(“%d n”, s); n”, s); EXERCISES6-3:EXERCISES6-3:EXE

11、RCISES6-3:EXERCISES6-3:1 1x x0 0s=s=s+(+xs+(+x); );s s0 01 11 1 !x!x 从键盘输入从键盘输入100100条整型数据条整型数据, ,请找出请找出其中最大的数,并指出这个最大的数是其中最大的数,并指出这个最大的数是从键盘第几次输入的。从键盘第几次输入的。 要求要求:1:1、用、用N-SN-S图图设计设计算法;算法; 2 2、用、用C C语言语言实现实现算法。算法。HOMEWORK6-1:HOMEWORK6-1:HOMEWORK6-1:HOMEWORK6-1: 请分别统计在输入的字符串中请分别统计在输入的字符串中 字母、数字和其它字符

12、的个数。字母、数字和其它字符的个数。 要求要求:1:1、用、用N-SN-SN-SN-S图图图图设计算法;设计算法; 2 2、用、用C C C C语言语言语言语言实现算法。实现算法。HOMEWORK6-2:HOMEWORK6-2:HOMEWORK6-2:HOMEWORK6-2:book12pen5%*#( ) &book12pen5%*#( ) &字母字母: : 7 7数字数字: : 3 3字符字符: : 8 8语句功能:6.3 do-while 6.3 do-while 语句语句语句语句语句格式: dodo statements;statements; whilewhile( (表达式表达式)

13、 );当表达式的值为当表达式的值为非零时非零时,重复重复statementsstatements 。 body of loopbody of loop1+2+3+4+5+ +100 1+2+3+4+5+ +100 main()main() intint i, sum; i, sum; do do printf(“%dnprintf(“%dn”, sum); ”, sum); sum=0; i=1; sum=0; i=1; i+; i+; whilewhile( ( ); ); sum+=i; sum+=i; whilewhile( (i i=100=100); ); EXAMPLE6-3:EX

14、AMPLE6-3:EXAMPLE6-3:EXAMPLE6-3: main( ) main( ) intint x; x; x=-1; x=-1; dodo x=x*x; x=x*x; whilewhile( ( !x!x ); ); EXERCISES6-4:EXERCISES6-4:EXERCISES6-4:EXERCISES6-4:A) A) 是死循环是死循环 B) B) 循环执行三次循环执行三次C) C) 循环执行一次循环执行一次D) D) 有语法错误有语法错误 x=0; x=0; main()main() intint x=3; x=3; dodo printf(“%d,”,xprin

15、tf(“%d,”,x-=2);-=2); while while( ( !(-x)!(-x) ); ); EXERCISES6-5:EXERCISES6-5:EXERCISES6-5:EXERCISES6-5: A) A) 1 1 1 1 B)B) 1,-21,-21,-21,-2 C)C) 3,0 3,0 D)D) 0 0x x3 3 1 1 0 0 -2-2 -3-3x=x-2;x=x-2; main()main() intint s; s; s=7; s=7; do do s s=2; =2; while while( (s s0 0); ); printf(“sprintf(“s=%=

16、%dn”,sdn”,s); ); EXERCISES6-6:EXERCISES6-6:EXERCISES6-6:EXERCISES6-6:s=5s=5请写出请写出右侧程右侧程序的运序的运行结果行结果 main()main() intint x,yx,y; ; x=y=0; x=y=0; whilewhile( (x x200)&(y5)0)&(y5); ); printf(“yprintf(“y=%d x=%=%d x=%dn”,ydn”,y, x);, x); 请程序的运行结果及循环次数请程序的运行结果及循环次数HOMEWORK6-4:HOMEWORK6-4:HOMEWORK6-4:HOME

17、WORK6-4:while语句和用语句和用do-while语句的比较语句的比较: 在一般情况下,用while语句和用do-while语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。 但是如果while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。例 while和do-while循环的比较 (1) #include (2) #include void main ( ) void main( ) int sum=0,i; int sum=0,i; scanf(“%d,&i); scanf(”%d,&i); while (i=10) do sum=sum+i; sum

18、=sum+i; i+; i+; while (i=10); printf(“sum=%dn”,sum); printf(“sum=%dn”,sum); 运行结果:1 sum=55 再运行一次: 11sum=0运行结果:1 sum=55 再运行一次: 11sum=11说明:说明:说明:说明:(1)当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同。否则,二者结果不相同。语句功能:6.4 for 6.4 for 语句语句语句语句语句格式: forfor( (表达式表达式表达式表达式1 1 1 1; ;表达式表达式表达式表达式2 2 2 2; ;表达式表达式表达式表达式3 3 3

19、 3) ) statements;statements; 当表达式当表达式2 2的值为的值为非零时非零时,重复执行重复执行statementsstatements 。 forfor( (表达式表达式表达式表达式1 1 1 1; ;表达式表达式表达式表达式2 2 2 2; ;表达式表达式表达式表达式3 3 3 3) ) statements;statements; 表达式表达式1 1 循环循环初始初始表达式,用于进入循环体前为循环变量赋初值表达式,用于进入循环体前为循环变量赋初值 由由算术算术、赋值赋值、逻辑逻辑和和逗号逗号表达式构成。表达式构成。 表达式表达式2 2 循环循环控制控制表达式,用

20、于控制循环体语句的执行次数由表达式,用于控制循环体语句的执行次数由关关 系系表达式或表达式或逻辑逻辑表达式构成表达式构成。表达式表达式3 3 修改循环变量修改循环变量表达式,即每循环一次使得表达式表达式,即每循环一次使得表达式1 1的值的值 就要变化一次。由就要变化一次。由算术算术、赋值赋值、逻辑逻辑和和逗号逗号表达式构成表达式构成。 main()main() intint n; n; for(for(n n=1=1; ; n=10n=10; ; n+n+) ) printf(“%dprintf(“%d,” ,n);,” ,n); 1 1, 2, 2 , 3, 3 , 4, 5 ,6 ,7,

21、8 , 9 , 10, 4, 5 ,6 ,7, 8 , 9 , 10 forfor( (表达式表达式1 1; ;表达式表达式2 2; ;表达式表达式3 3) ) statements;statements; EXAMPLE6-4:EXAMPLE6-4:EXAMPLE6-4:EXAMPLE6-4: main()main() intint n, i=100; n, i=100; for(nfor(n=1; n=5; n+)=1; n; n0 0; ; n-n-) ) printf(“%dprintf(“%d,”, i);,”, i); EXAMPLE6-5:EXAMPLE6-5:EXAMPLE6-

22、5:EXAMPLE6-5: main()main() intint x, y; x, y; for(for(x x=0,y=0=0,y=0; ; x+yx+y=50=50; ; x+,yx+,y+) ) printf(“%3d ”, printf(“%3d ”, x+yx+y ); ); if if ( (x%5=0x%5=0) ) printf(“nprintf(“n”);”); EXERCISES6-8:EXERCISES6-8:EXERCISES6-8:EXERCISES6-8:写出右侧写出右侧程序段的程序段的 运行结果运行结果 main( )main( ) intint sum, i

23、; sum, i ; for(sumfor(sum=0,i=1; i=100; i+) =0,i=1; i=100; i+) sum+=i; sum+=i; printf(“sumprintf(“sum=%=%dndn”, sum );”, sum ); main( )main( ) intint sum=0, i =1; sum=0, i =1; do do sum+=i; i+; sum+=i; i+; while( i=100 ); while( i=100 ); printf(“sumprintf(“sum=%=%dndn”, sum );”, sum ); main( )main(

24、) intint sum=0, i =1; sum=0, i =1; while( while( i=100i=100 ) ) sum+=i; i+; sum+=i; i+; printf(“sumprintf(“sum=%=%dndn”, sum );”, sum ); main( )main( ) intint sum=0, i =1; sum=0, i =1; labellabel: if( i=100): if( i=100) sum+=i; i+; sum+=i; i+; gotogoto labellabel; ; printf(“sumprintf(“sum=%=%dndn”,

25、sum );”, sum ); 1+2+3+4+5+ +100 1+2+3+4+5+ +100 说明:说明:(1)for语句的一般形式中的“表达式1”可以省略,此时应在 for语句之前给循环变量赋初值。注意省略表达式1时,其后的分号不能省略。如: for(;i=100;i+) sum=sum+i; 执行时,跳过“求解表达式1”这一步,其他不变。(2)如果表达式2省略,即不判断循环条件,循环无终止地 进行下去。也就是认为表达式2始终为真。 例如:for(i=1;i+) sum=sum+i; 它相当于: i=1; while(1) sum=sum+1;i+;图图图图5.75.75.75.7求解表达

26、式1语句求解表达式3(3) 表达式3也可以省略,但此时程序设计者应另外设法保证 循环能正常结束。如: for ( i=1;i=100;) sum= sum + i; i+; 在上面的for语句中只有表达式1和表达式2,而没有表达式3。i+的操作不放在for语句的表达式3的位置处,而作为循环体的一部分,效果是一样的,都能使循环正常结束。 (4) 可以省略表达式1和表达式3,只有表达式2,即只给循环条件 如: for(;i=100;) while(i=100) sum=sum+i; sum=sum+i; i+; 相当于 i+; 在这种情况下,完全等同于while语句。 可见for语句比while语

27、句功能强,除了可以给出循环条件外,还可以赋初值,使循环变量自动增值等。(5) 3个表达式都可省略,如: for(;) 语句 相当于 while(1) 语句 即不设初值,不判断条件(认为表达式2为真值),循环变量不增值。无终止地执行循环体。 (6) 表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。如: for (sum=0;i=100;i+) sum=sum+i; 表达式3也可以是与循环控制无关的任意表达式。 表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。 如: for (sum=0,i=1;i=100;

28、i+) sum=sum+i; 或 for (i=0,j=100;i=j;i+,j-) k=i+j; 表达式1和表达式3都是逗号表达式,即同时设两个初值,使两个变量增值。 图图图图5.85.85.85.8i=0 j=100ijk=i+ji=i+1j=j-1真假 在逗号表达式内按自左至右顺序求解,整个逗号表达式的值为其中最右边的表达式的值。如: for (i=1;i=100;i+,i+) sum=sum+i;相当于 for (i=1;i=100;i=i+2) sum=sum+i; (7) 表达式2一般是 关系表达式(如i=100) 或逻辑表达式 (如ab & x=1e-6; i+) e=e+x;

29、f=f*i; x=1.0/f; printf(“e=%f”, e);例5.10 猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃前一天剩下的一半零一个。到第十天想再吃时,就只剩一个桃子了,求第一天共摘多少桃子。 采用逆算法,若某一天剩余的桃子是x,则前一天的桃子数应是2(x+1)void main() int x=1, i; for(i=9; i=1; i-) x=2*(x+1); printf(“%d”, x);程 序 举 例 例1 求Fibonacci数列前40个数。这个数列有如下特点:第1、2两个数为1、1。从

30、第3个数开始,该数是其前面两个数之和。即: F(1)=1 (n=1) F(2)=1 (n=2) F(n)=F(n-1)+F(n-2) (n3) 算法如图所示: 图图图图6-136-136-136-13f1=1,f2=1for i=1 to 20输出f1、f2f1=f1+f2f2=f2+f1例例1 求求Fibonacci数列前数列前40个数。个数。 #include void 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”);

31、 f1=f1+f2; f2=f2+f1; 运行结果:运行结果: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 57022887 9227465 14930352 24157817 39088169 63245986 102334155 请输出请输出2626个小写的英文字母以及个小写的英文字母以及 每个字母所对应的每个字母所对应的AS

32、CIIASCII码值。码值。HOMEWORK6-5:HOMEWORK6-5:HOMEWORK6-5:HOMEWORK6-5: 设某学校新生入学时,需报选体育课选修设某学校新生入学时,需报选体育课选修设某学校新生入学时,需报选体育课选修设某学校新生入学时,需报选体育课选修 科目。其科目包括有:科目。其科目包括有:科目。其科目包括有:科目。其科目包括有:篮球篮球篮球篮球、排球排球排球排球、体操体操体操体操、乒乒乒乒 乓球乓球乓球乓球、网球网球网球网球。请为某班级(。请为某班级(。请为某班级(。请为某班级(30303030人)统计报选各人)统计报选各人)统计报选各人)统计报选各 科目的人数。科目的人

33、数。科目的人数。科目的人数。请设计报选体育科目统计程序请设计报选体育科目统计程序HOMEWORK6-6:HOMEWORK6-6:HOMEWORK6-6:HOMEWORK6-6:6.5 6.5 嵌套循环嵌套循环嵌套循环嵌套循环 嵌套循环是嵌套循环是嵌套循环是嵌套循环是循环中的循环循环中的循环循环中的循环循环中的循环。嵌套。嵌套。嵌套。嵌套 循环的深度可达两层、三层、四层,循环的深度可达两层、三层、四层,循环的深度可达两层、三层、四层,循环的深度可达两层、三层、四层, 甚至更多。实际层数可根据应用程序甚至更多。实际层数可根据应用程序甚至更多。实际层数可根据应用程序甚至更多。实际层数可根据应用程序

34、的需要而定,但超过三层的嵌套循环的需要而定,但超过三层的嵌套循环的需要而定,但超过三层的嵌套循环的需要而定,但超过三层的嵌套循环 不为多见。不为多见。不为多见。不为多见。 for(ifor(i=1; i=9; i+) =1; i=9; i+) for(jfor(j=1; j=9; j+)=1; j=9; j+) 内内层层循循环环 外外层层循循环环下面几种都是合法的形式:下面几种都是合法的形式: (1) while( ) (2) do (3) for(;) while( ) do for(;) while( ); while( ); (4) while( ) (5) for(;) (6) do

35、do while( ) for(;) while( ); while( ) ; 请设计求解下列问题的请设计求解下列问题的请设计求解下列问题的请设计求解下列问题的C C语言程序:语言程序:语言程序:语言程序: s=1!+2!+3!+ +20!s=1!+2!+3!+ +20!1!= 11!= 12!= 1*22!= 1*23!= 1*2*33!= 1*2*34!= 1*2*3*44!= 1*2*3*4 5!= 1*2*3*4*55!= 1*2*3*4*5 20!= 1*2*3*4*5 *20 20!= 1*2*3*4*5 *20 i i 1- 1- 1 11- 1- i i 1-201-20EXA

36、MPLE6-6:EXAMPLE6-6:EXAMPLE6-6:EXAMPLE6-6:1- 1- 2 21- 1- 3 31- 1- 4 41- 1- 5 5 1- 1- 2020j j t=t*jt=t*j s=1!+2!+3!+ +20!s=1!+2!+3!+ +20! s=0, t s=0, t i i (120)(120) t=1t=1j (1j (1i i) ) 输出输出 s st*=jt*=js+=ts+=t main()main() intint i, j, t; long s=0; i, j, t; long s=0; for ( ) for ( ) i=1; i=1; i=20;

37、 i=20; i+ i+ for ( ) for ( ) j=1; j=1; j=i; j=i; j+ j+ t=t*j; t=t*j; s+=t; s+=t; printf(“%lnprintf(“%ln”, s); ”, s); s=1!+2!+3!+ +20!s=1!+2!+3!+ +20! i (1-20) i (1-20) j (1-i) j (1-i)t=1; t=1; 请设计按下列格式打印九九表程序。请设计按下列格式打印九九表程序。 1*1=1 1*2=2 1*3=3 1*9= 9 1*1=1 1*2=2 1*3=3 1*9= 9 2*1=2 2*2=4 2*3=6 2*9=18

38、 2*1=2 2*2=4 2*3=6 2*9=18 9*1=9 9*2=18 9*3=27 9*9=81 9*1=9 9*2=18 9*3=27 9*9=81 EXAMPLE6-7:EXAMPLE6-7:EXAMPLE6-7:EXAMPLE6-7:a ab bp=a*bp=a*b a,b,pa,b,p a a (19)(19)b (1b (19 9) )输出输出 a*b=pa*b=p 1*1=1 1*2=2 1*3=3 1*9= 9 1*1=1 1*2=2 1*3=3 1*9= 9 2*1=1 2*2=4 2*3=6 2*9=18 2*1=1 2*2=4 2*3=6 2*9=18 main()

39、main() intint a, b, p; a, b, p; p=a*bp=a*b for ( ) for ( ) a=1; a=1; a=9; a=9; a+ a+ for ( ) for ( ) b=1; b=1; b=9; b=9; b+ b+ printfprintf( ); ( ); p=a*b; p=a*b; “%d “%d a,b,pa,b,p * * %d %d = =%d %d ”, ”, printf(“nprintf(“n”); ”); 1*1=1 1*2=2 1*3=3 1*9= 9 1*1=1 1*2=2 1*3=3 1*9= 9 2*1=1 2*2=4 2*3=6

40、 2*9=18 2*1=1 2*2=4 2*3=6 2*9=18 当当当当外外外外层层层层 循循循循环环环环变变变变量量量量中中中中 的的的的值值值值变变变变换换换换一一一一 次次次次时时时时,内内内内层层层层 循循循循环环环环变变变变量量量量中中中中 的的的的值值值值将将将将变变变变换换换换 若若若若干干干干次次次次。 若若 i , j i , j 已定义为已定义为 intint 类型,则以下程序段中类型,则以下程序段中 内内循环体总的执行次数是:循环体总的执行次数是: for( i=5; i; i -)for( i=5; i; i -) for(jfor(j=0; j4; j+) =0;

41、j4; j+) A) 20 B) 24 C) 25 D) 30 A) 20 B) 24 C) 25 D) 30EXERCISES6-9:EXERCISES6-9:EXERCISES6-9:EXERCISES6-9: 请打印下列图形:请打印下列图形:请打印下列图形:请打印下列图形:ABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFTEST6-4:TEST6-4:TEST6-4:TEST6-4: # define# define ROWSROWS 6 6 # define# define CHARSCHA

42、RS 6 6 main()main() intint row; char row; char chch; ; for(rowfor(row=0;=0; rowrowROWSROWS; row+); row+) for(chfor(ch=A; =A; chch=F F; ; chch+)+) printf(“%cprintf(“%c”, ”, chch); ); printf(“nprintf(“n”);”); ABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEF 请打印下列图形:请打印下列图形:请打印下

43、列图形:请打印下列图形: ABCDEFABCDEF BCDEF BCDEF CDEF CDEF DEF DEF EF EF F F HOMEWORK6-7*:HOMEWORK6-7*:HOMEWORK6-7*:HOMEWORK6-7*: # define ROWS 6# define ROWS 6 # define CHARS 6 # define CHARS 6main()main() intint row; char row; char chch; ; for (row=0; rowROWS; row+) for (row=0; rowROWS; row+) for ( for (chch

44、=(A+ROW); =(A+ROW); chch=F F; ; chch+)+) printf(“%cprintf(“%c”, ”, chch); ); printf(“nprintf(“n”);”); ABCDEFABCDEFBCDEF BCDEF CDEF CDEF DEF DEF EF EF F F 前面我们介绍了四种能够实现循环的语句,它前面我们介绍了四种能够实现循环的语句,它们退出循环的方式通常都是以某个表达式的结果作们退出循环的方式通常都是以某个表达式的结果作为判断条件,当其值为为判断条件,当其值为零零时时结束循环结束循环。除了这种正。除了这种正常结束循环的方式外,还可以利用常结束

45、循环的方式外,还可以利用C C 语言提供的专语言提供的专门退出循环的语句。门退出循环的语句。6.6 break 6.6 break 与与与与 continue continue 语句语句语句语句 6.6 break语句和continue语句 6.6.1 break 语句语句 break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。 一般形式: break;注意: break语句不能用于循环语句和switch语句之外的任何其他语句中。 例例: float pi=3.14159; for(r=1;r100) break; printf(“r=%f,area=%fn”,r

46、,area); 程序的作用是计算程序的作用是计算r=1到到r=10时的圆面积,直到面积时的圆面积,直到面积area大大于于100为止。为止。从上面的从上面的for循环可以看到:当循环可以看到:当area100时,执行时,执行break语语句,提前结束循环,即不再继续执行其余的几次循环句,提前结束循环,即不再继续执行其余的几次循环。break break 主要是用于主要是用于 选择选择 结构和结构和 循环循环 结构中。结构中。 break break 语句语句语句语句 main()main() intint i, s=0; i, s=0; for(ifor(i=0; i100; i+)=0; i

47、100; i+) scanf(“%dnscanf(“%dn”, &x);”, &x); if(xif(x=0) =0) breakbreak; ; s+=x; s+=x; printf(“sprintf(“s=%=%dn”,sdn”,s); ); EXERCISES6-10:EXERCISES6-10:EXERCISES6-10:EXERCISES6-10: main()main() intint i, m=0,n=0,k=0; i, m=0,n=0,k=0; for(ifor(i=9; i=11; i+)=9; i=11; i+) switch(i/10) switch(i/10) case

48、 0: case 0: m+;n+;m+;n+;breabreak k; ; case 10: n+; case 10: n+; breakbreak; ; default: k+; n+; default: k+; n+; printf(“%d,%d,%dnprintf(“%d,%d,%dn”, ”, m,n,km,n,k); ); mm0 0n n0 01 11 1k k0 02 21 1 2 23 3continuecontinue 该语句是专用于循环结构中改变某一次该语句是专用于循环结构中改变某一次 循环流程的语句。其作用是:使程序流程提循环流程的语句。其作用是:使程序流程提 前前结束

49、本次循环结束本次循环从而开始下一次循环。从而开始下一次循环。 continue continue 语句语句语句语句 main()main() intint k=4, n=0; k=4, n=0; for(; nk; ) for(; nk; ) n+; n+; if(n%3!=0) continue; if(n%3!=0) continue; k-; k-; printfprintf(“ %(“ %d,%dd,%d n”, n”, k,nk,n); ); A) 1,1 B) 2,2 C) 3,3 D) 4,4A) 1,1 B) 2,2 C) 3,3 D) 4,4EXAMPLE6-8:EXAMPL

50、E6-8:EXAMPLE6-8:EXAMPLE6-8: main()main() intint i; i; for(ifor(i=1; i5; i+)=1; i5; i+) if if(i%2) (i%2) printfprintf(“(“* *”);”); else else continue; continue; printfprintf(“(“# #”);”); printfprintf(“(“$ $ n”);n”); *#*# $*#*# $EXERCISES6-11:EXERCISES6-11:EXERCISES6-11:EXERCISES6-11: main()main() int

51、int i, j, x=0; i, j, x=0; for(ifor(i=0; i2; i+)=0; i2; i+) x+; x+; for(jfor(j=0; j=3; j+)=0; j100) break; if (i 100) break; C) k=32764; D) S=32764; C) k=32764; D) S=32764; do while(S+%2)|(S%2) do while(S+%2)|(S%2) k+; k+; S+; k+; k+; S+; while(kwhile(k0);0);EXERCISES6-13:EXERCISES6-13:EXERCISES6-13:

52、EXERCISES6-13: C) k=32764; C) k=32764; do do k+; k+; printf(“kprintf(“k=%=%dn”,kdn”,k); ); k+; k+; printf(“kprintf(“k=%=%dn”,kdn”,k); ); while(kwhile(k0);0);intint -3276832767 -3276832767 2 215 15 2 214 14 2 213 13 2 212 12 2 211 11 2 210 10 2 29 9 2 28 8 2 27 7 2 26 6 2 25 5 2 24 4 2 23 3 2 22 2 2

53、21 1 2 20 0 1 1 1 1 个字节个字节1 1 1 1 个字节个字节 C) k=32764; C) k=32764; do do k+; k+; printf(“kprintf(“k=%=%dn”,kdn”,k); ); k+; k+; printf(“kprintf(“k=%=%dn”,kdn”,k); ); while(kwhile(k0);0);0 01 11 11 11 11 11 11 11 11 11 11 11 11 10 01 1k+, 32765k+, 32765k+, 32766k+, 327660 01 11 11 11 11 11 11 11 11 11 1

54、1 11 11 11 10 00 01 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1k+, 32767k+, 32767k+, -32768k+, -327681 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0intint -3276832767 -3276832767 -32767 -327671 10 00 00 00 00 00 00 00 00 00 00 00 00 00 01 1continue语句和break语句的区别: continue语句只结束本次循环,而不是终止整个循环的执行。而brea

55、k语句则是结束整个循环过程,不再判断执行循环的条件是否成立。 while (表达式1) if(表达式2) continue; 图图图图6-116-116-116-11表达式1表达式2while循环的下一语句假真真假continue while(表达式1) if(表达式2) break; 图图图图6-106-106-106-10break假表达式1表达式2while循环的下一语句假真真 main()main() intint k=0; char c=A; k=0; char c=A; do do switch(switch(c c+) ) case A: k+; case A: k+; brea

56、kbreak ; ; case B: k- -; case B: k- -; case C: k+=2; case C: k+=2; breakbreak ; ; case D: k=k%2; case D: k=k%2; continuecontinue ; ; case E: k=k*10; case E: k=k*10; breakbreak ; ; default : k=k/3; default : k=k/3; k+;k+; while(while(c cGG); ); printf(“kprintf(“k=%d n”, k);=%d n”, k); TEST6-1:TEST6-1

57、:TEST6-1:TEST6-1:例例2 把把100200之间的能被之间的能被3整除的数输出。整除的数输出。 #include void main() int n; for (n=100;n=200;n+) if (n%3!=0) continue; printf(“%d”,n); 说明:说明:说明:说明:当n不能被3整除时,执行continue语句,结束本次循环(即跳过printf函数语句),只有n能被3整除时才执行printf函数。算法思想算法思想: 让m被2到 除,如果m能被2 之中任何一个整数整除,则提前结束循环,此时i必然小于或等于k(即 );如果m不能被2k(即 )之间的任一整数整

58、除,则在完成最后一次循环后,i还要加1,因此i=k+1,然后才终止循环。 在循环之后判别i的值是否大于或等于k+1,若是,则表明未曾被2k之间任一整数整除过,因此输出“是素数”。 图图图图6-146-146-146-14读入mk=i=2当ikm被i整除真假用break结束循环i=i+1ik+1真假输出:m“是素数”输出:m“不是素数”例例3 判断m是否素数。例例3 判断判断m是否素数。是否素数。 #include #include void main() int m,i,k; scanf(“%d”,&m); k=sqrt(m); for (i=2;ik) printf (“%d is a pr

59、ime numbern”,m); else printf (“%d is not a prime numbern”,m); 运行结果:运行结果: 17 17 is a prime number 例例4 求求100200间的全部素数。间的全部素数。#include #include void main() int m,k,i,n=0; for (m=101;m=200;m=m+2) k= sqrt(m); for (i=2;i=k+1) printf(“%d”,m);n=n+1; if (n%10=0) printf(“n”); printf (“n”);运行结果:运行结果: 101 103 1

60、07 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 HOMEWORK6-8:HOMEWORK6-8:HOMEWORK6-8:HOMEWORK6-8: 输出任意两个数之间的基数输出任意两个数之间的基数输出任意两个数之间的基数输出任意两个数之间的基数 如如如如: : 输入为输入为输入为输入为 1, 25 1, 25 两个数,则对应输出应是两个数,则对应输出应是两个数,则对应输出应是两个数,则对应输出应是 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25 1,

61、3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25 请输入若干名学生某科的考试成绩请输入若干名学生某科的考试成绩请输入若干名学生某科的考试成绩请输入若干名学生某科的考试成绩 然后统计出各分数段考试成绩的人数。然后统计出各分数段考试成绩的人数。然后统计出各分数段考试成绩的人数。然后统计出各分数段考试成绩的人数。 如如: : 小于小于60 60 60 6069 69 70 7079 79 80 8089 89 90 90100 100 HOMEWORK6-9*:HOMEWORK6-9*:HOMEWORK6-9*:HOMEWORK6-9*: 请使用嵌套循环打印下列图

62、形:请使用嵌套循环打印下列图形:请使用嵌套循环打印下列图形:请使用嵌套循环打印下列图形: F F F E F E F E D F E D F E D C F E D C F E D C B F E D C B F E D C B A F E D C B A HOMEWORK6-10:HOMEWORK6-10:HOMEWORK6-10:HOMEWORK6-10: F F F E F E F E D F E D F E D C F E D C F E D C B F E D C B F E D C B A F E D C B A main()main() char char chch; ; int

63、int i,ji,j; ; for(ifor(i=0;i=6;i+)=0;i=6;i+) for(chfor(ch=F F,j,j=0;j=0;j=0; i-) for( i=4; i =0; i-) for j=1; j=i; j+) for j=1; j=i; j+) putcharputchar(#);(#); for(jfor(j=1; j=4-i; j+) =1; j=4-i; j+) putcharputchar(*);(*); putchar(nputchar(n);); # # # # *# # # # * # # # * * # # # * * # # * * * # # *

64、 * * # * * * * # * * * *HOMEWORK6-11:HOMEWORK6-11:HOMEWORK6-11:HOMEWORK6-11: 请编写打印下列图形的程序请编写打印下列图形的程序请编写打印下列图形的程序请编写打印下列图形的程序 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * HOMEWORK6-12*:HOMEWORK6-12*:HOMEWORK6-12*:HOMEWORK6-12*: * * * * * * * * *

65、 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * main()main() intint n1,n2,n3; n1,n2,n3; for(nfor(n=1;n1=5;n1+)=1;n1=5;n1+) for(n2=1;n2=20-n1;

66、n2+)for(n2=1;n2=20-n1;n2+) printfprintf(“ ”);(“ ”); for(n3=1;n3=2*n1-1;n3+)for(n3=1;n3=2*n1-1;n3+) printfprintf(“*”);(“*”); printf(“nprintf(“n”);”); for(n1=4; n1=1; n1-)for(n1=4; n1=1; n1-) for(n2=1;n2=20-n1;n2+)for(n2=1;n2=20-n1;n2+) printfprintf(“ ”);(“ ”); for(n3=1;n3=2*n1-1;n3+)for(n3=1;n3=2*n1-

67、1;n3+) printfprintf(“*”);(“*”); printf(“nprintf(“n”);”); 请编写按下列格式打印九九乘法表的程序请编写按下列格式打印九九乘法表的程序请编写按下列格式打印九九乘法表的程序请编写按下列格式打印九九乘法表的程序 1 1 2 3 4 5 6 7 8 92 3 4 5 6 7 8 9 2 2 4 6 8 10 12 14 16 18 4 6 8 10 12 14 16 18 3 3 6 9 12 15 18 21 24 27 6 9 12 15 18 21 24 27 4 4 8 12 16 20 24 28 32 36 8 12 16 20 24

68、28 32 36 5 5 10 15 20 25 30 35 40 45 10 15 20 25 30 35 40 45 6 6 12 18 24 30 36 42 48 54 12 18 24 30 36 42 48 54 7 7 14 21 28 35 42 49 56 63 14 21 28 35 42 49 56 63 8 8 16 24 32 40 48 56 64 72 16 24 32 40 48 56 64 72 9 9 18 27 36 45 54 63 72 81 18 27 36 45 54 63 72 81HOMEWORK6-13:HOMEWORK6-13:HOMEWORK6-13:HOMEWORK6-13: 语句标号:语句标号:语句;语句; if (if (表达式表达式) ) gotogoto 语句标号;语句标号; SummarySummary while while (表达式)(表达式) statements;statements; dodo statementsstatements; while while(表达式)(表达式) forfor( (表达式表达式1 1; ;表达式表达式2 2; ;表达式表达式3 3) ) statements;statements;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号