




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七讲 循环结构的经典算法之一 程序设计举例,教 学目 的 :1、灵活运用循环语句 2、编写一些基本算法程序 教学重点和难点:重点:判断素数,求最大公约数、最小公倍数, 几何图形的输出,数列的部分和。难点:循环的嵌套,程序设计举例,一. 循环语句的选择 while语句、do-while语句用于条件循环, for语句用于计数循环。while语句、for语句是先判断循环条件, 后执行循环体, 如果循环的条件一开始就不成立, 循环一次都不执行。do -while语句是先执行循环体, 后判断循环条件, 循环至少执行一次。 知道循环的次数选用for语句实现循环; 不知道循环的次数选用while语句、do-while语句实现循环; 保证循环至少执行一次, 选用do-while语句实现循环。,(1) while语句的for语句形式: for(; 条件表达式; )语句(2) do-while语句for语句形式: 语句 for(; 条件表达式; )语句(3) for语句的while语句形式: 表达式1; while(条件表达式2) 语句 表达式3; ,程序设计举例,for语句更简单、灵活,二. 循环条件的设计 从循环条件与退出循环的条件正反两方面加以综合考虑。有些问题循环条件是隐含的, 甚至需要人为地去构造。 通常将一些非处理范围的数据, 一般是一些特殊的数据作为循环条件构造的基础, 这样构造的条件称为“伪条件”。 例如:求一些数的和是一个累加问题, 需要循环完成, 但循环条件并没给出。我们可用一个很小的数,比如-1E20, 或一个很大的数, 比如1E20, 来构造循环条件: 数大于-1E20或数小于1E20。注意:循环体外的语句不要放至循环体中, 循环体中的语句不要放至循环体外。,程序设计举例,5.6 循环应用举例,【例1】、 几何图形的输出: 请编程输出如下的空心图形, 要求用循环结构实现。,#include main( ) int i,j; for(i=0;i=5;i+) /*前6行*/printf(n); for(j=0;j=10;j+) if( j=10-2*i |j=10) printf(*); else printf( ); for(i=0;i=4;i+) /*后5行*/printf(n); for(j=0;j=10;j+) if( j=2*(i+1) | j=10) printf(*); else printf( ); printf(n);,竖列11个*,共11行,11列i:控制行;j:控制列;,【例2】判断m是否为素数。 【参考例5-9】( P67 ) 素数是指大于1的整数,并且除了1和它本身m之外, 不能被2(m-1)之间的任何整数所整除。 【算法一】用2,3,4,5m-1逐个去除m,若m被其中一个数除尽, 则m不是素数,否则m是素数。,5.6 循环应用举例,#includemain() int i,m; scanf(%d,【例2】判断m是否为素数。 【参考例5-9】( P67 ) 【算法二】当m较大时,除的次数会很多,可以用2,3,m/2去除,也可以用2,3, 去除,若除不尽,则m是素数。(教材上的算法),5.6 循环应用举例,#include#includemain() int m,i, k; scanf(%d,sqrt(m):平方根后的值是double型, 这里会先转换为int型,再赋值给k,注意:此for语句的循环体为空语句。,思考:运算符的优先级,#includemain() int p,r, m, n,temp; printf (请输入两个正整数:n); scanf (%d,%d, ,5.6 循环应用举例,【例3】求最大公约数,最小公倍数。最小公倍数=两原数乘积除以最大公约数,用辗转相除法求最大公约数:m:存放被除数;n:存放除数;r:存放余数,r!=0时,用除数做被除数,用余数做除数再求余数,如此反复,直到r=0.除数n即为最大公约数。,使m是两个数中最大的数,求最大公约数,并赋值给n,求最小公倍数是p/n,5.6 循环应用举例,【例4】 Fibonacci(斐波纳契数列)的计算方法【参考例5-11】( P88)问题原型:从前有一对长寿兔子,兔子在出生两个月后,就有繁殖能力,从出生后第3个月每个月都生一对兔子。新生的小兔子长到第3个月每个月又都生一对兔子,这样一代一代生下去,假设所有兔子都不死,求兔子增长数量的数列(即每个月的兔子总对数)。,Fibonacci(斐波纳契数列)定义:a0=0a1=1a2=a0+a1=1a3=a1+a2=2a4=a2+a3=3an=an-2+an-1,5.6 循环应用举例,#include main() int a0,a1,a2,k; a0=0; a1=1; printf(%6d%6d,a0,a1); for(k=2;k0.235时求和终止并输出S。结果取3位小数。 1/(1*2*3),1/(2*3*4),1/(3*4*5),1/(n*(n+1)*(n+2),#include main() double s=0,j,n; for(n=1;n+) j=1/(n*(n+1)*(n+2); s=s+j; if(s0.235) break; printf(%.3lf,s); ,思考:为什么?,5.6 循环应用举例类似问题,#includemain() float s,t; int n;s=1.0;for(n=1;n=19;n+)t=1.0/(n*(n+1);s+=t;if(t1e-2)break;printf(n=%d,t=%f,sum=%fn,n,t,s);,注意:“组建”时该行会 有一个警告!请思考:为什么?,5.6 循环应用举例,【例6】编写程序,计算并输出下面数列前n项的和(设n=20,x=0.5),要求结果保留3位小数。sin(x)/x,sin(2x)/2x,sin(3x)/3x,sin(n*x)/(n*x),(其中,sin(x)为正弦函数),#include #include main()int n; double sum=0,x=0.5, j; for(n=1;n=20;n+) j=sin(n*x)/(n*x); sum=sum+j; printf(%.3fn,sum); ,5.6 循环应用举例,【例7】编写程序,计算并输出下列数列的和,当某项(即(-1)(n-1)/(2*n-1),该项不参与求和)的绝对值小于0.001时求和终止并输出计算结果,要求结果保留3位小数。1,-1/3,1/5,-1/7,1/9,(-1)(n-1)/(2*n-1)(其中,表示幂运算),#include #include main() int sign=1; /*符号位*/ double sum=1,j=1,i; for(i=2;i+) sign=sign*(-1); j=sign*1/(2*i-1); if(fabs(j)0.001) break; sum=sum+j; printf(%.3f,sum); ,5.6 循环应用举例,【例8】编写程序,计算出2000到9000之间所有能同时被 3、5和7整除的整数的平方根的和,保留
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版地铁隧道电气安装规范及安全协议
- 二零二五年度房地产交易风险评估中介服务费合同
- 2025版大型设备安装与维护合作协议范本下载
- 2025版绿色生态园区建设项目内部承包协议
- 2025承包建筑工程承包合同-智慧城市综合体建设
- 2025版城市地下停车场施工承包合同
- 2025版智能网联汽车一半股权转让与技术支持合同
- 二零二五年服装店品牌营销顾问聘用合同样本
- 2025版老年旅游合同范本贴心关怀服务保障
- 2025版建筑安装施工合同交底书范本
- 2025-2026学年高一上学期开学第一课主题班会课件
- 光储充一体化项目可行性研究报告
- 留疆战士考试题库及答案
- 2023年版下肢动脉硬化闭塞症诊治指南
- 决奈达隆在心房颤动治疗中的应用培训课件
- 涂料行业企业风险分级管控体系实施指南+生产安全事故隐患排查治理体系实施指南
- DB21T 3164-2019 辽宁省绿色建筑施工图设计审查规程
- 工伤知识培训(工伤待遇篇)课件
- 外研版八年级下册英语 module 6 测试
- 交通运输安全管理整套教学课件
- 股权质押合同工商局模板参考
评论
0/150
提交评论