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

下载本文档

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

文档简介

1、C语言程序设计教程语言程序设计教程 王明福 主编 高教社第第5章章 循环结构循环结构程序设计程序设计n本本 章章 导导 读读 循环结构是结构化程序设计的基本结构之一。它与顺序结构、分支结构一起成C语言的三种基本结构,成为各种复杂程序设计的基础。C语言提供的三种形式的循环语句分别为:当型循环while语句、直到型循环do-while语句和for语句。 n 本章的教学目标:本章的教学目标: 理解循环结构的概念 掌握三种形式的循环循环语句 较熟练地使用循环语句进行程序设计C语言程序设计教程语言程序设计教程 王明福 主编 高教社第第5章章 循环结构循环结构程序设计程序设计5.1 5.1 循环结构的设计

2、思想循环结构的设计思想 5.2 5.2 当型循环当型循环whilewhile语句语句 5.3 5.3 直到型循环直到型循环do-whiledo-while语句语句 5.4 5.4 forfor循环语句循环语句 5.5 5.5 循环的嵌套循环的嵌套 5.6 5.6 三种循环语句的比较三种循环语句的比较 5.7 5.7 breakbreak、continuecontinue和和gotogoto语句语句 5.8 5.8 循环结构的综合实例循环结构的综合实例C语言程序设计教程语言程序设计教程 王明福 主编 高教社5.1 5.1 循环结构的设计思想循环结构的设计思想案例:计算1+2+.+100。两种方式

3、设计程序方法1:int sum=0;sum=1+2+100;printf(“the sum is %dn”,sum);方法2:sum = 1;sum = sum +2;sum = sum + 100; 结论:方法1赋值语句很长;方法2语句过多,都很烦琐。如果要求解11000的累计和呢?C语言程序设计教程语言程序设计教程 王明福 主编 高教社方法2可用如下伪语言算法描述: begins1:sum = 0;k=1;s2:sum = sum+k;s3: k+;s4:if k = 100 then goto s2;s5: print sum; s6: end该伪语言由4部分组成: (1)初始化部分:建

4、立循环首次执行所必条件;例如,sum =0;k=1; (2)循环体部分:需要重复执行的操作:例如,sum = sum + k; (3)修改部分:修改控制循环次数变量,使之逐渐趋于结束,如,k+; (4)终止条件测试部分:当不满足终止条件时,执行循环,否则结束循环C语言有三种类型的循环语句,while、do-while和for,用来解决这类问题。初始化部分循环体部分修改部分终止条件测试部分C语言程序设计教程语言程序设计教程 王明福 主编 高教社5.2 5.2 当型循环当型循环whilewhile语句语句 n 当型循环又叫while循环,其一般句型为: while( 表达式表达式 ) 循环体语句循

5、环体语句; n其中:循环体语句其中:循环体语句,可以是一条语句,但通常为复合语句。n while循环执行时,先处理表达式表达式,表达式的值为“真”时,循环体语句循环体语句被执行,然后再去判表达式的值,如果表达式的值仍为“真”时,则再次执行循环体语句循环体语句;如果表达式值为“假”,则退出循环,如图5-1所示。 假真表达式图5 -1循环体语句C语言程序设计教程语言程序设计教程 王明福 主编 高教社因此,求解5.1中问题的伪语言算法:s2:sum = sum+k;s3:k+;s4: if k = 100 then goto s2;用while循环描述为:while(k= 100)sum =sum+

6、k;k+;其中,while循环中的 表达式为:ksum,所以,可以用如下伪语言算法描述。Begin 1= i ,0= sum while i50 sum + 1 /i =sum i+1=i print sumEnd完整的C程序清单如下:main() int i; float sum; /*因为和sum是实型,所以设置成float类型*/ i=1,sum=0.0; while(i=50) sum +=1/(float)i; i+; printf(“总和sum = %fn”,sum); /*相应的输出也要设置成实型*/ 真假i50, 循环体中语句i+;将最终导致i50的发生。如果无此语句,i值始终

7、不变,则该循环将永远执行下去,这种情况称为死循环。例如, while(1) sum += i;就是一个死循环。C语言程序设计教程语言程序设计教程 王明福 主编 高教社5.3 5.3 直到型循环直到型循环do-whiledo-while语句语句 n直到型循环dowhile语句的一般句型为:do 循环体语句; while(表达式);n先执行循环体语句,再求表达式,若表达式的值为非0,则再次执行循环体语句,如此反复,直到表达式的值为0结束循环,并转到下一条语句执行,如图5-3所示。 ndowhile循环和while循环的主要区别是:它先执行循环体,后判断是否继续循环的条件,直到“表达式表达式”值变成

8、“假”时退出循环。所以,直到型循环的循环体最少执行一次,其它情况和当型循环意义一样,其执行过程见图5-3。 假真循环体语句表达式图5 - 3C语言程序设计教程语言程序设计教程 王明福 主编 高教社【例5.3】计算1+2+100。main() int k,sum; k=1; sum =0; do sum += k; k+; while(k= 100); printf(“n sum=%d”,sum);C语言程序设计教程语言程序设计教程 王明福 主编 高教社5.4 5.4 forfor循环语句循环语句 1. 1. forfor循环语句的一般格式循环语句的一般格式 for(初始表达式;循环条件表达式;

9、变量增值表达式) 循环体语句; 2 for循环语句的执行过程循环语句的执行过程(1) 先执行初始表达式;(2) 计算循环条件表达式,若为非0(真),执行循环体;若为0(假),则结束循环。(3) 计算变量增值表达式, 然后重复执行第二步。执行过程如图5-4所示。 假真初始表达式条件循环语句体变量增值表达式图5 - 4C语言程序设计教程语言程序设计教程 王明福 主编 高教社【例【例5.5】用】用for循环计算循环计算1+2+100。n流程图如图5-5所示,在for循环中:初始表达式:k = 1,sum = 0循环条件表达式:k= 100变量增值表达式:k+n完整C程序清单为:main() int

10、k,sum; for(k=1,sum=0;k=100;k+) sum=sum+k;printf(“n 1+2+100=%d”,sum); n程序的执行结果1+2+100=5050假真i=1,sum=0i=100sum=sum+ii+打印sum图5-5C语言程序设计教程语言程序设计教程 王明福 主编 高教社3 3forfor语句的使用说明语句的使用说明 (1) 如果for语句的循环体由多个语句组成,则必须用左右花括号“ ”括起来,使其形成复合语句。例如,把变量增值表达式移到循环体中,从而在for中省略变量增值表达式。即上式可改写成for(k=1,sum=0;k=100; )sum = sum+k

11、; k+;(2) for语句中的初始表达式和变量增值表达式既可以是一个简单表达式,也可以是由逗号运算符将多个表达式连接起来。(3) for语句中的循环条件表达式是关系表达式或逻辑表达式,其值取逻辑值,即“真”或“假”。用来控制循环次数。(4) for语句中的任何一个表达式都可以缺省,但分号“;”一定要保留。缺省表达式部分的功能,可以用其它语句去完成。我们以【例5.5】中的for循环语句:for(k=1,sum=0;k=100;k+)sum =sum+k;为例,说明如下几种等价的缺省形式: C语言程序设计教程语言程序设计教程 王明福 主编 高教社forfor语句的语句的几种等价的缺省形式几种等价

12、的缺省形式 缺省初始表达式:缺省初始表达式:forfor( ;循环条件表达式;变量增值表达式)循环条件表达式;变量增值表达式) k = 1; sum =0; /*把初始表达式移出在循环语句的前面*/ for( ; k100)break; /* 通过break语句跳出循环体,详见本章5.7节*/ sum =sum+k;缺省变量增值表达式:缺省变量增值表达式:forfor(初始表达式;循环条件表达式;初始表达式;循环条件表达式; ) for(k=1,sum=0; k100)break; /* 通过break语句跳出循环体,详见本章5.7节*/sum =sum+k; 缺省循环条件表达式和变量增值表达

13、式:缺省循环条件表达式和变量增值表达式:forfor(初始表达式;初始表达式; ; ) for(k=1,sum=0; ; ) if(k100)break; /* 通过break语句跳出循环体,详见本章5.7节*/sum =sum+k;k+;全部缺省:全部缺省: forfor( ; ; )留给读者完成。 循环体语句也可以是空语句,如本例可改为:循环体语句也可以是空语句,如本例可改为: for(k=1,sum=0;k f1, 1- f2print f1, f2for(n=3; nfn,print fn 修改fn-1 , fn-2的值,以被下次循环递推: fn-1 - fn-2, fn - fn-1

14、End(算法结束)C语言程序设计教程语言程序设计教程 王明福 主编 高教社完整的完整的C程序程序#include stdio.hnmain() int i; long f1 = 1,f2 = 1; printf(“n%8ld%8ld”,f1, f2); for(i=3;i=16;i+) f = f1+f2; printf(“%8ld”,f); /*由前两项的fn-1 ,fn-2求得fn并输出*/ if(i%4=0)printf(“n”);/*每行限输出4个fibonacci数*/ f1 = f2; f2 = f; /*修改fn-1 ,fn-2的值,以被下次循环递推*/ n运行结果: 1 1 2

15、 3 5 8 13 21 34 55 89 144 233 377 610 987C语言程序设计教程语言程序设计教程 王明福 主编 高教社5.5 5.5 循环的嵌套循环的嵌套 一个循环的循环体内包含另外一个循环语句,这样的编程方式称之为“循环的嵌套”。循环嵌套时,外层循环执行一次,内层循环从头到尾执行一遍。3种循环(while循环、do-While循环和for循环)不仅可以自身嵌套,而且还可以互相嵌套。 【例【例5.7】打印图5-6的九九乘法表。 C语言程序设计教程语言程序设计教程 王明福 主编 高教社【例5.7】打印九九乘法表打印九九乘法表为简化问题,仅考虑打印表中的积,乘数和被乘数两项留给

16、读者完成。n算法设计要点:(1) 从上往下看,问题简化为打印第1行乘积、第2行乘积、.、第k行乘积、. 、第9行乘积,可用for循环语句: for(k=1; k=9; k+) 打印第k行; 实现。问题转化为如何用C实现“打印第k行”?(2) 我们再来观察第k行 ( k = 1,2,3,9 ): k*1 k*2 k*3 k*4 .k*i k*9 (i=1,2,3,9)从左往右看,是一个通项公式为:ai = k * i 的数列 ai | i=1,2,.,9,所以,可用循环语句for(i=1;i=9;i+)printf(“%5d”,k*i);实现。另外,由于第k行是另起一行,所以,必须添加换行操作p

17、rintf(“n”)。 n程序清单如下:main() int k,i; for(k=1;k=9;k+) printf(“n”); for(i=1;i=9;i+)printf(“%5d”,k*i); C语言程序设计教程语言程序设计教程 王明福 主编 高教社5.6 5.6 三种循环语句的比较三种循环语句的比较 1. 三种循环都可以用来处理同一类问题,一般情况下它们可以互相替代。2. 三种循环都能用break结束循环,用continue开始下一次循环。3. while和do-while只判断循环条件。循环变量的初值化要放在循环语句之前(如i=0,s=1等),在循环体中还应包含修改循环条件的语句(如i

18、+,j+等)。4. for语句本身除了包含循环条件之外还可以给循环变量赋初值。当然也允许省略其中某些部分。如果省略前后两项成为for(;循环条件;)时,完全与while(循环条件)等效。5 while和for都是先判断后循环,而do-while是先循环后判断。 i = 1,s=0;for( ;i=50; ) s = s+i; i+; i=1,s=0;while(i=50) s = s+i; i+;i=1;s=0do s = s+i; i+; while(i=99)break; 而输出100以内的偶数,可用如下含有continue的循环语句实现: for(i=1; i100 ; i+) if(i

19、%2)continue; printf(“%4d”,i); (2) 循环嵌套时,break和continue只影响包含它们的最内层循环,与外循环无关。 (3) continue语句有点象break语句。但continue语句不造成强制性的中断循环,而是强行执行下一次循环,而break语句则终止本次循环。 C语言程序设计教程语言程序设计教程 王明福 主编 高教社【例【例5.85.8】编写程序,计算满足:】编写程序,计算满足:1 12 2+2+22 2+3+32 2+ + +n n2 21000= 1000)break; #include stdio.hmain ( ) int sum, k; f

20、or(k=1,sum=0; ;k+) sum += k*k; if (sum= 1000) break; printf(“n n=%d”,k-1); C语言程序设计教程语言程序设计教程 王明福 主编 高教社5.7.2 5.7.2 goto goto 语句和标号语句语句和标号语句 (1) gotogoto语句语句是无条件转移语句,其句型是: goto goto 语句标号;语句标号;语句标号语句标号是一个标识符,应按标识符的命名规则来命名。(2) 标号语句标号语句则是由语句标号和其后的冒号构成的,即: 语句标号:语句标号:是goto语句的转移目标。例如:loop: sum+=i; /*其中“loop: ”是标号语句,“loop”叫语句标号*/ i+; if(i = 36)goto loop; /*其中“goto loop;”称goto语句*/ (3)(3) goto语句被执行时,无条件地转移到标号语句标号语句处。标号语句必须与goto语句同处于一个函数中,goto语句一般用于同层跳转,或由里层向外层跳转,而不能用于由外层向里层跳转。结构化程序设计不提倡使用“goto”语句,除非它能使程序更简捷清晰。 C语言程序设计教程语言程序设计教程 王明福 主编 高教社5.8 5.8 循环结构的综合实例循环结构的综合实例 【例5.11】输出3100中的全部素数。算法设计:

温馨提示

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

评论

0/150

提交评论