《第五讲循环结构程序设计优秀课件.ppt》由会员分享,可在线阅读,更多相关《第五讲循环结构程序设计优秀课件.ppt(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第五讲循环结构程序第五讲循环结构程序设计设计第1页,本讲稿共31页1、输出、输出1个个#。2、在一行中输出、在一行中输出30个个#。如下问题编程怎样解决?如下问题编程怎样解决?4、输出、输出30行行#,每行,每行30个。个。3、输出、输出30行行#,每行,每行1个。个。第2页,本讲稿共31页什么是循环什么是循环l生活中的循环生活中的循环打印打印50份试卷份试卷10000米赛跑米赛跑旋转的车轮旋转的车轮循环结构的特点循环结构的特点循环结构循环结构循环条件循环条件循环操作循环操作锲而不舍地学习锲而不舍地学习第3页,本讲稿共31页一、while语句while语句的一般形式为:语句的一般形式为:whi
2、le(表达式表达式)语句语句其中表达式是循环条件其中表达式是循环条件;语句为循环体语句为循环体,当需当需要执行多条语句时用复合语句。要执行多条语句时用复合语句。lwhile语句的语义是:语句的语义是:计算表达式的值,当值为真计算表达式的值,当值为真(非非0)时,时,执执行循环体语句。行循环体语句。在在C语语言中如何言中如何实现实现循循环环第4页,本讲稿共31页 while(表达式表达式)语句流程图语句流程图第5页,本讲稿共31页程序实战程序实战l输出输出1到到10十个整数,每个一行。十个整数,每个一行。i=1;while(i=10)printf(“%dn”,i);i+;第6页,本讲稿共31页#
3、includevoidmain()inti=1,sum=0;while(i=100)sum=sum+i;i+;printf(%dn,sum);分析分析:基本操作基本操作:加法加法 变化变化:加数每次数加数每次数值都增加值都增加1例例1求求第7页,本讲稿共31页第8页,本讲稿共31页例1 求#includemain()inti,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%dn,sum);注意注意:(1)循环体如果包含一个以上的语)循环体如果包含一个以上的语句,应该用花括弧括起来,以复合句,应该用花括弧括起来,以复合语句形式出现。语句形式出现。(2)在循环
4、体中应有)在循环体中应有使循环趋向使循环趋向于结束的语句于结束的语句。如,。如,i+;请思考请思考:1、循环结束后、循环结束后,i的值是多少的值是多少?2、循环体中两条语句是否可以、循环体中两条语句是否可以交换次序交换次序第9页,本讲稿共31页二、二、do-while语句语句do-while语句的一般形式为语句的一般形式为:do语句语句while(表达式表达式);l这个循环与这个循环与while循环的不同在于循环的不同在于:它它先先执执行行循循环环中中的的语语句句,然然后后再再判判断断表表达达式式是是否否为为真真,如如果果为为真真则则继继续续循循环环;如如果果为为假假,则则终终止止循循环环。因
5、因此此,do-while循循环环至至少少要执行一次循环体要执行一次循环体。第10页,本讲稿共31页 do语句语句while(表达式表达式);第11页,本讲稿共31页#includemain()inti=1,sum=0;dosum=sum+i;i+;while(i=100);printf(%dn,sum);第12页,本讲稿共31页第13页,本讲稿共31页inti=1,sum=0;dosum+=i;i+;while(i=100);printf(%d,sum);inti=1,sum=0;while(i=100)sum+=i;i+;printf(%d,sum);do-while与与while的对比的对
6、比第14页,本讲稿共31页intsum=0,i;scanf(“%d”,&i);while(i=10)sum=sum+i;i+;intsum=0,i;scanf(“%d”,&i);dosum=sum+i;i+;while(i=10);输入一个自然数输入一个自然数,求从该自然数到求从该自然数到10的和的和。第15页,本讲稿共31页三、三、for语句语句#includemain()inti,sum=0;for(i=1;i=100;i+)sum=sum+i;printf(%dn,sum);inti,sum=0;i=1;while(i=100)sum=sum+i;i+;for(循环变量赋初值;循环条件;
7、循环变量改变循环变量赋初值;循环条件;循环变量改变)循环体循环体第16页,本讲稿共31页for循环中语句的一般形式:循环中语句的一般形式:for(表达式表达式1;表达式;表达式2;表达式;表达式3)语句语句;就是如下的while循环形式:表达式表达式1;while(表达式(表达式2)语句;语句;表达式表达式3;第17页,本讲稿共31页for(表达式表达式1;表达式;表达式2;表达式;表达式3)语句语句它的执行过程如下:1.1.先求解表达式先求解表达式1 1。2.2.求求解解表表达达式式2 2,若若其其值值为为真真(非非0 0),则则执执行行forfor语语句句中中指指定定的的语语句句,然然后后
8、执执行行下下面面第第3 3步步;若其值为假(若其值为假(0 0),则结束循环,转到第),则结束循环,转到第5 5步步。3.3.求解表达式求解表达式3 3。4.4.转回上面第转回上面第2 2步继续执行。步继续执行。5.5.循环结束,执行循环结束,执行forfor语句下面的一个语句。语句下面的一个语句。第18页,本讲稿共31页第19页,本讲稿共31页注意注意:1)for循循环环中中的的“表表达达式式1(循循环环变变量量赋赋初初值值)”、“表表达达式式2(循循环环条条件件)”和和“表表达达式式3(循循环环变变量量增量增量)”都是选择项都是选择项,即即可以缺省可以缺省,但但;不能缺省;不能缺省。2)省
9、省略略了了“表表达达式式1(循循环环变变量量赋赋初初值值)”,表表示不对循环控制变量赋初值。示不对循环控制变量赋初值。3)省省略略了了“表表达达式式2(循循环环条条件件)”,且且不不做做其其它它处处理理时便成为时便成为死循环死循环。第20页,本讲稿共31页4)省略了)省略了“表达式表达式3(循环变量增量循环变量增量)”,则不则不对循环控制变量进行操作对循环控制变量进行操作,这时可在语句这时可在语句体中加入修改循环控制变量的语句。体中加入修改循环控制变量的语句。例如:for(i=1;i=100;)sum=sum+i;i+;第21页,本讲稿共31页程程序序举举例例【例例5.1】设有一阶梯,每步跨设
10、有一阶梯,每步跨2阶,最后余阶,最后余1阶;每步阶;每步跨跨3阶,最后余阶,最后余2阶;每步跨阶;每步跨5阶,最后余阶,最后余4阶;每步跨阶;每步跨6阶,最后余阶,最后余5阶;每步跨阶;每步跨7阶,正好到阶梯顶。问最少阶,正好到阶梯顶。问最少共有多少台阶?共有多少台阶?#includemain()intstep;for(step=7;step1000;step+)if(step%2=1&step%3=2&step%5=4&step%6=5&step%7=0)break;printf(%dn,step);第22页,本讲稿共31页如果每对大兔子每月能生产一对小兔子(一雌一雄)如果每对大兔子每月能生
11、产一对小兔子(一雌一雄),而每对小兔子两个月就长大成为大兔子,即具备,而每对小兔子两个月就长大成为大兔子,即具备了繁殖能力那么由一对小兔子开始,一年后可繁了繁殖能力那么由一对小兔子开始,一年后可繁殖多少对兔子殖多少对兔子一月,只有一对小兔子。一月,只有一对小兔子。二月,仍是这对兔子,但长成了大兔子二月,仍是这对兔子,但长成了大兔子三月,大兔子生出一对小兔子,此时共有两对兔子三月,大兔子生出一对小兔子,此时共有两对兔子四月,小兔子长成大兔子,大兔子又生出一对小兔子,四月,小兔子长成大兔子,大兔子又生出一对小兔子,此时共有三对兔子此时共有三对兔子。五月,两对大兔子生出两对小兔子,小兔子长成大兔子,
12、五月,两对大兔子生出两对小兔子,小兔子长成大兔子,此时共有五对兔子此时共有五对兔子第23页,本讲稿共31页【例例5.2】求求Fibonacci数列:数列:1,1,2,3,5,8,的前的前40个数个数1534233159710946750255142293524578241578171855377258417711121393832040570288739088169213896104181286571964181346269922746563245986321144987676546368317811217830914930352102334155第24页,本讲稿共31页#includemai
13、n()intf1,f2,f3;inti;f1=1;f2=1;printf(%12d%12d,f1,f2);for(i=3;i=40;i+)f3=f1+f2;f1=f2;f2=f3;printf(%12d,f3);if(i%4=0)printf(n);第25页,本讲稿共31页#includemain()intf1,f2;inti;f1=1;f2=1;for(i=1;i=20;i+)printf(%12d%12d,f1,f2);if(i%4=0)printf(n);f1=f1+f2;f2=f2+f1;f1=1,f2=1fori=1to20输出输出f1,f2f1=f1+f2f2=f2+f1第26页,
14、本讲稿共31页【例例5.3】判断判断m是否素数是否素数#include#includemain()intm,i,k;scanf(%d,&m);k=sqrt(m);for(i=2;i=k+1)printf(%disaprimenumbern,m);elseprintf(%disnotaprimenumbern,m);读入读入mk=mi=2当当i km被被i整除整除真真假假结束循环结束循环i=i+1i k+1真真假假输出输出:m是素数是素数输出输出:m不不是素数是素数第27页,本讲稿共31页break语句lbreak语句通常用在循环语句和开关语句中。语句通常用在循环语句和开关语句中。l当当brea
15、k用于开关语句用于开关语句switch中时中时,可使程序跳出可使程序跳出switch而执行而执行switch以后的语句;以后的语句;l当当break语语句句用用于于do-while、for、while循循环环语语句句中中时时,可可使使程程序序终终止止循循环环而而执执行行循循环环后后面面的的语语句句,通通常常break语语句句总总是是与与if语语句句联联在在一一起起。即满足条件时便跳出循环。即满足条件时便跳出循环。第28页,本讲稿共31页上机题目上机题目l韩韩信信点点兵兵。相相传传韩韩信信才才智智过过人人,不不用用数数就就知知道道自自己己有有多多少少兵兵:他他先先后后让让兵兵三三人人一一排排、五
16、五人人一一排排、七七人人一一排排交交换换队队形形,他他掠掠一一眼眼队队伍伍的的排排尾尾就就 知知 道道 总总 人人 数数 了了。输输 入入 三三 个个 非非 负负 整整 数数a,b,c(a3,b5,c7),输输出出总总人人数数的的最最小小值值(或或报报告告无无解解)。已已知知总总人人数数不不小小于于10,不不超过超过100。样例输入样例输入216输出输出41样例输入样例输入213输出输出NoAnswer!第29页,本讲稿共31页上机题目上机题目l打印所有的打印所有的“水仙花数水仙花数”,所谓,所谓“水仙花数水仙花数”是是指一个三位数,其各位数字立方和等于该数本身。指一个三位数,其各位数字立方和
17、等于该数本身。例如例如153是是“水仙花数水仙花数”,因为,因为153=13+33+53。提示:首先确定水仙花数提示:首先确定水仙花数n可能存在的范围,因为可能存在的范围,因为n是是一个三位数,所以范围确定为一个三位数,所以范围确定为n从从100变化到变化到999,分离出分离出n的个位的个位i、十位、十位j、百位、百位k后,只要判断后,只要判断n是是否等于否等于i*i*i+j*j*j+k*k*k即可知即可知n是否是水仙花是否是水仙花数。分离各位数字的方法可参考例数。分离各位数字的方法可参考例4.2。第30页,本讲稿共31页上机题目上机题目l由程序随机给出由程序随机给出1-100之间的整数,用户来猜,之间的整数,用户来猜,当用户输入的数字大于所猜数时,请提示当用户输入的数字大于所猜数时,请提示“您您猜大了!请继续猜猜大了!请继续猜”;当用户输入的数字小于;当用户输入的数字小于所猜数时,请提示所猜数时,请提示“您猜小了!请继续猜您猜小了!请继续猜”;当用户输入的数字等于所猜数时,请输出当用户输入的数字等于所猜数时,请输出“恭恭喜您猜对了!喜您猜对了!”。l#includel#includesrand(unsigned)time(NULL);data=rand()%5+1;第31页,本讲稿共31页
限制150内