循环嵌套.ppt

上传人:b****2 文档编号:2646140 上传时间:2022-11-05 格式:PPT 页数:18 大小:243.50KB
下载 相关 举报
循环嵌套.ppt_第1页
第1页 / 共18页
循环嵌套.ppt_第2页
第2页 / 共18页
循环嵌套.ppt_第3页
第3页 / 共18页
循环嵌套.ppt_第4页
第4页 / 共18页
循环嵌套.ppt_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

循环嵌套.ppt

《循环嵌套.ppt》由会员分享,可在线阅读,更多相关《循环嵌套.ppt(18页珍藏版)》请在冰豆网上搜索。

循环嵌套.ppt

v一个循环体内又包含另外一个循环结构,称循环嵌套。

v三种循环可互相嵌套

(1)while()while().

(2)dodowhile();.while();(3)while()dowhile();.(4)for(;)dowhile();while().内循环外循环内循环v内循环不能相互交叉禁止:

l1.从外层跳入内层l2.跳入同层的另一循环l3.向上跳转5.4循环的嵌套按以下格式打印九九表:

按以下格式打印九九表:

1*1=1,1*2=2,1*3=3,1*9=92*1=2,2*2=4,2*3=6,2*9=189*1=9,9*2=18,9*3=27,9*9=81程序分析:

输出第一行:

i=1to9输出1*i,输出第二行:

i=1to9输出2*i,inti;for(i=1;i=9;i+)printf(“1*%d=%d,”,i,1*i);for(j=1;j=9;j+)printf(“2*%d=%d,”,j,1*i);观察一行,每式的第一项为常数,第二项为变量观察九行,每式的第一项也是变量,但是,只在换行时改变一次。

设:

i=1,2,39;为第一项变量设:

j=1,2,39;为第二项变量,修改程序:

i=1,to9j=1,to9j%9=0tf换行输出i*jmain()inti,j;For(i=1;i10;i+)For(j=1;j10;j+)If(j%9=0)Printf(“n”);elseprintf(“%d*%d=%d”,i,j,i*j);ij例1:

例2:

36块砖,块砖,36人搬,男搬人搬,男搬4,女搬,女搬3,两个小孩抬一块,要求一次搬,两个小孩抬一块,要求一次搬完,问:

需要男、女、小孩各多完,问:

需要男、女、小孩各多少人?

少人?

分析:

分析:

男人(男人(m)可能是)可能是18人,人,女人(女人(w)可能是可能是111人,小孩人,小孩(c)可能是可能是254人,人,用循环语句全部列举所有的可用循环语句全部列举所有的可能,再用下列方程进行筛选,能,再用下列方程进行筛选,符合条件的即为一组解符合条件的即为一组解m+w+c=36

(1)4*m+3*w+c*0.5=36

(2)m=1to8w=1to11C=1to54

(1)=

(2)tf输出m,w,cMain()intm,w,c;for(m=1;m=8;m+)for(w=1;w=11;w+)for(c=2;c=54;c+)if(m+w+c)=(4*m+3*w+c*0.5)printf(“m=%d,w=%d,c=%d);辅助控制语句break语句功能:

在循环语句和switch语句中,终止并跳出循环体或开关体说明:

break只能终止并跳出最近一层的结构break不能用于循环语句和switch语句之外的任何其它语句之中exprbreak;假(0)真(非0)whiledobreak;.expr假(0)真(非0)whileexpr2break;.假(0)真(非0)forexpr1expr3switchexpr语句组1break;语句组2break;语句组nbreak;语句组break;.const1const2constndefaultcase例break举例:

输出圆面积,面积大于100时停止#definePI3.14159main()intr;floatarea;for(r=1;r100)break;printf(r=%d,area=%.2fn,r,area);例break举例:

小写字母转换成大写字母,直至输入非字母字符#includemain()inti,j;charc;while

(1)c=getchar();if(c=a&c=z)putchar(c-a+A);elsebreak;continue语句v功能:

结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断v仅用于循环语句中exprcontinue;假(0)真(非0)while真(非0)docontinue;.expr假(0)whileexpr2continue;.假(0)真(非0)forexpr1expr3例求输入的十个整数中正数的个数及其平均值/*ch5_12.c*/#includemain()inti,num=0,a;floatsum=0;for(i=0;i10;i+)scanf(%d,&a);if(a=0)continue;num+;sum+=a;printf(%dplusintegerssum:

%6.0fn,num,sum);printf(Meanvalue:

%6.2fn,sum/num);程序举例t=1,pi=0,n=1.0,s=1当|t|1e-6pi=pi+tn=n+2s=-st=s/npi=pi*4输出pi分子:

1,-1,1,-1分母:

1,3,5,7,.例求Fibonacci数列:

1,1,2,3,5,8,的前40个数f1=1,f2=1fori=1to20输出f1,f2f1=f1+f2f2=f2+f11534233159710946750255142293524578241578171855377258417711121393832040570288739088169213896104181286571964181346269922746563245986321144987676546368317811217830914930352102334155例判断m是否素数读入mk=mi=2当ikm被i整除真假用break结束循环i=i+1ik+1真假输出:

m”是素数”输出:

m”不是素数”例译密码例如Hello,world!

译成密码:

Lipps,asvph!

3.4循环型程序设计划3.4.1穷举和迭代

(一)穷举一)穷举意义:

列出问题的全部可能解,每列出一组解意义:

列出问题的全部可能解,每列出一组解,测试一组,将符合测试条件测试一组,将符合测试条件的解保存下来或打印出来。

的解保存下来或打印出来。

例例3.1036块砖,块砖,36人搬,男搬人搬,男搬4,女搬,女搬3,两个小孩抬一块,要求一次,两个小孩抬一块,要求一次搬完,问:

需要男、女、小孩各多少人?

搬完,问:

需要男、女、小孩各多少人?

分析:

男人数分析:

男人数men可能是可能是09人,女人数人,女人数women可能是可能是012人,小孩人数人,小孩人数chilen可能是可能是052人,将所有的解用循环语句全部列举出来的同时,再一个人,将所有的解用循环语句全部列举出来的同时,再一个一个进行筛选,将符合筛选条件(一个进行筛选,将符合筛选条件(men+women+children=36&4*men+3*men+children/2.0=36.0)的结果打印出来,程序源代码如的结果打印出来,程序源代码如(310.c)所示:

所示:

注意:

程序中没有列出注意:

程序中没有列出10*13*19这么多种可能的解法,而只列出了这么多种可能的解法,而只列出了10*13可可能的解法,因为能的解法,因为men和和women的的个数确定之后,个数确定之后,childen的个数也确定了。

的个数也确定了。

一般的:

采用穷举法时循环语句体中常常用一般的:

采用穷举法时循环语句体中常常用if结构从全部可能的解中筛选出结构从全部可能的解中筛选出正确的解来。

正确的解来。

返回返回穷举应用程序举例main()intmen=0,women,children;while(men8)women=0;while(women=11)children=36-women-men;if(4.0*men+3.0*women+children/2=36&!

(children%2)printf(nmenis%d,men);printf(twomenis%d,women);printf(tchildrenis%dn,children);women+;men+;本次计算的结果是以上一次或上几次计算的结果为条件,而每次进行本次计算的结果是以上一次或上几次计算的结果为条件,而每次进行计算的步骤和公式都是一样的。

计算的步骤和公式都是一样的。

例:

例:

3.11若今年的人口总数为若今年的人口总数为n亿,今后每年按亿,今后每年按2%的增长率增加,的增长率增加,问十年后总人口数应是多少?

问十年后总人口数应是多少?

分析:

人口的基数是:

分析:

人口的基数是:

n=12亿。

亿。

过一年后的人口总数是:

过一年后的人口总数是:

nn*(1+0.2)。

过二年后的人口总数是:

过二年后的人口总数是:

n=n*(1+0.2)。

过十年后的人口总数还是按过十年后的人口总数还是按n=n*(1+0.2)这个公式来计算。

这个公式来计算。

综上:

计算这个问题就是把综上:

计算这个问题就是把n*(1+0.2)反复计算十次,即总是把上一次计算出反复计算十次,即总是把上一次计算出来的人口总数来的人口总数n的的1.02倍作为本次计算的人口总数倍作为本次计算的人口总数n。

这与初等数学中计数数这与初等数学中计数数列问题的递推方法是基本相同的,只是书写方式不同而已。

源代码见(列问题的递推方法是基本相同的,只是书写方式不同而已。

源代码见(311.c)例例3.12有一个数列为:

,有一个数列为:

,这这个数列是有名的个数列是有名的Fibnacci数列,问这个数列的第数列,问这个数列的第n-项是多少。

项是多少。

分析:

这个数列的特点是:

从第三项始,总是等于前两项之和。

分析:

这个数列的特点是:

从第三项始,总是等于前两项之和。

迭代:

从第三项开始:

设前两项为从第三项开始:

设前两项为fib1,fib2,本项为本项为fib,则有通式:

则有通式:

fib=fib1+fib2;按循环的特点(每次计算按循环的特点(每次计算fibr的公式应一样)故对于本题来说,的公式应一样)故对于本题来说,应用应用c代码写出代码写出计算下次的计算下次的fib时与本次计算时与本次计算fib时的时的fib1和和fib2的的变化规律。

变化规律。

本次fib1fib2fib下次fib1fib2fibfib=fib1+fib2;/*计算本次的计算本次的fib*/fib1=fib2;/*这两行是在为计算下一项这两行是在为计算下一项fib作必要的准备作必要的准备*/fib2=fib;返回返回

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1