- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《C语言》循环型程序设计
循环型程序设计
(一)穷举
穷举是一种重复型算法。它的基本思想是,对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试过为止。
循环控制有两种办法:计数法与标志法。计数法要先确定循环次数,然后逐次测试,完成测试次数后,循环结束。标志法是达到某一目标后,使循环结束。
例1.百钱买百鸡。
公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”。鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?
main()
{ int cocks,hens,chicks;
cocks=0;
while(cocks=19)
{
hens=0;
while(hens=33)
{
chicks=100-cocks-hens;
if (5.0*cocks+3.0*hens+chicks/3.0==100.0)
printf(“%d %d %d\n”,cocks,hens,chicks);
hens=hens+1;
}
cocks=cocks+1;
}
}
例2.搬砖问题。
36块砖,36人搬;男搬4,女搬3,两个小孩抬一砖。要求一次全搬完,问男、女、小孩各若干?
例3.百马百担问题: 有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问有大、中、小马各多少?
例4.打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153=13+53+33。
例5.爱因斯坦的阶梯问题。
设有一阶梯,每步跨2阶,最后余1阶;每步跨3阶,最后余2阶;每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;每步跨3阶时,正好到阶梯顶。问共有多少阶梯。
main()
{ int ladders=7,flag=1;
while (flag)
{ if (ladders%3= =2 ladders%5= =4 ladders%6= =5)
flag=0;
else
ladders=ladders+14;
}
printf(“该阶梯共有%d阶\n”,ladders);
}
循环型程序设计
(二)迭代(递推)
迭代是一个不断有新值取代变量的旧值,或由旧值递推出变量的新值的过程。
例1.人口增长问题。
按年2%的增长速度,现有12亿人,10年后将有多少人?
分析:设现人口数为m,则第一年后人口变为:m*(1+2%) ; 第二年后,把上述赋值表达式再执行一次。要计算10年后的人口,度不是把上述表达式执行10次。
·初值; m=12
·迭代公式; m=m*(1+0.02)
·迭代次数; 10次
程序设计如下:
main()
{ float m=12;
int i;
for (i=1;i=10;i++)
m=m*(1+0.02);
printf(“10年后人口为:%f亿\n”,m);
}
例2.一球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少m?第10次反弹多高?
例3.1991年我国人口为11.3亿人,如果人口增长率为每年1.35%时,到哪年我国的人口超过13亿?
main()
{ float m=11.3;
int n=1991;
while (m=13)
{ m=m*(1+0.0135);
n=n+1; }
printf(“到%d年我国的人口超过13亿);
}
例4.有一张厚0.5毫米,面积任意大的纸,将它不断对折。问对折多少次后,其厚度可达2000米。(注意:2000米=2000000毫米,所以厚度变量应定义成long型)。
例5.求Fibonacci数列前40个数。这个数列有如下特点:第1、2两个数为1、1。从第3个数开始,该数是其前面两个数之和。即数列为:1,1,2,3,5,8,13,21,34,……
(这是意大利数学家Fibonacci曾提出的一个有趣的问题:
设有一对新生兔子,从第三个月开始它们每个月都生一对兔子。按此规律,并假设没有兔子死亡,一年后共有多少对兔子。)
分析:f1=f2=1; 1
fn=fn-1+fn-2; (n=3) 2
式1为赋初值,式2即为迭代公式。用C语言来描述式2为:
f=f1+f2;
f1=f2; /*为下一次迭代作准备*/
f2=f;
程序设计如下:
main()
{long f1=1,f2=1,f;
int i;
printf(“%ld,%ld”,f1,f2);
for (i=3;i=4
原创力文档


文档评论(0)