c语言程序设计与循环结构相关的经典算法之一

上传人:tian****1990 文档编号:74711143 上传时间:2019-01-29 格式:PPT 页数:17 大小:229.45KB
返回 下载 相关 举报
c语言程序设计与循环结构相关的经典算法之一_第1页
第1页 / 共17页
c语言程序设计与循环结构相关的经典算法之一_第2页
第2页 / 共17页
c语言程序设计与循环结构相关的经典算法之一_第3页
第3页 / 共17页
c语言程序设计与循环结构相关的经典算法之一_第4页
第4页 / 共17页
c语言程序设计与循环结构相关的经典算法之一_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《c语言程序设计与循环结构相关的经典算法之一》由会员分享,可在线阅读,更多相关《c语言程序设计与循环结构相关的经典算法之一(17页珍藏版)》请在金锄头文库上搜索。

1、第七讲 循环结构的经典算法之一 程序设计举例,教 学目 的 : 1、灵活运用循环语句 2、编写一些基本算法程序 教学重点和难点: 重点:判断素数,求最大公约数、最小公倍数, 几何图形的输出,数列的部分和。 难点:循环的嵌套,程序设计举例,一. 循环语句的选择 while语句、do-while语句用于条件循环, for语句用于计数循环。while语句、for语句是先判断循环条件, 后执行循环体, 如果循环的条件一开始就不成立, 循环一次都不执行。do -while语句是先执行循环体, 后判断循环条件, 循环至少执行一次。 知道循环的次数选用for语句实现循环; 不知道循环的次数选用while语句

2、、do-while语句实现循环; 保证循环至少执行一次, 选用do-while语句实现循环。,(1) while语句的for语句形式: for(; 条件表达式; )语句 (2) do-while语句for语句形式: 语句 for(; 条件表达式; )语句 (3) for语句的while语句形式: 表达式1; while(条件表达式2) 语句 表达式3; ,程序设计举例,for语句更简单、灵活,二. 循环条件的设计 从循环条件与退出循环的条件正反两方面加以综合考虑。有些问题循环条件是隐含的, 甚至需要人为地去构造。 通常将一些非处理范围的数据, 一般是一些特殊的数据作为循环条件构造的基础, 这样

3、构造的条件称为“伪条件”。 例如:求一些数的和是一个累加问题, 需要循环完成, 但循环条件并没给出。我们可用一个很小的数,比如-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*

4、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被其中一个数除尽,

5、 则m不是素数,否则m是素数。,5.6 循环应用举例,#include main() int i,m; scanf(“%d“, ,【例2】判断m是否为素数。 【参考例5-9】( P67 ) 【算法二】当m较大时,除的次数会很多, 可以用2,3,m/2去除,也可以用2,3, 去除,若除不尽,则m是素数。(教材上的算法),5.6 循环应用举例,#include #include main() int m,i, k; scanf(“%d“, ,sqrt(m):平方根后的值是double型, 这里会先转换为int型,再赋值给k,注意:此for语句的循环体为空语句。,思考:运算符的优先级,#includ

6、e main() 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) 问题

7、原型:从前有一对长寿兔子,兔子在出生两个月后,就有繁殖能力,从出生后第3个月每个月都生一对兔子。新生的小兔子长到第3个月每个月又都生一对兔子,这样一代一代生下去,假设所有兔子都不死,求兔子增长数量的数列(即每个月的兔子总对数)。,Fibonacci(斐波纳契数列)定义: a0=0 a1=1 a2=a0+a1=1 a3=a1+a2=2 a4=a2+a3=3 an=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;k=20;k+) if(k%5=0) pr

8、intf(“n“); a2=a0+a1; printf(“%6d“,a2); a0=a1; a1=a2; ,5.6 循环应用举例,【例5】编写程序,计算下面数列的部分和S,在求和过程中, 当S0.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 循环应用举例类似问题,#

9、include main() 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 #incl

10、ude 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; /*符号位

11、*/ 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整除的整数的平方根的和,保留3位小数。,#include #include main() int i; double sum=0; for(i=2000;i=9000;i+) if(i%3=0 ,课堂小结,1、循环实现几何图形的输出; 2、常用算法的思想如:判断素数,求最大公约数、最小公倍数。 3、会求数列的部分和; 4、 注意循环嵌套的层次。,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号