第五章循环结构程序设计_第1页
第五章循环结构程序设计_第2页
第五章循环结构程序设计_第3页
第五章循环结构程序设计_第4页
第五章循环结构程序设计_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章 循环结构程序设计概述goto语句以及用goto语句构成循环while语句do-while语句for语句循环的嵌套几种循环的比较break语句和continue语句程序举例5.1 概述概述 程序中凡涉及求阶乘、累加、排序等问题都要程序中凡涉及求阶乘、累加、排序等问题都要用循环解决,因为程序中的某一用循环解决,因为程序中的某一程序段要重复执行程序段要重复执行若干次。若干次。C语言实现循环的语句:语言实现循环的语句:vgoto 和和if组合组合vwhile语句语句vdo while语句语句vfor语句语句重点重点5.2 goto语句以及用语句以及用goto语句构成循环语句构成循环v作用:无条

2、件地转移到语句标号指向的语句去执行。作用:无条件地转移到语句标号指向的语句去执行。 v一般格式:一般格式: goto 语句标号语句标号; .标号标号:语句语句; v说明:说明:l语句标号由字母、数字和下划线组成,定名规则同变语句标号由字母、数字和下划线组成,定名规则同变量名,不能用数字开头。量名,不能用数字开头。goto loop; ( ) goto 100;()l与循环语句配合使用时,可从循环体内跳到循环体外,与循环语句配合使用时,可从循环体内跳到循环体外,而不能从循环体外跳到循环体内。而不能从循环体外跳到循环体内。lgoto语句转移的方向可前可后。语句转移的方向可前可后。l与与ifif语句

3、配合使用时可构成循环。语句配合使用时可构成循环。lgoto 语句违背结构化程序设计的原则,因此应限制语句违背结构化程序设计的原则,因此应限制使用。使用。例例5.1 用用if 和和goto语句构成循环,求语句构成循环,求1001nn#include void main( ) int i,sum=0; i=1;loop: if(i=100) sum+=i; i+; goto loop; printf(%d,sum);sum=0+1sum=1+2=3sum=3+3=6sum=6+4sum=4950+100=5050循环初值循环终值循环变量增值循环条件循环体例例 从键盘输入一组数据,以从键盘输入一组数

4、据,以0结束输入,求数据和。结束输入,求数据和。#include void main() int number,sum=0; read_loop: scanf(%d,&number); if(!number) goto print_sum; sum+=number; goto read_loop;print_sum: printf(The total sum is %dn,sum);5.3 while语句语句while语句实现语句实现“当型当型”循环结构。循环结构。v一般形式:一般形式: while(表达式表达式) 循环体语句;循环体语句;没有没有“;”v功能:功能:先判断表达式,若为

5、真则执行循环体,先判断表达式,若为真则执行循环体,再判断表达式,重复上述过程,直到表达式为假再判断表达式,重复上述过程,直到表达式为假时退出循环。时退出循环。v求求sum=sum+i i=i+1i=1;sum=0i100假假真真i=1;sum=0当当i100 sum=sum+i i=i+11001nn#include void main( ) int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum);循环条件循环体例例5.2 用用while语句构成循环,求语句构成循环,求1001nn循环初值循环终值循环变量增值v关于关于while

6、循环语句:循环语句:lwhile循环循环先判断表达式,后执行循环体。先判断表达式,后执行循环体。循环体有可循环体有可能一次也不执行。能一次也不执行。l循环体若包含一个以上语句,应该用循环体若包含一个以上语句,应该用括起来。括起来。l循环体应包含有使循环趋向结束的语句;循环体应包含有使循环趋向结束的语句;l下列情况,退出下列情况,退出while循环循环u条件表达式不成立(为零)条件表达式不成立(为零)u循环体内遇循环体内遇 break , gotol无限循环无限循环 while(1) 循环体循环体 ;例例 用用while语句语句显示显示110的平方的平方#include void main()

7、int i=1; while(i=10) printf(%d*%d=%dn,i,i,i*i); i+; 1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=1005.4 do-while语句语句 vdo-while语句实现语句实现“直到型直到型”循环结构。循环结构。v一般形式:一般形式:v功能:先执行循环体,然后判断表达式。若为功能:先执行循环体,然后判断表达式。若为真,则再次执行循环体,否则退出循环。真,则再次执行循环体,否则退出循环。v求求do循环体语句;循环体语句;while(表达式表达式) ; 有有“;”1001nni=1,

8、sum=0sum=sum+i i=i+1i100真真假假i=1,sum=0sum=sum+i i=i+1 直到直到i100例例5.3 用用do-while语句构成循环,求语句构成循环,求100inn#include void main( ) int i,sum=0; scanf(%d,&i); do sum+=i; i+; while(i=100); printf(%d,sum);循环条件循环体#include void main()int i,sum=0; scanf(%d,&i); while(i=100) sum+=i; i+; printf(%d,sum);ldo-wh

9、ile 循环,循环,循环体循环体至少至少执行一次;执行一次;lwhile和和do-while可以解决同一问题,两者可以互换。可以解决同一问题,两者可以互换。lwhile后的表达式一开始就为假时,两种循环结果不同。后的表达式一开始就为假时,两种循环结果不同。5.5 for语句语句 for 语句是语句是 C 语言中语言中最为灵活最为灵活,使用最广泛使用最广泛的的循环语句,可完全替代循环语句,可完全替代while,do-while语句。语句。v一般形式一般形式 for(表达式表达式1;表达式;表达式2;表达式;表达式3) 循环体语句;循环体语句;v常用形式常用形式 for(循环变量赋初值;循环条件;

10、循环变量增值循环变量赋初值;循环条件;循环变量增值) 循环体语句;循环体语句;#include void main( ) int i,sum=0; for(i=1;i=100;i+) sum+=i; printf(%d,sum);i 100sum=sum+iNYi=1i +for循环下循环下面的语句面的语句循环步长循环步长例例 用用for语句构成循环,求语句构成循环,求1001nn几点说明:几点说明:vfor语句中表达式语句中表达式1、2、3类型任意,都可省略,类型任意,都可省略,但分号但分号“;”不能省。不能省。v无限循环:无限循环:for(;)不断执行循环体,循环不终止。不断执行循环体,循

11、环不终止。vFor语句可以转换成语句可以转换成while结构结构表达式表达式1;while(表达式表达式2)循环体语句;循环体语句;表达式表达式3;v几种形式:几种形式:l省略表达式省略表达式1:应在:应在for之前为变量赋初值。之前为变量赋初值。/*正常形式正常形式*/main( ) int i ,sum=0; for(i=1;i=100;i+) sum=sum+i; printf(%d,sum);/*省略表达式省略表达式1*/main( ) int i,sum=0; i=1; for(;i=100;i+) sum=sum+i printf(%d,sum);l省略表达式省略表达式2:循环条件

12、始终为:循环条件始终为“真真”,循环不终止。,循环不终止。l省略表达式省略表达式3:应另外设法使程序能够结束。:应另外设法使程序能够结束。/*省略表达式省略表达式3*/main( ) int i,sum=0; for(i=1;i=100;) sum=sum+i i+; printf(%d,sum);l省略表达式省略表达式1、3:完全等同于:完全等同于while语句。语句。/*省略表达式省略表达式1、3*/main( ) int i,sum=0; i=1; for(;i=100;) sum=sum+i i+; printf(%d,sum);l三个表达式都省略:三个表达式都省略:无初值,不判断条件

13、,循环变量无初值,不判断条件,循环变量 不增值,死循环。不增值,死循环。l表达式表达式1、3可以是与循环无关的表达式,也可以是逗可以是与循环无关的表达式,也可以是逗号表达式。号表达式。for ( s=0 , i=1 ; i=100 ; i+ ) s=s+i;/*表达式是逗号表达式表达式是逗号表达式*/main() int i,j,k; for(i=0,j=100;i=j;i+,j-) k=i+j; printf(%d+%d=%dn,i,j,k); l表达式表达式2可以是关系、逻辑、算术、字符表达式,非可以是关系、逻辑、算术、字符表达式,非0时,执行循环体,为时,执行循环体,为0时退出循环时退出

14、循环。#includemain() char c; for(;(c=getchar()!=n;) printf(%c ,c);#include main() int i,c; for(i=0;(c=getchar()!=n;i+=c)printf(%d ,i+c);5.6 循环的嵌套循环的嵌套v定义:一个循环体内又包含了另一个定义:一个循环体内又包含了另一个完整完整的循的循环结构,称为循环的嵌套。环结构,称为循环的嵌套。v三种循环可以互相嵌套,层数不限。三种循环可以互相嵌套,层数不限。v嵌套循环的执行流程。嵌套循环的执行流程。(1) while() while() . (2) do do wh

15、ile(); . while( );(3) for(;) for(;) (4) while() do while(); . (5) for( ; ;) while() . (7) for( ; ;) do while(); while() .(6) do for(; ;) . while();v循环可以互相嵌套,但不能相互交叉。循环可以互相嵌套,但不能相互交叉。 for for . . for for . . 例例 计算计算3组组14累加的和累加的和#include void main() int i,j,s=0; for(i=1;i=3;i+) for(j=1;j=4;j+) s=s+j;

16、printf(“s=%dn,s);结果:结果:s=301 2 3 i j s=01 1 11 3 62 1 112 2 132 4 203 1 213 2 233 3 263 4 302 3 161 4 10例例 循环嵌套,输出九九乘法表循环嵌套,输出九九乘法表1234567891234567892468101214161836912151821242791827364554637281.ijvoid main() int i,j; for(i=1;i10;i+) printf(%4d,i); printf(n-n); for(i=1;i10;i+) for(j=1;j10;j+) print

17、f(j=9)?%4dn:%4d,i*j);v 九九乘法表逻辑框图九九乘法表逻辑框图i10printfNYi=1j+j=1j10YNi+for(i=1;i10;i+) for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);外循环内循环5.7 几种循环的比较几种循环的比较语语 句句适用范围适用范围说说 明明while只知道结束条件只知道结束条件而而无法确定执行无法确定执行次数次数的情况下。的情况下。 循环变量初始化在循环体之前循环变量初始化在循环体之前 循环体中应包含使循环结束的语句循环体中应包含使循环结束的语句 可以用可以用 break 和和continue 语句控制

18、语句控制do-while至少执行一次时至少执行一次时ifgoto无条件循环无条件循环 该循环该循环不能用不能用break 和和continue 语句控制语句控制for已知执行次数已知执行次数或或者已知初值,终者已知初值,终值,步长时。值,步长时。使用比较灵活使用比较灵活5.8 break语句和语句和continue语句语句Break语句语句v功能:功能:在循环语句和在循环语句和switch语句中语句中,终止并跳出终止并跳出循环体或开关体循环体或开关体。v说明:说明:lbreak只能只能终止并跳出终止并跳出最近一层最近一层的结构。的结构。lbreak不能用于循环语句和不能用于循环语句和switc

19、h语句之外的任何其它语句之外的任何其它语句之中。语句之中。v一般形式:一般形式:break;v流程形式:流程形式:表达式表达式break;假假(0)真真(非非0)whiledobreak;.表达式表达式假假(0)真真(非非0)while表达式表达式2break;.假(0)真(非0)for表达式表达式1表达式表达式3 C语言程序设计switch表达式表达式语句组语句组1break;语句组语句组2break;语句组语句组nbreak;语句组语句组break;.const 1const 2const ndefaultcase 例例 break举例:输出圆面积,面积大于举例:输出圆面积,面积大于100

20、时停止时停止#include #define PI 3.14159void main( ) int r ; float area; for(r=1;r100) break; printf(r=%d,area=%f,r,area); r 10area=3.14*r*rNYr =1i +for循环下循环下面的语句面的语句area 100NY输出:输出: r=1, area=3.14 r=2, area=12.57 r=3, area=28.27 r=4, area=50.27 r=5, area=78.85 / * 当当 r=6时,时, area=113.10 故此值没有被故此值没有被 输出输出

21、*/ C语言程序设计例例 break举例:小写字母转换成大写字母举例:小写字母转换成大写字母,直至输入非字母字符直至输入非字母字符#include void main()char c; while(1) c=getchar(); if(c=a & c=A & c=Z) putchar(c); else break; Continue语句语句v功能:功能:结束本次循环结束本次循环,跳过循环体中尚未执行,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断。的语句,进行下一次是否执行循环体的判断。vcontinue 语句语句仅用于循环语句中。仅用于循环语句中。break 和

22、continue 语句语句的区别vcontinue 语句只结束本次循环,语句只结束本次循环,break语句则是语句则是结束整个循环。结束整个循环。 vcontinue 语句只用于语句只用于while,do-while,for循环语句循环语句中中,break语句还可以用于语句还可以用于switch语句中。语句中。v流程形式:流程形式: C语言程序设计表达式表达式continue;假假(0)真真(非非0)while真真(非非0)docontinue;.表达式表达式假假(0)while表达式表达式2continue;.假假(0)真真(非非0)for表达式表达式1表达式表达式3 C语言程序设计例例5.

23、5 把把100200之间不能被之间不能被3整除的数输出整除的数输出#include void main() int i; for(i=100;i=200;i+) if(i%3= =0) continue; printf(“%d”,n); i 200NYi =100i +for循环下循环下面的语句面的语句i%3= =0YprintfN运行结果:运行结果: 100,101, 103,104, 106,107, 109,110, 112,113, 115,116, 118,119,例例 求输入的十个整数中正数的个数及其平均值求输入的十个整数中正数的个数及其平均值#include void main(

24、) int i,num=0,a; float sum=0; for(i=0;i10;i+) scanf(%d,&a);if(a=0) continue;num+;sum+=a; printf(%d plus integers sum :%6.0fn,num,sum); printf(Mean value:%6.2fn,sum/num);5.9 程序举例程序举例 C语言程序设计为止最后一项的绝对值小于的近似值,直到公式求用例610715131147 . 5t=1,pi=0,n=1.0,s=1当|t|1e-6pi=pi+tn=n+2s=-st=s/npi=pi*4输出pi分子:1,-1,1

25、,-1分母:1,3,5,7,.#include #include 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.6fn,pi);运行结果:运行结果: pi=3.141594例例5.8 求求Fibonacci数列:数列:1、1、2、3、5、8前前40个数。个数。) 3()2(12) 1(1121nFFFnFnFnnn月数月数小兔小兔中兔中兔老兔老兔总数总数1111111111123450

26、200002352f1=1,f2=1for i=1 to 20输出输出f1,f2f1=f1+f2f2=f2+f1#include #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); f1=f1+f2; f2=f2+f1; 153423315971094675025514229352457824157817185537725841771112139383204057028873908816921389610

27、4181286571964181346269922746563245986321144987676546368317811217830914930352102334155) 3()2(12) 1(1121nFFFnFnFnnn例例5.8 判断判断m是否素数。是否素数。#include #include void main() int m,i,k; scanf(%d,&m); k=sqrt(m); for(i=2;ik) printf(%d is a prime numbern,m); else printf(%d is not a prime numbern,m);读入读入mk=i=2

28、当当i km被被i整除整除真真假假用用break结束循环结束循环i=i+1i k+1真真假假输出输出”是素数是素数”输出输出”不不是素数是素数”m 19 19 is a prime number例例5.9 求求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 107 109

29、 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197199例例5.10 译密码。译密码。分析:分析:由于字符和整数之间可以通用,所以由于字符和整数之间可以通用,所以A A-E E对应对应A A- - A A+4+4可以定义一个字符型变量可以定义一个字符型变量c,cc,c接受输入,并接受输入,并c-c+4c-c+4。特殊之处是特殊之处是W W- -Z Z和和w w- -z z之间时之间时, ,它们需要对应为它们需要对应为A A- -D D和和a a- -d d, ,怎么办?怎么办?一种是用书上的办法,再减回去,即用一种是

30、用书上的办法,再减回去,即用c-c-26c-c-26来解决。来解决。#include void main() char c; while(c=getchar()!=n) if(c=a&c=A&c Z&cz) c=c-26; printf(%c,c); printf(“n); Hello,world! Lipps,asvph!本章小结:本章小结:v问题求解的过程和步骤叫算法,如求问题求解的过程和步骤叫算法,如求值的算法、验证值的算法、验证素数的算法。算法分析是程序设计的第一步,也是最重素数的算法。算法分析是程序设计的第一步,也是最重要的步骤。要的步骤。用某种编程程序语言来表达算法是程序设计用某种编程程序语言来表达算法是程序设计的目的的目的。v用编程语言实现结构化算法就是结构化程序设计。用编程语言实现结构化算法就是结构化程序设计。v结构化算法中只包含顺序、分支和循环三种

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论