循环嵌套.ppt
《循环嵌套.ppt》由会员分享,可在线阅读,更多相关《循环嵌套.ppt(18页珍藏版)》请在冰点文库上搜索。
![循环嵌套.ppt](https://file1.bingdoc.com/fileroot1/2023-5/7/28eff0da-6694-4198-a601-afba07df6496/28eff0da-6694-4198-a601-afba07df64961.gif)
一个循环体内又包含另外一个循环结构,称循环嵌套。
三种循环可互相嵌套,
(1)while()while().,
(2)dodowhile();.while();,(3)while()dowhile();.,(4)for(;)dowhile();while().,内循环不能相互交叉禁止:
1.从外层跳入内层2.跳入同层的另一循环3.向上跳转,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,程序分析:
输出第一行:
输出第二行:
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;为第二项变量,修改程序:
main()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);,i,j,例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),Main()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语句之外的任何其它语句之中,例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,continue语句功能:
结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断仅用于循环语句中,例求输入的十个整数中正数的个数及其平均值,/*ch5_12.c*/#includemain()inti,num=0,a;floatsum=0;for(i=0;i10;i+)scanf(%d,程序举例,分子:
1,-1,1,-1分母:
1,3,5,7,.,例求Fibonacci数列:
1,1,2,3,5,8,的前40个数,例判断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,本次计算的结果是以上一次或上几次计算的结果为条件,而每次进行计算的步骤和公式都是一样的。
例:
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的变化规律。
fib=fib1+fib2;/*计算本次的fib*/fib1=fib2;/*这两行是在为计算下一项fib作必要的准备*/fib2=fib;,返回,