1 / 39

C 语言程序设计 第六章 循环控制

C 语言程序设计 第六章 循环控制. 主要内容. 6.1 While 语句 6.2 do-While 语句 6.3 for 语句 6.4 循环的嵌套 6.5 break 和 continue 语句 6.6 程序举例. for(i=1; i<=100; i++) sum=sum+i;. 6.1 While 语句. 概述 循环结构、顺序结构、选择结构是结构化程序的三种基本结构,它们共同组成各种复杂程序。 为什么使用循环语句?便捷、效率高。比如:. sum=1+2+3…+100;. 6.1 While 语句. C 语言中循环语句的实现方式

vida
Download Presentation

C 语言程序设计 第六章 循环控制

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C语言程序设计第六章 循环控制

  2. 主要内容 6.1 While语句 6.2 do-While语句 6.3 for语句 6.4循环的嵌套 6.5break 和continue 语句 6.6 程序举例

  3. for(i=1; i<=100; i++) sum=sum+i; 6.1 While语句 • 概述 循环结构、顺序结构、选择结构是结构化程序的三种基本结构,它们共同组成各种复杂程序。 • 为什么使用循环语句?便捷、效率高。比如: sum=1+2+3…+100;

  4. 6.1 While语句 • C语言中循环语句的实现方式 • goto 和 if … goto(不要求) • while 语句 • do-while 语句 • for 语句

  5. 0 表达式 非0 语句 6.1 While语句 • while( “当型” 循环)语句 • 格式 • 执行过程 • 功能:先判断表达式,若为真则执行循环体,再判断表达式,重复上述过程,直到表达式为假时退出循环。 • while(表达式) • { • 循环体语句; • }

  6. i =1 N i≤ 100 Y sum=sum+i i=i+1 循环条件 循环体 6.1 While语句 • 例1: 用 while 语句构成循环,求 void main( ) { int i,sum=0; i=1; while(i<=100) { sum=sum+i; i++; } printf("%d",sum); }

  7. 6.1 While语句 例2: 用 while 语句构成循环,显示1~10的平方void main() { int i=1; while(i<=10) { printf("%d*%d=%d\n",i,i,i*i); i++; } } 运行结果:1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 10*10=100

  8. 此表达式的意义是什么? getchar()!='\n‘ 6.1 While语句 例3: 统计从键盘输入一行字符的个数。#include<stdio.h> void main( ) { int n=0; printf("input a string:\n"); while ( getchar()!='\n‘ ) n++; printf("%d",n); }

  9. 6.1 While语句 • 关于 while 循环语句的说明 • while 循环先判断表达式,后执行循环体; • 循环体有可能一次也不执行; • 循环体若包含多条语句,应该用{ }括起来; • 循环体应包含使循环趋向结束的语句; • 退出while循环的情况是: • 条件表达式不成立(为零) • 循环体内遇 break , goto • 无限循环(死循环)必须避免: while(1) 循环体 ;

  10. 6.1 While语句 • 习题6.4:求 ,(即求 1!+ 2!+ … + 20!)。 #include <stdio.h> void main() { int i,t,sum; t=1;i=1; sum=0; while(i<=20) { t=t*i; sum=sum+t; i++; } printf("sum=%d\n",sum);} 运行结果:s=268040729

  11. 6.1 While语句 • 习题6.10:猴子吃桃问题。猴子第一天摘下若干桃子,当即吃了一半多一个;第二天又吃了剩下的一半多一个,以后每天都吃了前一天剩下的一半多一个。到第10天就只剩下一个桃子了。求桃子的总数是多少。 • 分析: • 第10天桃子的总数sum10 = 1; • 第9天桃子总数sum9 = 2*(sum10 + 1); • 第8天绦子总数sum8 = 2*(sum9 + 1); • … • 第1天桃子总数sum1 = 2*(sum2 + 1).

  12. 6.1 While语句 #include<stdio.h> void main() { int sum,day; day=9; sum=1; while(day>=1) { sum=2*(sum+1); day--; } printf(“sum=%d\n”,sum); } 运行结果:sum=1534

  13. 循环体语句 非0 表达式 0 6.2 do-while语句 • do-while( “直到型”循环)语句 • 格式 • 执行过程 • 功能:先执行循环体,然后判断表达式。若为真则再次执行循环体,否则退出循环。 • do • { • 循环体语句; • } • while(表达式) ;

  14. i =1 sum=sum+i i=i+1 循环条件 Y i≤ 100 循环体 N 6.2 do-while语句 例 用 do-while 语句构成循环,求 main( ) { int i,sum=0; i=1; do { sum= sum+i; i++; } while(i<=100); printf("%d",sum); }

  15. 6.2 do-while语句 • 关于 do-while 循环语句的说明 • do-while 循环先执行循环体,后判断表达式; 循环体至少执行一次; • 同一个问题既可以用while 循环实现,也可以用do-while 循环,两者可以相互转换; • 当while后的表达式一开始就为假时,两种循环结果不同!

  16. 求解表达式1 假 表达式2 真 语句 求解表达式3 for语句的下一语句 6.3 for 语句 • for 语句 是 C 语言和任何其他计算机语言中最为灵活,使用最广泛的循环语句。 • 格式 • 执行过程 • for(表达式1;表达式2;表达式3) • { 循环体语句; }

  17. i=1 N i≤ 100 Y sum=sum+i i ++ 循环步长 for下面的语句 6.3 for 语句 • 例 用 for 语句构成循环,求 main( ) { int i,sum=0; for(i=1;i<=100;i++) sum=sum+i; printf("%d",sum); }

  18. 6.3 for 语句 • 关于 for 循环语句的说明 • for循环中表达式1,2,3均可以省略,但是分号不能省略。 • for( ; ; ) 相当于 while(1) ,即死循环 #include<stdio.h>void main(){ char c; for(;(c=getchar())!=‘\n’;) printf(“%c”,c); printf(“\n”);} 运行结果:a b c d e f g←┘ a b c d e f g

  19. 6.4 循环的嵌套 • 定义 一个循环体内包含另一个完整的循环结构,称为循环的嵌套。三种循环可以互相嵌套,层数不限。 while() { …… while() { …… } …... } do { …… do { …… } while(); …... }while( ); while() { …… do { …… }while(); ……. } for( ; ;) {…… do { ……}while(); …… while() { …… } …... }

  20. 6.4 循环的嵌套 • 循环可以互相嵌套,但不能相互交叉。 for for …… …... …... for for …… …... …... √ ×

  21. 6.4 循环的嵌套 • 下列循环各执行多少次? for (i=1; i<=10; i++){……}; for (i=1; i<=10; i=i+2){……}; for (i=1; i<=10; i=i+3){……}; for (i=1; i<=20; i++){ i=i*2……}; 10次 5次 4次 5次

  22. 6.4 循环的嵌套 • 例题:试打印乘法九九表。 #include<stdio.h> void main() { int i,j; printf("*"); for (i=1;i<10;i++) printf("%4d",i); printf("\n---------------------------------------\n"); for (i=1;i<10;i++) { printf("%d",i); for (j=1;j<=i;j++) printf("%4d",i*j); printf("\n"); } }

  23. 6.4 循环的嵌套 • 例题:大鸡每只3元,老鸡每只2元,小鸡两只1元,如何用百元购得百鸡,怎么组合? #include<stdio.h> void main() { int i,j,k; printf(“购买鸡的组合有:\n"); for(i=0;i<34;i++) for(j=0;j<=50;j++) for(k=0;k<=200;k++) if (3*i+2*j+0.5*k==100 && i+j+k==100) printf("%4d, %4d, %4d\n", i, j, k);}

  24. 无条件循环 if~goto 该循环不能用break 和continue 语句控制 只知道结束条件 而无法确定执行 次数的情况下。 while do-while 至少执行一次时 不知或已知执行次数都可以 或已知初值,终值和步长。 使用比较灵活 for 6.4 循环的嵌套 • 几种循环的比较 语 句 适用范围 说 明 ① 循环变量初始化在循环体之前 ② 循环体中应包含使循环结束的语句 ③ 可以用 break 和continue 语句控制

  25. for expr1 假(0) expr2 真(非0) do …… break; …... while 假(0) …… break; …... expr 真(非0) expr3 …… break; …… 真 while expr 假(0) 6.5break 和continue语句 • break 语句 • 功能:只能用在循环语句和switch语句中,终止并跳出循环体。 • 说明: • break只能终止并跳出最近一层的循环结构。 • break只能用于循环语句和switch语句之中。

  26. switch 表达式 case 常表 1 常表2 常表 n default 语句 break; 语句1 break; 语句2 break; 语句n break; … 6.5break 和continue语句

  27. r =1 N r ≤ 10 Y area=3.14*r*r Y area>100 N i ++ for循环下面的语句 6.5break 和continue语句 • 例 break举例:输出圆面积,面积大于100时停止 void main( ) { int r ; float area; for(r=1;r<=10;r++) { area=3.14*r*r ; if(area>100) break; printf("r=%d,area=%f",r,area); } } 使用break跳出整个循环

  28. 6.5break 和continue语句 • 例 break举例:小写字母转换成大写字母,直至输入非字母字符 #include <stdio.h> void main() { int i,j; char c; while(1) { c=getchar(); if (c>='a' && c<='z') putchar(c-'a'+'A'); else break; } }

  29. while for 假(0) expr do 表达式1 真(非0) 假(0) 表达式2 …… continue; …… …… continue; …... 真(非0) …… continue; …... 真(非0) while expr 表达式3 假(0) 6.5break 和continue语句 跳出循环体,但是expr3必须执行 • continue 语句 • 功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断。continue 语句仅用于循环语句中。

  30. 6.5break 和continue语句 • continue举例:把100~200之间的不能被3整除的数输出 #include <stdio.h> void main() { int i; for(i=100;i<=200;i++) { if(i%3==0) continue; printf(“%d ”,i); } }

  31. 6.5break 和continue语句 • break 和 continue 语句的区别 • continue 语句只结束本次循环,break语句则是结束整个循环。 • continue 语句只用于while,do-while,for循环语句中,break语句还可以用于switch语句中。

  32. t=1,pi=1,n=1.0,s=1 当|t|1e-6 n=n+2 s=-s t=s/n pi=pi+t pi=pi*4 输出pi 6.6 程序举例 • 例1:用π/4 = 1 - 1/3 + 1/5 – 1/7 + … 公式求π的近似值。 • 分析: 符号:1,-1,1,-1… 分母:1,3,5,7,... π= (1 – 1/3 + 1/5 -1/7 +…)*4

  33. 循环结束条件 累加项 符号 最终值 分母 6.6 程序举例 #include <math.h> #include<stdio.h> void main() { int s; float n,t,pi; t=1; pi=0; n=1; s=1; while((fabs(t))>=1e-6) { pi=pi+t; n=n+2; s= -s; t=s/n; } pi=pi*4; printf("pi=%10.6f\n",pi); } 运行结果:pi = 3.141594

  34. 6.6 程序举例 • 例2 求输入的十个整数中正数的和及其平均值 #include <stdio.h>void main(){ int i,num=0,a; float sum=0; for(i=0;i<10;i++) { scanf("%d",&a); if(a<=0) continue; num++; sum+=a; } printf("%d plus integer's sum :%6.0f\n",num,sum); printf("Mean value:%6.2f\n",sum/num);} 1 2 3 4 5 -1 -22 -23 -14 -5 5 plus integer’s sum : 15 Mean value: 3.00 Sum为什么设为float?

  35. 1 5 34 233 1597 10946 75025 514229 3524578 24157817 1 8 55 377 2584 17711 121393 832040 5702887 39088169 2 13 89 610 4181 28657 196418 1346269 9227465 63245986 3 21 144 987 6765 46368 317811 2178309 14930352 102334155 6.6 程序举例 • 例3 求Fibonacci数列:1,1,2,3,5,8,……的前40个数 • 分析: Fibonacci数列定义: F1 = 1 (n=1) F2 = 1 (n=2) Fn = Fn-1 + Fn-2 (n≥3)

  36. 6.6 程序举例 #include <stdio.h>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");f1=f1+f2; f2=f2+f1; }}

  37. ABCDEFGHIJKLMNOPQRSTUVWXYZ 6.6 程序举例 • 例4 译密码。例如 Hello,world! 译成密码:Lipps,asvph! • 算法: • 当输入字符不是“回车”时,执行密码转换。 • 仅转换A~Z、a~z。 • 转换规则:c=c+4,当c=Z~Z+4范围,或c>z时,c=c-26。

  38. 6.6 程序举例 #include <stdio.h>void main(){ char c; while((c=getchar())!='\n') { if ((c>='a'&&c<='z')||(c>='A'&&c<='Z')) { c=c+4; if(c>‘Z’&&c<=‘Z’+ 4 || c>‘z') c=c-26; } printf("%c",c); }} 运行结果:Hello,world!  Lipps,asvph!

  39. 本章小结 • do while语句至少执行一次循环体; • 注意for循环中各表达式的作用及执行次序。for(表达式1;表达式2;表达式3),表达式1初始执行,仅执行一次;接下来执行表达式2,以判断是否退出循环,如果执行了循环,接下来执行表达式3; • break和continue的区别,break是结束本层循环,continue是结束本次循环。

More Related