已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11讲,break语句和continue语句 循环结构程序举例。,5.6 break语句和continue语句,为了使循环控制更加灵活,语言还提供了break语句和continue语句。 break语句在循环控制中的作用是强行结束该语句所在的整个循环结构,转向执行循环体语句后的下一条语句。 continue语句的作用是提前结束多次循环中的某一次循环,即跳过循环体语句中位于continue语句之后的其余语句,从而进入下一次循环。,1. break语句,在第四章中已经介绍过,用break语句可以使流程跳出由switch语句构成的多分支结构。 当break语句用在do-while、for或while循环语句中时, 也可以使程序终止循环,跳出循环结构。通常break语句总是与if语句配合使用,即当满足某个给定的条件要求时便跳出循环。,例5.6 在循环体中使用break语句。,main() int i, s; s=0; for(i=1; i5) break; printf(“s=%dn“, s); ,程序的输出结果如下: s=1 s=3,注意 只能在do-while、for、while循环语句或switch语句体内使用break语句,其作用是使程序提前终止它所在的语句结构,转去执行下一条语句;若程序中有上述四种结构语句的嵌套使用,则break语句只能终止它所在的最内层的语句结构。,2. continue语句,例5.7 在循环体中使用continue语句。 main() int i, s=0; for(i=1; i=8; i+) s= s+i; printf(“ni=%d “, i); if(i%2=0) continue; printf(“s=%dn“, s); ,continue语句只能在do-while、for和while循环语句中使用,其作用是提前结束多次循环中的某一次循环。,运行结果: i=1 s=1 i=2 i=3 s=6 i=4 i=5 s=15 i=6 i=7 s=28 i=8,在执行的8次循环中,当i的值为偶数时,执行continue语句,其作用是跳过printf(“s=%dn”, s); 语句,继续执行下一次循环。,5.7 选择结构程序举例,许多实际应用的程序都要用到循环处理,在学习了本章的基本内容之后,我们在这里着重介绍两个最基本、最常用的循环处理算法-穷举法和递推法。 1. 穷举法 “穷举法”也称为“枚举法”或“试凑法”, 即采用循环结构将所有可能出现的情况一一进行测试,判断是否满足给定的条件。,例5.8 求n!。即计算123n的值。,程序如下: main() int i, n; long s=1; printf(“Enter n: “); scanf(“%d“, ,运行结果如下: Enter n: 6 6!=720,分析:把每一个参与乘积的数用循环变量一一列举出来,并相乘。,题目:从键盘输入全班的学习成绩,统计出最高分、最低分和平均分。 分析:由于不知道学生人数,程序中用一个负数来作为结束输入成绩的标志。,例5.9 极值问题,main() int x, max, min, n; float sum=0; printf(“Enter x(-1 to end): “); scanf(“%d“, ,运行结果如下: Enter x(-1 to end): 87 76 53 99 58 -1 max=99, min=53, aver=74.599998,例5.10素数问题,程序如下: main() int m, i, flag; printf(“Enter a integer : “); scanf(“%d“, ,素数是一个大于2,且只能被1和它自己整除的整数。试编程求输入的某个正整数是否为素数。若是,输出YES,若不是,输出NO。 分析:判别某数m是否为素数的最简单方法是:穷举出所有可能的除数2、3、4、一直到m-1,分别判定m能否被它们整除,只要有一个能整除,m就不是素数;只有全部都不能整除时,m才是素数。,运行结果如下: Enter a integer : 157 157: YES! 实际上只要试除到m/2或sqrt(m)就足够了。,例5.11 百钱买百鸡问题,“鸡翁一,值钱三;鸡母一,值钱五;鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”。 分析:设鸡翁x只、鸡母y只、鸡雏z只。解题的思路是:鸡翁数x的值可能是0,33中的任何一个值;鸡母数y的值可能是0,20中的任何一个值;将所有可能出现的情况都一一进行测试,若满足要求就把这种情况输出,作为可能的一个解。,main() int x, y, z; for(x=0; x=33; x+) for (y=0; y=20; y+) z=100-x-y; if(x*3.0+y*5.0+z/3.0=100.0) printf(“x=%d, y=%d, z=%dn“, x, y, z); ,该程序能从七百多种可能的组合情况中挑选出四种满足要求的答案。运行结果如下: x=4, y=12, z=84 x=11, y=8, z=81 x=18, y=4, z=78 x=25, y=0, z=75,例5.12 长材料截取短料的最优化方法,题目: 有一根长度为323米的钢材料,要将它截取成两种规格a、b的长度分别为17米和27米的短料, 每种至少1段, 问分隔成a, b各多少段后,剩余的残料 r 最少? 分析: 规格a的钢材料的个数na可能为: 1、2、3、(321-27)/17。,main( ) int na, nb, a, b, r, rmin; na=1; nb=1; rmin=323-17-27; for (na=1; na=(323-27)/17; na+) nb=(323-na*17)/27; r =323-na*17-nb*27; if (r rmin) rmin=r; a=na; b=nb; printf(“a=%d, b=%d, min=%dn“, a, b, rmin ); ,运行结果如下: a=11, b=5, min=1,2. 递推法,“递推法”又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。,例5.13猴子吃桃问题:小猴在某天摘桃若干个,当天吃掉一半,觉得还不过瘾,又多吃了一个。第二天吃了剩下的桃子的一半又多一个;以后每天都这样吃下去,直到第8天要吃时只剩下一个桃子了,问小猴子第一天共摘下了多少个桃子? 分析:这是一个“递推”问题,先从最后一天的桃子数推出倒数第二天的桃子数,再从倒数第二天的桃子数推出倒数第三天的桃子数。设第n天的桃子为xn,那么它是前一天的桃子数的xn-1 的一半减1,递推公式为:xn=xn-1/2 1 。即: xn-1 =( xn+1)2。,例5.13猴子吃桃问题的程序,main() int tao,n; tao=1; /*已知第8天的桃子数*/ for (n=7;n=1;n=n-1) tao=(tao+1)*2; printf(“tao(1)=%dn“,tao); 程序执行后输出结果如下: tao(1)=382,例5.14 斐波那契数列:1,1,2,3,5,8,此数列的第一项和第二项为1,从第三项开始,每一项的值是前两项的值之和;编程输出该数列的前15项。每行输出5个数。 分析:斐波那契数列的递推公式为:fn=fn-1+fn-2,用第1项和第2项的值求出第3项的值以后,再用第2项和第3项的值求出第4项的值,,main() int i, f1=1, f2=1, f3; printf(“n%5d%5d“,f1,f2); for(i=3; i=15; i+ ) f3=f1+f2; printf(“%5d“,f3); if(i%5=0) printf(“n“); f1=f2; f2=f3; ,程序执行后输出结果如下: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610,例5.15 求pi的近似值,分析: 本题的递推公式比上面的两个例子复杂,只能将分子和分母分别递推出新的值后再做除法运算。其递推方法和求解的步骤如下: 1. 分母n的初值为1,递推公式:n=n+2; 2. 分子s的初值为1.0,递推公式:s=(-1)*s; 3. 公式中某项的值为: t=s/n。 从以上求pi的公式来看,不能决定n的最终值应该是多少;但可以用最后一项t=s/n的绝对值小于0.0001来作为循环的结束条件。,题目: 用公式 pi/4=1-1/3+1/5-1/7 求pi的近似值,直到最后一项的绝对值小于10-4为止。,#include “math.h“ main( ) int n; float t, s, pi; pi=0; /*变量pi用来存放累加和*/ n=1; /*第一项的分母值为1*/ s=1.0; /*第一项的分子值为+1*/ t= s/n; /*先求出第一项的值*/ while (fabs(t)=0.0001) pi=pi+t; n+=2; s= -1* s; t= s/n; /*递推出下一项的值*/ printf(“pi=%fn“, pi*4) ; ,程序执行后输出以下结果。 pi=3.141397,pi/4=1-1/3+1/5-1/7+1/9,分析:求最大公约数的迭代步骤如下: (1) 输入两个正整 数m,n; (2) 用m除以n得到 一个余数r ; (3) 若r=0,则n为最大公约数,程序结束;否则用n取代m,用r取代n,转去执行第(2)步。,例5.16 求两个正整数的最大公约数,程序如下: main( ) int m, n, r ; printf(“Enter m, n: “); scanf(“%d,%d“, ,程序执行后输出结果如下: Enter m,n:14,8 gcd=2,分析:两个数的最大公约数肯定不会比其中的小者大。,用穷举法求最大公约数,main( ) int m, n, r ; printf(“Enter m, n: “); scanf(“%d,%d“, ,例5.17 高次方程求根。,本例介绍其中较简单的二分法, 其递推方法如下: (1) 输入两个点的x坐标值a,b, 使f(a)* f(b)0,即确保在区间a,b内有一根。 (2) 求区间a,b的中点c= (a+b)/2。 (3) 计算f(c)的值,若该值小于给定的精度要求,则 c为求 得的近似根,程序结束;否则执行步骤(4)。 (4) 若f(a)与f(c)同号,则a,c无根,用c代替a;否则c,b 无根,用c代替b;使求根区间缩小一半,并重复上述 步骤(2)(4),直到求出近似根为止。,#include “mat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工业智能工厂安全认证合同协议
- 2025年工业园区废气排放控制合同协议
- 2025年《证券投资分析》考前强化练习试题库500题(含答案)
- 2025泰安公务员真题及答案
- 风化砂岩地层长螺旋钻机钻孔可行性研究报告
- 2025年药典知识考试题及答案
- 稷山县农业农村局关于进一步加强高标准农田项目建设质量的管理办法
- 2025年医院门诊年终总结(二篇)
- 2025学年日照市高三语文上学期期中校际联考试卷附答案解析
- 年产xxx中档圈项目可行性分析报告
- 大学写作十五讲 课件 第9-15讲 学术论文写作-AI赋能学术写作
- 护士面试自我介绍【合集11篇】
- 人工智能原理MOOC习题集及标准答案-北京大学-王文敏
- 青少年普法知识竞赛试题及答案大全
- 中国红十字会总会卫生网络管理系统开发及系统集成项目技术方案
- mdvx节能证书及第三方检测报告cqc
- GB/T 17671-2021水泥胶砂强度检验方法(ISO法)
- 中国烟草视觉识别系统培训课件
- 万人计划蓝色简约万人计划青年拔尖人才答辩PPT模板
- 《梅岭三章》 完整版课件
- (新版)老年照护考试题库(含答案)
评论
0/150
提交评论