版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、比比培训_C语言程序设计第五章 循环结构程序设计比比培训_C语言程序设计循环许多问题的求解归结为重复执行的操作,比如数值计算中的方程迭代求根,非数值计算中的对象遍历。重复执行就是循环。重复工作是计算机特别擅长工作之一。 重复的动作是受控制的,比如满足一定条件继续做,一直做直到某个条件满足,做多少次结束。也就是说重复工作需要进行控制-循环控制。 比比培训_C语言程序设计三种基本的循环结构 (1)while语句构成的循环结构(“当型循环”)(2)do-while语句构成的循环结构(“直到型循环”)(3)for语句构成的循环结构(“当型循环”) 比比培训_C语言程序设计while语句(当型循环)比比
2、培训_C语言程序设计while循环的执行流程 比比培训_C语言程序设计注意事项 (1)while语句的特点是先计算表达式的值,然后根据表达式的值决定是否执行循环体中的语句。因此,如果表达式的值一开始就为“假”,那么循环体一次也不执行。(2)当循环体为多个语句组成,必须用括起来,形成复合语句。(3)在循环体中应有使循环趋于结束的语句,以避免“死循环”的发生。 比比培训_C语言程序设计while循环应用举例例6-1:利用while语句,编写程序计算1+2+3+100。 比比培训_C语言程序设计while循环应用举例比比培训_C语言程序设计do-while语句(直到型循环)比比培训_C语言程序设计执
3、行流程 比比培训_C语言程序设计说明 (1)do-while循环,总是先执行一次循环体,然后再求表达式的值,因此,无论表达式是否为“真”,循环体至少执行一次。(2) do-while循环与while循环十分相似,它们的主要区别是:while循环先判断循环条件再执行循环体,循环体可能一次也不执行。do-while循环先执行循环体,再判断循环条件,循环体至少执行一次。 比比培训_C语言程序设计说明(3)其它:复合语句,避免死循环要求同while循环。 (4)C语言没有do-until(做直到条件满足后循环停止),但是用do-while可以实现它,只要控制表达式为:!就可以了。 比比培训_C语言程序
4、设计应用举例比比培训_C语言程序设计for语句(当型循环)比比培训_C语言程序设计for循环执行过程 比比培训_C语言程序设计for循环的执行流程 比比培训_C语言程序设计应用举例比比培训_C语言程序设计几种循环的比较1、循环变量初始化:while和do-while循环,循环变量初始化应该在while和do-while语句之前完成;而for循环,循环变量的初始化可以在表达式1中完成。 2、循环条件:while和do-while循环只在while后面指定循环条件;而for循环可以在表达式2中指定。 比比培训_C语言程序设计几种循环的比较3、循环变量修改使循环趋向结束:while和do-while
5、循环要在循环体内包含使循环趋于结束的操作;for循环可以在表达式3中完成。 4、for循环可以省略循环体,将部分操作放到表达式2,表达式3中,for语句功能强大。 比比培训_C语言程序设计几种循环的比较5、while和for循环先测试表达式,后执行循环体,而do-while是先执行循环体,再判断表达式。(所以while,for循环是典型的当型循环,而do-while循环可以看作是直到型循环)。 比比培训_C语言程序设计几种循环的比较6、三种基本循环结构一般可以相互替代,不能说哪种更加优越。具体使用哪一种结构依赖于程序的可读性和程序设计者个人程序设计的风格(偏好)。我们应当尽量选择恰当的循环结构
6、,使程序更加容易理解。(尽管for循环功能强大,但是并不是在任何场合都可以不分条件使用)。 比比培训_C语言程序设计几种循环的比较比比培训_C语言程序设计break语句 break;break语句的一般形式为:break;break语句的执行过程是:终止对switch语句或循环语句的执行(跳出这两种语句),而转移到其后的语句处执行。 比比培训_C语言程序设计说明 1、break语句只用于循环语句或switch语句中。在循环语句中,break常常和if语句一起使用,表示当条件满足时,立即终止循环。注意break不是跳出if语句,而是循环结构。 比比培训_C语言程序设计说明2、循环语句可以嵌套使用
7、,break语句只能跳出(终止)其所在的循环,而不能一下子跳出多层循环。要实现跳出多层循环可以设置一个标志变量,控制逐层跳出。 比比培训_C语言程序设计比比培训_C语言程序设计应用举例例6-10:从键盘上连续输入字符,并统计其中大写字母的个数,直到输入“换行”字符时结束。比比培训_C语言程序设计continue语句 一般形式是 :continue;功能:结束本次循环。即跳过本层循环体中余下尚未执行的语句,接着再一次进行循环条件的判定。注意:执行continue语句并没有使整个循环终止。注意与break语句进行比较。比比培训_C语言程序设计break,continue主要区别 continue语
8、句只终止本次循环,而不是终止整个循环结构的执行;break语句是终止循环,不再进行条件判断。 比比培训_C语言程序设计break,continue主要区别比比培训_C语言程序设计应用举例例1:从键盘输入一个大于2的整数n,判断是不是素数。 素数定义:只能被1和它本身整除的数是素数。为了判断一个数n是否为素数,可以让n除以2到n-1(实际上只要到sqrt(n))之间的每一个整数,如果n能够被某个整数整除,则说明n不是素数,否则n是素数。 比比培训_C语言程序设计实现 例2 译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码:将
9、字母a变成字母E,a变成e,即变成其后的第4个字母,W变成a,X变成b,Y变成c,Z变成D。见图5.15。字母按上述规律转换,非字母字符不变。如“china!”转换为“Glmre!” 。输入一行字符,要求输出其相应的密码。图5.15程序如下: #include main() char c; while(c=getchar()!=n) if(c=a & c=a & cZ & cz) c=c-26; printf(%c,c); 运行结果如下:china! Glmre!程序中对输入的字符处理办法是:先判定它是否大写字母或小写字母,若是,则将其值加4(变成其后的第4个字母)。如果加4以后字符值大于Z或
10、z,则表示原来的字母在V(或v)之后,应按图5.15所示的规律将它转换为aD(或ad)之一。办法是使c减26,如果读者对此还有疑问,请查ascII码表即可清楚。还有一点请读者注意:内嵌的if语句不能写成if(cZ| cz) c=c-26;因为当字母为小写时都满足“cZ”条件,从而也执行“c=c-26;”语句,这就会出错。因此必须限制其范围为“cZ & cz & cz”即可。例3 用/41-13+15-17+公式求的近似值,直到最后一项的绝对值小于10-6为止。用N|S结构化流程图表示算法(见图5.12)。图图5.125.12程序如下:#includemain()int s;float n,t,
11、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例4 求fibonacci数列40个数。这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即:f1=1 (n=1)f2=1 (n=2)fn=fn-1+fn-2 (n3)这是一个有趣的古典数学问题:有一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假设所有兔子都不死,问每个月的兔子总数为多少?解
12、此题的算法如图5.13所示。 图5.13程序如下: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; 运行结果为: 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
13、 2178309 3524578 57022887 9227465 14930352 24157817 39088169 63245986 102334155图5.14程序中在printf函数中输出格式符用“%12 ld”,而不是用“%12d”,这是由于在第23个数之后,整数值已超过整数最大值32767,因此必须用“%ld”格式输出。if语句的作用是使输出4个数后换行。i是循环变量,当i为偶数时换行,而i每增值1,就要计算和输出2个数(f1,f2),因此i每隔2换一次行相当于每输出4个数后换行输出。例5.8判断m是否素数。算法如图5.14所示。我们采用的算法是这样的:让m被2到m 除,如果m能
14、被2m 之中任何一个整数整除,则提前结束循环,此时i必然小于或等于k(即m);如果m不能被2k(即m)之间的任一整数整除,则在完成最后一次循环后,i还要加1,因此i=k+1,然后才终止循环。在循环之后判别i的值是否大于或等于k+1,若是,则表明未曾被2k之间任一整数整除过,因此输出“是素数”。程序如下:#include main() int m,i,k; scanf(%d,&m); k=sqrt(m+1);/*加1是为了避免在求m时可能出现的误差*/ for (i=2;i=k+1) printf(%d is a Prime mubern,m); else printf(%d is not a Prime numbern,m); 运行情况如下:1717 is a Prime number 例7 求100200间的全部素数。 在例5.8的基础上,对本题用一个嵌套的for循环即可处理。程序如下:# include main() int m,k
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 26875.1-2026城市消防远程监控系统第1部分:通用技术要求
- 公共营养师考试练习题
- 项目(限额)领料单
- 项目技术交底书
- 胸科疾病患者的护理创新能力
- (辅导班)2026年新高三数学暑假讲义(基础班)第12讲 等比数列及其前n项和(解析版)
- 2025-2026学年吉林省白山市高考仿真卷语文试题含解析
- 26年基础护理妇女技能培训课件
- 四川省遂宁市射洪中学2025-2026学年高一下学期期中考试化学试卷
- 26年延续性护理实施课件
- 2026年少先队考核模拟试题及答案详解(全优)
- 中国金谷国际信托有限责任公司招聘笔试备考试题及答案解析
- 湖南 2026 政府采购评审专家续聘考试(3) 真题
- 2026天津富凯建设集团有限公司招聘工作人员招聘4人考试参考题库及答案解析
- 2025年芯片测试岗笔试题目及答案
- 预应力混凝土空心方桩08SG360
- 雨课堂学堂云在线《人工智能原理》单元测试考核答案
- ktv食品安全管理制度
- YY∕T 0868-2021 神经和肌肉刺激器用电极(高清正版)
- (高清版)JGJ340-2015建筑地基检测技术规范
- 无线电调试工中级考试试卷试题库
评论
0/150
提交评论