《循环结构算法一.ppt》由会员分享,可在线阅读,更多相关《循环结构算法一.ppt(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第七讲第七讲 循环结构的经典算法之一循环结构的经典算法之一 程序设计举例程序设计举例 教教学目学目的的:1、灵活运用循环语句、灵活运用循环语句2、编写一些基本算法程序、编写一些基本算法程序教学重点和难点:教学重点和难点:重点:判断素数,求最大公约数、最小公倍数,重点:判断素数,求最大公约数、最小公倍数,几何图形的输出,数列的部分和。几何图形的输出,数列的部分和。难点:循环的嵌套难点:循环的嵌套 循环语句复习循环语句复习 while语语句句、do-while语语句句用用于于条条件件循循环环,for语语句句用用于于计计数数循循环环。while语语句句、for语语句句是是先先判判断断循循环环条条件件
2、,后后执执行行循循环环体体,如如果果循循环环的的条条件件一一开开始始就就不不成成立立,循循环环一一次次都都不不执执行行。do-while语句是先执行循环体语句是先执行循环体,后判断循环条件后判断循环条件,循环至少执行一次。循环至少执行一次。知知道道循循环环的的次次数数选选用用for语语句句实实现现循循环环;不不知知道道循循环环的的次次数数选选用用while语语句句、do-while语语句句实实现现循循环环;保保证证循循环环至至少少执执行行一一次次,选用选用do-while语句实现循环。语句实现循环。程序设计举例程序设计举例注意:注意:循环体外的语句不要放至循环体中循环体外的语句不要放至循环体中
3、,循环体中的语句不要放至循环体外。循环体中的语句不要放至循环体外。【例【例1】、】、几何图形的输出:几何图形的输出:(用循环结构实现。用循环结构实现。)上部共6行11列其中第0行第 10列为*,其余为空格第1行第8.10列为*,其余为空格第2行第6.10列为*,其余为空格第3行第4.10列为*,其余为空格第4行第2.10列为*,其余为空格第5行第0.10列为*,其余为空格下部共5行11列其中第0行第2.10列为*,其余为空格第1行第4.10列为*,其余为空格第2行第6.10列为*,其余为空格第3行第8.10列为*,其余为空格第4行第 10列为*,其余为空格j与i的关系:j=10|j=10-2*
4、ij与i的关系:j=10|j=2*(i+1)#include main()int i,j;for(i=0;i=5;i+)printf(n);/*每输完一行换行每输完一行换行*/for(j=0;j=10;j+)if(j=10-2*i|j=10)printf(*);else printf();for(i=0;i=4;i+)printf(n);for(j=0;j=10;j+)if(j=2*(i+1)|j=10)printf(*);else printf();printf(n);【例【例2】判断】判断m是否为素数。是否为素数。所谓素数,是指大于素数,是指大于1的整数,并且除了的整数,并且除了1和它和它
5、本身之外不能被任何整数所整除。本身之外不能被任何整数所整除。【算法】【算法】用用2,3,4,5m-1逐个去除逐个去除m,若,若m被其中被其中一个整数,则一个整数,则m不是素数,否则不是素数,否则m是素数。而数学上是素数。而数学上已证明对于自然数已证明对于自然数m只需用只需用2,3,的整的整数去除数去除,若均不能整除,则若均不能整除,则m是素数。是素数。【例【例【例【例2 2】判断】判断】判断】判断mm是否为素数。是否为素数。是否为素数。是否为素数。#include#includemain()int m,i;double k;scanf(%d,&m);k=sqrt(m);for(i=2;i k)
6、printf(%d 是一个素数!是一个素数!n,m);elseprintf(%d 不是一个素数!不是一个素数!n,m);相当于for(i=2;in)求m与n的最小公倍数:for(i=m;i+)if(i%m=0&i%n=0)break;printf(“最小公倍数是:%d”,i);求m与n的最大公约数:for(i=n;i-)if(m%i=0&n%i=0)break;printf(最大公约数是:%d,i);【例【例3】求两个整数】求两个整数m和和n的最小公倍数,最大公约数。的最小公倍数,最大公约数。法二、辗转相除法:先用m除以n求得余数r,当r0时,再用除数做被除数,余数做除数再求余数,如此反复,直
7、至r0时,除数即为所求的最大公约数。p(=m*n)除以最大公约数即为m和n的最小公倍数while(n!=0)r=m%n;m=n;n=r;/*这时m即为最大公约数*/#includemain()int p,r,n,m;printf(请输入两个正整数请输入两个正整数:n);scanf(%d,%d,&n,&m);p=n*m;if(nm)temp=n;n=m;m=temp;while(n!=0)r=m%n;m=n;n=r;printf(最大公约数是最大公约数是%dn最小公倍数是最小公倍数是%dn,m,p/m);【例【例3】求整数】求整数m和和n的最小公倍数,最大公约数。的最小公倍数,最大公约数。【例【
8、例4】Fibonacci(斐波纳契数列)的计算方法(斐波纳契数列)的计算方法问题原型:问题原型:从前有一对长寿兔子,从出生后第从前有一对长寿兔子,从出生后第3个月起每个月都生一对个月起每个月都生一对兔子。新生的小兔子长到第兔子。新生的小兔子长到第3个月后每个月又都生一对兔子,这个月后每个月又都生一对兔子,这样一代一代生下去,假设所有兔子都不死,求兔子增长数量的数样一代一代生下去,假设所有兔子都不死,求兔子增长数量的数列(即每个月的兔子总对数)。列(即每个月的兔子总对数)。第几个第几个月月小兔子小兔子对对数数中兔子中兔子对对数数老兔子老兔子对对数数兔子兔子总总对对数数00000110012010
9、131012411135212563238#include main()int a1,a2,a3,k;a1=1;a2=1;printf(%6d%6d,a1,a2);for(k=3;k2)辗转法也称辗转法也称迭代法迭代法,是一种不断用变量的旧值递推新值的过程。,是一种不断用变量的旧值递推新值的过程。与例与例4 4类似的例子:猴子吃桃类似的例子:猴子吃桃猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天猴子又将剩下的桃子吃掉一半,又多吃一个。以后每天都吃掉前一第二天猴子又将剩下的桃子吃掉一半,又多吃一个。以后每天都吃掉
10、前一天剩下的一半零一个。到第天剩下的一半零一个。到第10天再想吃时,发现只剩下一个桃子。问猴子天再想吃时,发现只剩下一个桃子。问猴子第一天共摘了多少桃子。第一天共摘了多少桃子。a1a2a3a4a5a6a7a8a9a101a9=2(a10+1)4a8=2(a9+1)10a7=2(a8+1)22a6=2(a7+1)46a5=2(a6+1)94a4=2(a5+1)190a3=2(a4+1)382a2=2(a3+1)766a1=2(a2+1)1534【例【例5】编写程序】编写程序,计算并输出下列数列的和计算并输出下列数列的和,当某项当某项(即即(-1)(n-1)/(2*n+1),该项不参与求和该项不参
11、与求和)的绝对值小于的绝对值小于0.001时求和终止并输时求和终止并输出计算结果出计算结果,要求结果保留要求结果保留3位小数。位小数。1,-1/3,1/5,-1/7,1/9,(-1)(n-1)/(2*n-1)(其中其中,表示幂运算表示幂运算)#include#include main()int sign=1,n;double sum=1,j=1;for(n=2;n+)sign=sign*(-1);j=sign*1/(2*n-1);if(fabs(j)0.001)break;sum=sum+j;printf(%.3f,sum);课堂小结课堂小结1、循环实现几何图形的输出、循环实现几何图形的输出;2、常用算法的思想如:判断素数,求最大公约数、最小公倍数。、常用算法的思想如:判断素数,求最大公约数、最小公倍数。3、会求数列的部分和;、会求数列的部分和;4、注意循环嵌套的层次。注意循环嵌套的层次。
限制150内