1 / 30

甘肃工业职业技术学院信息工程系

C 语言程序设计. 刘亚奇. 甘肃工业职业技术学院信息工程系. 200 9 年 12 月. 内容提要 循环概述 goto 语句及它构成的循环 While 语句 Do-While 语句 For 语句 循环的嵌套 控制语句. 5.1 概述 C 语言可实现循环的语句: 用 goto 和 if 构成循环 while 语句 do ~ while 语句 for 语句 5.2 goto 语句及用 goto 语句 构成循环 无条件转向 goto 语句一般格式:. goto 语句标号 ;. 说明: 语句标号用标识符表示,不能用整数

mac
Download Presentation

甘肃工业职业技术学院信息工程系

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语言程序设计 刘亚奇 甘肃工业职业技术学院信息工程系 2009年12月

  2. 内容提要 • 循环概述 • goto语句及它构成的循环 • While语句 • Do-While语句 • For语句 • 循环的嵌套 • 控制语句

  3. 5.1概述 C语言可实现循环的语句: 用goto 和 if 构成循环 while 语句 do ~ while 语句 for 语句 5.2 goto语句及用goto语句构成循环 无条件转向goto语句一般格式: • goto 语句标号; • 说明: • 语句标号用标识符表示,不能用整数 • 结构化程序设计限制使用goto语句

  4. 例 5.1 用if 和goto语句构成循环,求 循环条件 循环初值 循环变量增值 循环终值 循环体 • 用途: • 与if语句一起构成循环结构 • 从循环体中跳转到循环体外 #include<stdio.h> void main() { int i,sum=0; i=1; loop: if(i<=100) { sum+=i; i++; goto loop; } printf("%d",sum); } i=2 sum=0+1 sum=1+2=3 sum=3+3=6 sum=6+4 …… sum=4950+100=5050 i=3 i=4 i=5 i=101

  5. while 假(0) 表达式 真(非0) 循环体 • 5.3while语句 • 一般形式: while(表达式) 循环体语句; • 执行流程:

  6. 例5.2 用while循环求 循环条件 循环初值 循环变量增值 循环终值 循环体 #include <stdio.h> void main() { int i,sum=0; i=1; while(i<=100) { sum=sum+i; i++; } printf("%d",sum); }

  7. 特点:先判断表达式,后执行循环体 • 说明: • 循环变量应有一个初值 • 循环体有可能一次也不执行 • 循环体可为任意类型语句 • 循环体如果包含一个以上的语句,应用花括号括起来,以复合语句的形式出现,否则,while语句的范围只到while后第一个分号处 • 循环体中应有使循环趋向于结束的语句 如本例中的i++语句

  8. do 循环体 while 真(非0) 表达式 假(0) • 5.4 do~while语句 • 一般形式: do 循环体语句; while(表达式); • 执行流程:

  9. 例5.3 用do~while循环求 #include <stdio.h> void main() { int i,sum=0; i=1; do { sum+=i; i++; }while(i<=100); printf("%d",sum); }

  10. 循环体 While循环 假(0) 表达式 真(非0) 循环体 • 特点:先执行循环体,后判断表达式 • 说明: • 至少执行一次循环体 • do~while可转化成while结构

  11. 例 5.4 while和do~while比较 #include<stdio.h> void main() { int i,sum=0; scanf("%d",&i); do { sum+=i; i++; }while(i<=10); printf("%d",sum); } #include<stdio.h> void main() { int i,sum=0; scanf("%d",&i); while(i<=10) { sum+=i; i++; } printf("%d",sum); } 11↙ 11 11↙ 0 1↙ 55 1↙ 55

  12. for 表达式1 假(0) 表达式2 真(非0) 语句 表达式3 • 5.5for语句 • 一般形式: for(表达式1 ; 表达式2;表达式3)语句 • 执行流程:

  13. 例_1 用for循环求 #include <stdio.h> void main() { int i,sum=0; for(i=1;i<=100;i++) sum+=i; printf("%d",sum); } • for语句一般应用形式: for(循环变量赋初值;循环条件;循环变量增值) { 循环体语句; } • 说明: • for语句可以转换成while结构 • for语句中表达式1,表达式2 ,表达式3 类型任意,都可省略,但分号;不可省,表达式2 省略时,不判断循环条件,也就是认为表达式2始终为真 • 三个表达式可都省略: for(; ;) i=1; for (;i<=100 ;i++) sum=sum+i; 表达式1; while(表达式2) { 循环体语句; 表达式3; } for (i=1; ;i++) sum=sum+i; i=1; for (;i<=100 ;) {sum=sum+i; i ++} for ( i=1;i<=100 ;) {sum=sum+i; i++;}

  14. 例_3:#include<stdio.h> void main( ) { int i=0; for(;i<10;i++) putchar(‘a’+i); } 例_2:#include<stdio.h> void main( ) { int i; for(i=0;i<10;i++) putchar(‘a’+i); } 例_4:#include<stdio.h> void main( ) { int i=0; for(;i<10;) putchar(‘a’+(i++)); } 运行结果:abcdefghij

  15. 表达式1,3也可以是逗号表达式 例_5:#include<stdio.h> void main() { int i,j,sum; for(sum=0,i=1;i<=100;i++) sum=sum+i; printf("%d\n",sum);} 例_6: #include<stdio.h> void main() { int i,j,k; for(i=0,j=100;i<=j;i++,j--) k+=i*j; printf("%d,%d,%d\n",i,j,k);}

  16. 表达式2可以是关系或逻辑表达式,也可以是其它类型的表达式,只要其值非0,就执行循环体表达式2可以是关系或逻辑表达式,也可以是其它类型的表达式,只要其值非0,就执行循环体 例_7: #include<stdio.h> void main() { int i,c; for(i=0;(c=getchar())!=‘\n’;i+=c); printf("%d ",i); } 例_8: #include<stdio.h> void main() { char c; for(;(c=getchar())!='\n';) printf("%c ",c); }

  17. 外循环 (4) for( ; ;) { …… do { …… }while(); …… while() { …… } …... } 内循环 内循环 • 5.6 循环的嵌套 • 三种循环可互相嵌套,层数不限 • 外层循环可包含两个以上内循环 • 嵌套循环的执行流程 (1) while() { …… while() { …… } …... } (3) while() { …… do { …… }while( ); ……. } (2) do { …… do { …… }while( ); …... }while( );

  18. 1 2 9 3 1 4 18 2 6 2 27 3 6 3 9 12 8 4 36 4 45 5 10 15 5 6 54 12 6 18 21 63 14 7 7 8 8 16 72 24 81 27 9 18 9 j i 1 2 3 …………….. 9 例 循环嵌套,输出九九表 例_9:#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<10;j++) printf("%4d",i*j); printf(“\n”); } }

  19. 6.7循环控制语句 break语句 功能:在循环语句和switch语句中,终止并跳出循环体或跳出switch结构 说明: break只能终止并跳出最近一层的结构 break不能用于循环语句和switch语句之外的任何其它语句之中 If和goto构成的循环语句中不能用break语句

  20. while do 假(0) 表达式 …… break; …... 真(非0) …… break; …… while 真(非0) 表达式 假(0)

  21. for switch 表达式1 表达式 假(0) 表达式2 case 真(非0) const 1 const 2 const n default …… break; …... 语句组1 break; 语句组2 break; 语句组n break; 语句组 break; …... expr3

  22. 例_10:输出圆面积,面积大于100时停止 #define PI 3.14159 #include<stdio.h> void main() { int r; float area; for(r=1;r<=10;r++) { area=PI*r*r; if(area>100) break; printf("r=%d,area=%.2f\n",r,area); } }

  23. 例_11:小写字母转换成大写字母,直至输入非字母字符例_11:小写字母转换成大写字母,直至输入非字母字符 #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; } }

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

  25. 例_12求输入的十个整数中正数的个数及其平均值例_12求输入的十个整数中正数的个数及其平均值 #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); }

  26. 例5.5把100~200之间的不能被3整除的数输出 #include<stdio.h> void main() { int n; for(n=100;n<=200;n++) { if(n%3= =0) continue; printf("%d\n",n); } }

  27. t=1,pi=0,n=1.0,s=1 当|t|1e-6 pi=pi+t n=n+2 s=-s t=s/n pi=pi*4 输出pi #include <stdio.h> #include <math.h> void main() { int s; float n,t,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.6f\n",pi); } • 5.8程序举例 分子:1,-1,1,-1… 分母:1,3,5,7,...

  28. 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 f1=1,f2=1 for i=1 to 20 输出f1,f2 f1=f1+f2 f2=f2+f1 例5.7 求Fibonacci数列:1,1,2,3,5,8,……的前40个数 #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; } }

  29. 读入m k=m i=2 当ik m被i整除 假 真 用break 结束循环 i=i+1 ik+1 假 真 输出:m”不是素数” 输出:m”是素数” 例5.9 求100~200间的全部素数 例6.8 判断m是否素数 #include <stdio.h> #include <math.h> void main() { int m,i,k; scanf("%d",&m); k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0) break; if(i>k) printf("%d is a prime number\n",m); else printf("%d is not a prime number\n",m); } #include <stdio.h> #include <math.h> void main() { int m,i,k,n=0; for(m=101;m<=200;m=m+2) { k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0) break; if(i>=k+1) {printf("%d ",m);n=n+1;} if(n%10==0) printf("\n"); } printf("\n"); }

  30. ABCDEFGHIJKLMNOPQRSTUVWXYZ 例5.10 译密码 #include <stdio.h> #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!

More Related