第4章循环结构程序设计2.ppt

上传人:豆**** 文档编号:60590913 上传时间:2022-11-17 格式:PPT 页数:52 大小:487.50KB
返回 下载 相关 举报
第4章循环结构程序设计2.ppt_第1页
第1页 / 共52页
第4章循环结构程序设计2.ppt_第2页
第2页 / 共52页
点击查看更多>>
资源描述

《第4章循环结构程序设计2.ppt》由会员分享,可在线阅读,更多相关《第4章循环结构程序设计2.ppt(52页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第4章循环结构程序设计2 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望1.break1.break语句语句breakbreak语句和语句和continuecontinue(1)(1)语句形式语句形式:break;break;(2)(2)作用作用:结束结束breakbreak所在的所在的 switch switch语句。语句。结束当前循环,跳出结束当前循环,跳出breakbreak所在的循所在的循 环结构。环结构。【例例7:7:】求求300300以以内内能能被被1

2、717整整除除的的最最大大的的数。数。找到满足条件的最找到满足条件的最大数,结束循环大数,结束循环#include stdio.hvoid main()int x;for(x=300;x=17;x-)if(x%17=0)break;printf(x=%dn,x);【例【例8 8】求求300300以内能被以内能被1717整除的所有整整除的所有整数。数。#include stdio.hvoid main()int x;for(x=1;x=300;x+)if(x%17!=0)continue;printf(%dt,x);while(x=300)if(x%17!=0)x+;continue;print

3、f(%dt,x);x+;(1 1)语句形式)语句形式:continue;(2 2)语句作用)语句作用:结束结束本次循环本次循环。2 2、continuecontinue 语句语句(3 3)语句执行流程)语句执行流程:continue continue语句可以结束本次循环,即不再执语句可以结束本次循环,即不再执行循环体中行循环体中continue continue 语句之后的语句,语句之后的语句,转入转入下一次循环条件的判断与执行。下一次循环条件的判断与执行。#include stdio.hvoid main()int a,b;for(a=1,b=1;a=10)break;if(b%3=1)b+

4、=3;continue;printf(%dn,a);【练习:】【练习:】分析以下程序的运行结果。分析以下程序的运行结果。程序运行结果:程序运行结果:4 4 循环程序设计循环程序设计(循环嵌套循环嵌套)n 例例7 7:打印如下所示等腰三角形:打印如下所示等腰三角形()()*循环程序设计循环程序设计(循环嵌套循环嵌套)*例例8:8:如何打印:如何打印:*NEXTNEXTNEXTNEXT 在循环体语句中又包含有另一个完整的循在循环体语句中又包含有另一个完整的循环结构的形式,称为环结构的形式,称为循环的嵌套循环的嵌套。如果内。如果内部的循环体中又有嵌套的循环语句,则构部的循环体中又有嵌套的循环语句,则

5、构成多重循环。成多重循环。while while、do-whiledo-while、forfor三种循环都可以互相三种循环都可以互相嵌套。嵌套。循环嵌套循环嵌套循环语句之间的关系循环语句之间的关系for(.).for(.).并列循环并列循环for(.)for(.).for(.)for(.).内内循循环环外外循循环环嵌套循环嵌套循环菱形图案程序如下:#include stdio.hvoid main()int i,j,k;for(j=1;j=5;j+)/上三角上三角 for(k=1;k=5-j;k+)printf();for(i=1;i=0;j-)/下三角下三角 for(k=1;k=4-j;k+

6、)printf();for(i=1;i=2*j+1;i+)printf(*);printf(n);循环嵌套循环嵌套n n枚举或穷举算法枚举或穷举算法:按问题本身的性质,一一按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否是问题的真的过程中,检验每个可能解是否是问题的真正解,若是,我们采纳这个解,否则抛弃它。正解,若是,我们采纳这个解,否则抛弃它。对于所列举的值,既不能遗漏也不能重复。对于所列举的值,既不能遗漏也不能重复。循环嵌套循环嵌套n例例9 9:百钱买百鸡。(鸡翁一值钱五,鸡:百钱买百鸡。(鸡翁一值钱五,鸡母一值

7、钱母一值钱3 3,鸡雏三值钱一。百钱买百鸡,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?问鸡翁、鸡母、鸡雏各几何?Cocks+hens+chicks=100;Cocks+hens+chicks=100;5*cocks+3*hens+chicks/3=100;5*cocks+3*hens+chicks/3=100;Cocks:1-20;Cocks:1-20;Hens:1-33;Hens:1-33;Chicks:3,6,9Chicks:3,6,9.99;.99;Cocks hens chicks1198297336621233979665201233#include stdio.hvoid

8、 main()int x,y,z;for(x=1;x=20;x+)for(y=1;y=33;y+)z=100-x-y;if(5*x+3*y+z/3=100)&z%3=0)printf(“cock:%d,hens:%d,chicks:%dn,x,y,z);循环嵌套循环嵌套n例例10 10、搬砖问题:、搬砖问题:3636块砖,块砖,3636人搬,男搬人搬,男搬4 4,女搬,女搬3 3,两个小孩抬一块砖。要求一次全搬,两个小孩抬一块砖。要求一次全搬完,问男、女、小孩各若干?完,问男、女、小孩各若干?n解:据题意:解:据题意:menmen的值:的值:1919womenwomen的值:的值:112112

9、childrenchildren的值:的值:36-men-women36-men-women教材例教材例4-174-17(P86P86)采用对个位、十位、百位)采用对个位、十位、百位进行穷举的方法输出所有水仙花数。进行穷举的方法输出所有水仙花数。循环程序设计循环程序设计n使用枚举法,主要掌握两条原则:使用枚举法,主要掌握两条原则:1 1、确定搜索范围。、确定搜索范围。2 2、选择搜索策略。、选择搜索策略。搜索策略选择得好坏,直接决定程序的搜索策略选择得好坏,直接决定程序的工作量的大小。工作量的大小。循环程序设计循环程序设计请思考下面程序的功能,并思考怎样改变搜索策略或搜索范围,请思考下面程序的

10、功能,并思考怎样改变搜索策略或搜索范围,可以提高程序的效率。可以提高程序的效率。void main()int m,n,i;m=7;n=5;i=1;do if(i%m=0)if(i%n=0)printf(“%dn”,i);break;i+;while(i!=0);例例10:求最小公倍数:求最小公倍数#include void main()int x,y,z,t;printf(Please input x,y:);scanf(%d%d,&x,&y);if(xy)t=x;x=y;y=t;for(z=x;z=x*y;z+=x)if(z%y=0)break;printf(%dn,z);for(z=x;z

11、%y!=0;z+=x);void main()int m,n,i;m=7;n=5;i=7;do if(i%n=0)printf(“%dn”,i);break;i=i+7;while(i=m*n);枚举法求枚举法求2个整数的最大公约数个整数的最大公约数#include void main()int x,y,z,t;printf(Please input x,y:);scanf(%d%d,&x,&y);if(x=1;z-)if(y%z=0&x%z=0)break;printf(%dn,z);例例11 判断判断m是否素数。是否素数。算法:算法:素数:除了素数:除了1和自身外不能被其他数整除。和自身外

12、不能被其他数整除。判断方法:测试判断方法:测试m能否被能否被2到到根号根号m整除。整除。数学上已经证明:只要数学上已经证明:只要m不被不被2到根号到根号m之间的数之间的数整除,它就是素数。整除,它就是素数。根号根号m的计算方法:利用求平方根的函数的计算方法:利用求平方根的函数sqrt循环程序设计循环程序设计循环变量循环变量:定义为:定义为i(整型)(整型)循环变量的范围循环变量的范围:2k,k=sqrt(m)(k为整型)为整型)即:即:i的初值为的初值为2,循环执行条件为,循环执行条件为i=k循环变量的变化循环变量的变化:i+重复执行的操作重复执行的操作:如果如果m能被能被i整除,则说明整除,

13、则说明m不是素数,也就不需不是素数,也就不需要进行后面的判断,应退出循环结构(用要进行后面的判断,应退出循环结构(用break语语句);否则,继续判断。句);否则,继续判断。结果的输出结果的输出:如果循环是中途退出的,则如果循环是中途退出的,则i=k,输出,输出m不是素不是素数;否则,数;否则,m是一个素数。是一个素数。例例11 程序程序#include#include void main()int i,m,k;scanf(%d,&m);k=(int)sqrt(m);for(i=2;i=k;i+)if(m%i=0)break;if(i=k)printf(%d不是一个素数不是一个素数n,m);e

14、lseprintf(%d是一个素数是一个素数n,m);#include#includevoid main()int i,m,k,flag;flag=1;scanf(%d,&m);k=(int)sqrt(m);for(i=2;i=k;i+)if(m%i=0)flag=0;break;if(flag=1)printf(%d是一个素数是一个素数n,m);else printf(%d不是一个素数不是一个素数n,m);输出输出100以内的所有素数(以内的所有素数(5个一行输出)个一行输出)#include#includevoid main()int i,k,m,n;n=0;for(m=2;m=100;m

15、+)k=(int)sqrt(m);for(i=2;ik)/是素数是素数 printf(%5d,m);n+;if(n%5=0)printf(n);循环程序设计循环程序设计 算法算法2 2:迭代。:迭代。不断用新值取代变量的旧值或由旧值递推出不断用新值取代变量的旧值或由旧值递推出变量的新值的过程。变量的新值的过程。分析:设现有人口数为分析:设现有人口数为M M,则第一年后人口变为:,则第一年后人口变为:M=M*M=M*(1+0.021+0.02),第二年后,把上述赋值表达式),第二年后,把上述赋值表达式再执行一次,要计算再执行一次,要计算1010年后的人口,就是把上述年后的人口,就是把上述表达式执

16、行表达式执行1010次。可以用循环来实现。次。可以用循环来实现。例如:人口增长问题:例如:人口增长问题:现有现有1212亿人,按年亿人,按年2%2%的增长速度,的增长速度,1010年后将年后将有多少人?有多少人?循环程序设计循环程序设计迭代与下列因素有关:迭代与下列因素有关:初值初值;迭代公式;迭代公式;迭代次数迭代次数例例12 12:兔子繁殖问题:兔子繁殖问题:设有一对新生兔子,从第三个月开始每个月都生一对设有一对新生兔子,从第三个月开始每个月都生一对兔子,按此规律,并假设没有兔子死亡,一年后共有兔子,按此规律,并假设没有兔子死亡,一年后共有多少兔子?多少兔子?(请写出每月兔子对数,找出规律

17、)请写出每月兔子对数,找出规律)每月兔子呈如下规律:每月兔子呈如下规律:1 1,1 1,2 2,3 3,5 5,8 8,1313,2121,3434找出迭代规律找出迭代规律:f f1 1=f=f2 2=1;=1;f f3 3=f=f1 1+f+f2 2;f;f4 4=f=f2 2+f+f3 3;f fn+1n+1=f=fn n+f+fn-1n-1程序代码如下:程序代码如下:#include stdio.hvoid main()int i,f1,f2,f3;f1=f2=1;for(i=3;i=12;i+)f3=f1+f2;printf(%6d,f3);f1=f2;/用新值取代旧值用新值取代旧值

18、f2=f3;/用新值取代旧值用新值取代旧值 循环程序设计循环程序设计例例13 13 求求2 2个非负整数的最大公约数。个非负整数的最大公约数。u=55 v=15r=u%v=10u=15v=10r=u%v=5u=10v=5r=u%v=0u=5v=0(终止终止)求求2 2个非负整数的最大公约数程序代码。个非负整数的最大公约数程序代码。#include stdio.hvoid main()int u,v,r;scanf(%d%d,&u,&v);r=v;while(r!=0)r=u%v;u=v;v=r;printf(%dn,u);例例1414猴子吃桃子问题猴子吃桃子问题(递推法递推法)(教材(教材P9

19、9-14)#include void main()int x,y,i;/i表示天数,表示天数,y表示某天,表示某天,x表示其前一天表示其前一天y=1;/第第10天的桃子数天的桃子数for(i=9;i=1;i-)x=2*(y+1);/计算前一天的桃子数计算前一天的桃子数 y=x;printf(%d,x);x=2*(x+1)例例15:有一分数序列:有一分数序列 、,从第,从第2项项开始,每一项的分子为前一项的分子与分母之和,开始,每一项的分子为前一项的分子与分母之和,每一项的分母为前一项的分子,编程求这个数列每一项的分母为前一项的分子,编程求这个数列的前的前n 项之和。项之和。编程思路:编程思路:

20、该程序需要用到递推算法,根据序列的第该程序需要用到递推算法,根据序列的第1 1项推项推出第出第2 2项,再根据第项,再根据第2 2项推出第项推出第3 3项,项,。#include void main()int a=2,b=1,t,i,n;double sum=0.0;printf(请输入请输入n:);scanf(%d,&n);for(i=1;i=n;i+)sum=sum+1.0*a/b;t=a;a=a+b;/下一项分子的值下一项分子的值b=t;/下一项分母的值下一项分母的值printf(sum=%fn,sum);例例15:输出所有水仙花数。所谓水仙花数是指一个输出所有水仙花数。所谓水仙花数是指

21、一个3位数,其各位数字的立方和等于该数本身。例:位数,其各位数字的立方和等于该数本身。例:15313+53+33 (枚举法枚举法)编程思路:编程思路:(1)(搜索范围搜索范围)循环变量的初值:循环变量的初值:m=100 循环条件:循环条件:m=999 循环变量的增量:循环变量的增量:m+(2)(搜索策略)(搜索策略)循环体:判断循环体:判断m是否是水仙花数,是否是水仙花数,是,则输出该数。是,则输出该数。枚举法的其他应用示例枚举法的其他应用示例程序代码如下:程序代码如下:#include void main()int m,bai,shi,ge;/bai、shi、ge分别对应百位、十位和个位分别

22、对应百位、十位和个位 for(m=100;m=999;m+)bai=m/100;shi=m/10%10;ge=m%10;if(m=bai*bai*bai+shi*shi*shi+ge*ge*ge)printf(%d,m);程序运行结果如下:程序运行结果如下:153 370 371 407例例16:已知:已知abc+cba=1333;其中其中a、b、c均为一位数,编程求均为一位数,编程求出满足条件的出满足条件的a,b,c的所有组合。的所有组合。【解析】可以用三重循环【解析】可以用三重循环穷举穷举所有的解所有的解。程序代码如下:#include void main()int a,b,c;for(a

23、=1;a=9;a+)for(b=0;b=9;b+)for(c=0;c=9;c+)/把 abc cba 连接起来变成整数判断 if(a*100+b*10+c)+(c*100+b*10+a)=1333)printf(a=%d,b=%d,c=%dn,a,b,c);例例17.完数,即完美数,一个数如果恰好等于除它本身外的完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如因子之和,这个数就称为完数。例如6=123(6的因子是的因子是1,2,3),6即完数。试求即完数。试求1000内所有完数并输出。内所有完数并输出。程序代码如下:程序代码如下:#include void mai

24、n()int j,i /i表示要判断的数,表示要判断的数,j表示表示i的因子的因子 int s;for(i=1;i=1000;i+)s=0;/对某个数进行测试前先将和置对某个数进行测试前先将和置0 for(j=1;ji;j+)/j表示因子表示因子 if(i%j=0)s=s+j;if(s=i)printf(%d是完数是完数n,i);在学生信息管理系统的设计中有许多需要重复处理的问题。在学生信息管理系统的设计中有许多需要重复处理的问题。例如:例如:向系统添加向系统添加100100个学生的成绩;个学生的成绩;统计统计100100个学生中个学生中C C语言成绩不及格的学生人数;语言成绩不及格的学生人数

25、;对对100100个学生某门课程的成绩进行排序等。个学生某门课程的成绩进行排序等。要处理上述问题,最简明的方式是采用循环结构。要处理上述问题,最简明的方式是采用循环结构。4.7案例分析与实现案例分析与实现本章小结本章小结主要内容总结如下:(1)循环语句包括两部分:循环控制条件和循环体。(2)循环语句有三种:for语句、while语句和do-while语句。它们的应用场合如下:循环次数事先明确的,一般使用for语句;循环次数不明确的,一般使用while语句或do-while语句。(3)break语句用来提前终止循环,跳出循环体;continue语句用来提前结束本次循环,进入下一次循环。(4)三种

26、循环语句可以互相嵌套,构成多重循环。例例18输入一行字符,分别统计出其中英文字母、空输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。格、数字和其它字符的个数。程序代码如下:程序代码如下:#include void main()char c;int letters=0,space=0,digit=0,others=0;printf(please input some charactersn);while(c=getchar()!=n)if(c=a&c=A&c=0&c=9)digit+;else others+;printf(“char=%d space=%d digit=%d

27、others=%dn”,letters,space,digit,others);1.下面有关for循环的正确描述是()A)for循环只能用于循环次数已经确定的情况B)for循环是先执行循环体语句,后判断表达式 C)在for循环中,不能用break语句跳出循环体D)for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来答案答案D2.对for(表达式1;表达式3)可理解为()A)for(表达式1;0;表达式3);B)for(表达式1;1;表达式3);C)for(表达式1;表达式1;表达式3);D)for(表达式1;表达式3;表达式3);答案答案B3.下面程序的运行结果是#include

28、main()int y=10;doy-;while(-y);printf(%dn,y-);A)-1 B)1 C)8 D)0答案答案D4.下面程序段的运行结果是for(y=1;y10;)y=(x=3*y,x+1),x-1);printf(x=%d,y=%d,x,y);A)x=27,y=27 B)x=12,y=13C)x=15,y=14 D)x=y=27答案答案C5.语句while(!E);中的表达式!E等价于_A)E=0 B)E!=1 C)E!=0 D)E=1答案答案A6.下面程序的运行结果是#include main()int a=1,b=10;do b-=a;a+;while(b-0);pr

29、intf(a=%d,b=%dn,a,b);A)a=3,b=11 B)a=2,b=8 C)a=1,b=-1 D)a=4,b=9答案答案B7.以下程序段_x=-1;dox=x*x;while(!x);A)是死循环 B)循环执行二次C)循环执行一次 D)有语法错误答案答案C8.有以下程序#include main()int i,j=4;for(i=j;i=2*j;i+)switch(i/j)case 0:case 1:printf(*);break;case 2:printf(#);程序的运行结果是(*#)9.以下程序的输出结果是()main()int i;for(i=1;i6;i+)if(i%2)

30、printf(#);continue;printf(*);printf(n);A)#*#*#B)#C)*D)*#*#*【答案】【答案】A10.请读程序#include main()int num=0;while(num=2)num+;printf(%dn,num);上面程序的输出结果是A)1 B)1 C)1 D)1 2 2 2 3 3 4【答案】【答案】B11.执行for(m=1;m+5;);后,变量m的值为()A)5B)6C)7D)8【答案】【答案】B12.以下程序的输出结果是()。void main()int s,i;for(s=0,i=1;i3;i+,s+=i);/交换最后2个表达式结果

31、如何printf(%dn,s);A)0B)3C)5D)6【答案】【答案】C13.有以下程序,其输出为()#include void main()int n=2,k=0;while(k+&n+2);printf(“%d%dn”,k,n);A)0 2 B)1 3C)5 7 D)1 2【答案答案】D单元测试单元测试1 1、指出下列程序的运行结果、指出下列程序的运行结果 ch6_dycs1.c ch6_dycs1.cmain()int x=1,i=1;for(;x=10)break;if(x%2!=0)x+=3;continue;x-=1;printf(“%dn”,x);printf(“%dn”,i);下面的程序是利用下面的程序是利用T=R(1+R)N(1+R)N1的公式,并以的公式,并以N为为变量求一系列变量求一系列T值,值,N是整数,从是整数,从1取到取到K,R为常数,将下为常数,将下列程序填完全。列程序填完全。s*(1+r);(r*s)/(s-1);(n=k);#include#define k 10main()int n=1;float r=2.5,s=1.0,t;do s=t=printf(N=%d,T=%fn,n,t);+n;while

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com