




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、循环控制编程第二讲,计算s=1+1/2+1/3+1/100。,#include stdio.h main() int i=1; float sum=0; while(i=100) sum+=1.0/i; i+; printf(sum=%fn,sum); ,猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少桃子。,main() int day,x1,x2; day=9; x2=1; while(day0) x1=(x2+
2、1)*2; x2=x1; day- -; printf(the total is %dn,x1); ,/ * 程序分析:采取逆向思维的方法,从后往前推断。 */,相传古代印度国王要褒奖他的聪明能干的宰相达依尔(国际象棋发明者),问他要什么?达依尔回答:“陛下只要在国际象棋棋盘的第一个格子上放一粒麦子,第二个格子上放二粒麦子,以后每个格子的麦子数都按前一格的两倍计算。如果陛下按此法给我64格的麦子,就感激不尽,其他什么也不要了。”国王想:“这还不容易!”让人扛了一袋麦子,但很快用光了,再扛出一袋还不够,请你为国王算一下共要给达依尔多少小麦?合多少立方米?(1立方米麦子约1.42e8粒),棋盘麦子
3、问题,main()double t=1,s=1; int i; for(i=1;i=63;i+) t=t*2; s=s+t; printf(总麦粒数为:%fn,s); printf(折合体积为%f立方米n,s/1.42e8);,一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?,main() float sn=100.0,hn=sn/2; int n; for(n=2;n=10;n+) sn=sn+2*hn; /*第n次落地时共经过的距离*/ hn=hn/2; /*第n次反跳高度*/ printf(the total of
4、road is %fn,sn); printf(the tenth is %f metern,hn); ,例:(习题6.6) 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。如:153是一水仙花数,因为 153=13+53+33。,main() int i,j,k,n; for(n=100;n=999;n+) i=? j=? k=? if(i*i*i+j*j*j+k*k*k=n) printf(“n%d”,n); 通过循环列出n的所有可能的范围,i=n/100;,k=n%10;,j=n/10%10;,求10个数中的最大值。,main() int i,x
5、,max; scanf(%d, ,把100200之间的不能被3整除的数输出。,main() int n; for(n=100;n=200;n+) if(n%3=0) continue; printf(%d ,n); ,/*输出100以内既能被3又能被5整除的数*/ main() int i; for(i=0;i100;i+) if(i%3=0 ,译密码 密码规律为每个字母用其后第四个字母代替,26个字母循环排列。例如输入China,则输出Glmre。,#include stdio.h main() char c,c1; while(c=getchar()!=n) if(c=a ,ABCDEFG
6、VWXYZ,DEFGVWXYZABC,例:判断一个数m是否为素数。 main() int i,m; scanf(“%d”, ,用测试法求解,习题6.3: s=a+aa+aaa+aaaa+aaaaa 2+22+222+2222+22222 递推公式:ti= ti-1?,ti= ti-1 * 10+a,main() int i,j,a=2; float t=a,s=t; for(i=2;i=20;i+) t=t*10+a; s+=t; printf(“n s=%f”,s); ,循环的嵌套,概念:在一个循环的循环体内又包含另一个完整的循环 称为循环的嵌套。 例:打印99乘法表。 main() int
7、 i,j; for(i=1;i=9;i+) for(j=1;j=9;j+) printf(“%4d”,i*j); printf(“n”); ,外 层 循 环,内层 循环,1.三种循环可以相互嵌套; 2.请大家思考,此题用其 它两种循环怎么做?,main( ) int i, j; for( i=1; ii ) break; printf(“%3d”, i*j ); printf(“n”); ,输出三角乘法表 1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42 49 8 16 24 32 40 48 56 64
8、 9 18 27 36 45 54 63 72 81,要付19元,现有1元、2元和5元人民币10张,请问有几种付法?,分析: 假设用x张1元,y张2元,z张5元来付账,则 1x+2y+5z19 x+y+z10 其中x10,y9, z4 x、y、z取不同的值,假设得到i 种方法,要付19元,现有1元、2元和5元人民币10张,请问有几种付法?,main( ) int x,y,z,i; for(x=0,i=1;x=10;x+) for(y=0;y=9;y+) z=10-x-y; if(x+2*y+5*z=19) printf(“%d:tx=%d ty=%d tz=%dn”,i+,x,y,z); ,百
9、钱买百鸡问题。 公元前五世纪我国古代数学家张丘建在算经一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何? 若考虑用方程组: x+y+z=100 5x+3y+z/3=100 是一多解问题。,用测试法求解的程序: main() int x,y,z; for(x=1;x=100;x+) for(y=1;y=100;y+) for(z=1;z=100;z+) if(x+y+z=100 ,程序可进一步简化为: 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*
10、y+z/3.0=100) printf(“n%d,%d,%d”,x,y,z); ,用测试法求解问题的典型例子,测试法求解的程序设计有两个要点: 通过循环列出所有可能的解。 对所有列出的可能的解进行条件测试。,/*搬砖问题:男可搬4,女可搬3,先有36块砖要求一次搬完,问有几种方法,分别列出每种方法所需的男女人数。*/ main() int m,w,i=1; for(m=0;m=9;m+) for(w=0;w=12;w+) if(4*m+3*w=36) printf(n method %d: man=%d women=%dn,i+,m,w); ,main() int i,j,k,n; for(i
11、=1;i=9;i+) for(j=0;j=9;j+) for(k=0;k=9;k+) n=i*100+j*10+k; if(i*i*i+j*j*j+k*k*k=n) printf(“n%d”,n); 通过循环列出i,j,k的所有可能的范围,*问题分析与算法设计 分析题目,每个人都有可能说的是真话,也有可能说的是假话,这样就需要对每个人所说的话进行分别判断。假设三个人所说的话的真假用变量A、B、C表示,等于1表示该人说的是真话; 表示这个人说的是假话。,编程序,输出以下图形。,* * * *,一共有4 行,每行由空格和星号组成:空格数按行增加,星号按行减少 变量 i 控制输出行数, 从1变化到4
12、 变量 j 控制输出每行的空格和星号: j 从1变化到 i,每次输出一个空格 j 从1变化到 8-2*i1,每次输出一个星号,使用双重循环实现,思路:,main( ) int i,j; for (i=1; i=4; i+) for (j=1; j=i; j+) printf( ); for (j=1;j=8-(2*i-1);j+) printf(*); printf(n); ,例打印右边图形: # include main() int i, j; for (i=1 ;i=5; i+) for (j=1; j=fabs(i-3); j+) printf( “ ”); for (j=1; j=5-
13、2*fabs(i-3); j+) printf( “*”); printf( “n”); ,* * * * *,5、break语句和continue语句,break用于中断循环 例:,continue用于跳过本次循环剩下的语句 例:求1 100内的偶数和。,While(8) sum=sum+c*c; c=c+1; if ( c100 ) break; printf ( “ n% ld” , sum);,sum=0; for ( n=1; n=100; n+) if (n%2!=0) continue; sum+=n; ,注意二者 的区别!,main() int m,i,k, counter=0
14、; /*counter的作用是累计输出素数的个数*/ for (m=201 ; m= m ) /*整数i是素数:输出,计数器加1*/ printf(%6d,m); counter+; ,输出200300之间的全部素数。所谓素数n是指, 除1和n之外,不能被2(n-1)的任何整数整除。,循环结构程序设计实例:,例: 求Fibonacci数列前40项 1 (n=1或n=2) F(n)= f(n-1)+f(n-2) (n=3) 分析题目:,f(1)=1 f(2)=2 f(3)=f(2)+f(1) f(4)=f(3)+f(2) f(5)=f(4)+f(3) ,重复的操作是: 赋值操作 输出操作 变化的
15、量是: 函数的下标,设计算法:,main( ) long int f1,f2; int i; f1=1;f2=1; for(i=1;i=20;i+) printf(“%12ld%12ld”,f1,f2); if(i%2=0) printf(“n”); f1=f1+f2; f2=f2+f1; ,程序如下,例求水仙花数(条件:三位数的个、十、百位 的方和等于该数。153=13 +53 +33 )。,本题解题思路: 列举所有三位数,分别取出每个数的个、十、百位数字, 再求这三个数字的立方和,测试此和是否满足题设条件, 若是,则输出此数,若不是,则不输出。,程序如下:,main( ) int n, a, b, c; for(n=100 ; n=999 ; n+) a=n/100
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乌鲁木齐养殖转让合同标准文本
- 伙合合同标准文本
- 供销平台合同标准文本
- 使用附件合同标准文本英文
- 保安转包协议合同标准文本
- PPP项目项目合同标准文本
- 公积金代缴合同样本
- 个人检合同样本
- 公司门卫聘用合同标准文本
- 买卖商务合同样本
- 开曼群岛公司法2024版中文译本(含2024年修订主要内容)
- 放射工作人员法律法规及防护知识培训考核试题附答案
- 陕旅版四年级英语下册Unit-5-Where-Are-You-Going第2课时课件
- DB32-T 4264-2022 金属冶炼企业中频炉使用安全技术规范
- 三 年级下册音乐课件-剪羊毛|人音版(五线谱)
- 富余水深与船体下沉量的关系
- 三年级下册数学课件-4.1 整体与部分 ▏沪教版 (15张PPT)
- 爱国主义教育主题班会课件(25张PPT)
- 电气防爆施工节点做法
- 远洋航线设计、航法及气象导航
- 团结就是力量曲谱和歌词
评论
0/150
提交评论