基本控制结构程序设计算法.pptVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基本控制结构程序设计算法

C++程序设计(第2版) 第2章 基本控制结构程序设计-算法 4.4.2. 迭代算法 1020年罗马数学家fibonacci(裴波那切)提出了一个计算兔子繁殖问题:假定一对兔子每个月可以生出一对小兔子,小兔子从第三个月开始都生一对兔子,按此规律,并假设没有兔子死亡,问一年后共有多少兔子? 例: 用迭代法求x= sqrt(a)的近似值。 例: 输入一行字符,并按输入的顺序依次输出该行字符。 例: 打印一张下三角形的九九表。 例: 求2~300之间的所有素数。 例: 随机数的应用。 * * 生医学院06级C++程序设计 copyright: 柏毅 版本号:V2006.10-07.01 在循环算法中,枚举和迭代是两类具有代表性的基本算法。 4.4.1.枚举算法 枚举又称为穷举,它的基本思想是,对问题的所有状态逐一测试,直到找到解或将全部可能状态都测试过为止。 迭代又称为递推,它的基本思想是不断的用变量的新值取代变量的旧值,或由旧值递推出新值的过程。 4.4 算法---枚举和迭代 我国古代的百鸡问题: 用100元买100只鸡,公鸡5元一只,母鸡3元一只,而小鸡一元三只,问可以有几种买法。 这个问题用数学语言来描述,就是一个求解不定方程组的问题。 x+y+z = 100 5x+3y+z/3=100 遵循枚举算法的思想,将公鸡、母鸡和小鸡用三个变量表示,用三层循环构成这三个变量的值在100以内的各种组合,判断每一种组合是否满足条件,这样程序要进行一百万次的判断。通过加入人的智慧可以大大减少判断次数,增加几个限定条件: 1.cock的范围为20; 2.hen的范围为33; 3.chick的范围最多为100只鸡;4.chick = 100 – cock – hen; #includeiostream.h #includeiomanip.h void main(void) { int cock, hen, chick; for(cock=0; cock=20; cock++) { for(hen = 0; hen =33; hen++) { chicks = 100 – cock – hen; if(cock + hen + chick == 100 5.0*cock + 3.0*hen + chick/3.0 == 100.0) coutsetw(5)cocksetw(5)hensetw(5)chick’\n’; } } return; } 其中*表示有误差。例如:3, 20, 77组中,77/3是非整数结果,由于执行的是整数除法,因此程序自动取整,结果为77/3 = 25; 注意:条件 (5.0*cock + 3.0*hen + chick/3.0 == 100.0) 一定要用float形式,若改用整形,将会出现如下的错误结果: 0, 25, 75 *3, 20, 77 4, 18, 78 *7, 13, 80 8, 11, 81 *11, 6, 83 12, 4, 84 分析:第一个月有一对兔子,第二个月仍然只有一对兔子,第三个月由于第一个月的兔子已能生育,因此有2对兔子,按此规律,组成如下数列: 21 13 8 5 3 2 1 1 当月对数 8 5 3 2 1 1 ? ? 新生对数 13 8 5 3 2 1 1 1 前月对数 八 七 六 五 四 三 二 一 月份 用数学语言可以描述为: fib1 = fib2 = 1; (1) fibn = fibn-1 + fibn-2; (2) 其中(1)为初始条件;(2)称为迭代公式; 这个数列的特点是:从第三个月开始,以后每个月兔子数都是前两个月的数之和,这就是著名的裴波那切数列。 用C++语法可描述为: fib = fib1 + fib2; 其中fib:表示当月总数; fib2 = fib1; fib1:表示前一个月的总数 fib1 = fib; fib2:表示前二个月的总数 #includeiostream.h void main(void) { int n, m; long int fib, fib1, fib2; fib1=fib2=1; cout“Enter a number: “; cinn; coutfib1‘\t’fib2‘\t’; for(m=3; m=n; m++) { fib = fib1 + fib2; fib2 = fib1; fib1 = fib; cou

文档评论(0)

wuyoujun92 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档