李晶第3章控制结构.ppt

  1. 1、本文档共91页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图3.17 “判断素数”的PAD图 n2 i=2 in i++ 返回 FALSE prime(int n) n%i==0 返回 FALSE 返回 TRUE 【说明】 ① 构造一个函数prime,其函数值是逻辑值,真(非0)或假(0),用整数类型. ② 如果在主函数中直接判断,还需要判断“所有的i都不能除尽n”; ③ 有了判断一个整数是否为素数的函数,就可以输出任何一个区间的素数,例如,输出2~1000的素数 ; 【例3-10】四人中有一人做了好事,有下面一段对话,已知有三个人说了真话,判断是谁做的好事: A:不是我; B:是C; C:是D; D:他胡说。 【分析】 本问题在例3-3中已经讲过。但当时重复用到了多个几乎一样的语句。本例用循环去穷举“做好事的人”。 变量thisman从A ~ D逐个去检验四句话,某个x使得“真话”刚好3句,这个thisman就是说真话的人。 【说明】 ① 穷举是程序设计的好办法,利用了计算机运算速度快的特点。 ② 本程序把(thisman ==D) + (thisman != D)看成恒等于1。 【例3-11】假设银行整存整取存款不同期限的月息利率分别为: ① 一年期月息利率:0.63%; ② 二年期月息利率:0.66%; ③ 三年期月息利率:0.69%; ④ 五年期月息利率:0.75%; ⑤ 八年期月息利率:0.84%. 利息=本金×月息利率× 12 ×存款年限。 现在有1000元钱,请设计一种存钱方案,使得钱存入银行20年后得到的利息最多。 【分析】 存20年有很多种存法。假设存a个一年期、b个二年期、c个三年期、d个五年期、e个八年期,那么a+2b+3c+5d+8e应该等于20. 满足这个条件的方案有100多种。 例如某一种方案为:存2个一年期、5个二年期、1个三年期、1个五年期、0个八年期,利息3368.34,其计算过程为: ① 本金为1000,存1个一年期后,本息=1000+1000*0.0063*12 =1000*(1+0.0063*12) = 1075.60;再存下一个一年期,其本金应该是1075.60,本息=1075.60*(1+0.0063*12) = 1000*(1+0.0063*12)2 =1156.92。 ② 本金为1156.92,存5个两年期后,本息=1156.92*(1+0.0066*12*2)5=2413.22。 ③ 本金为2413.22,存1个三年期后,本息=2413.22*(1+0.0069*12*3)= 3012.66。 ④ 本金为3012.66,存1个五年期后,本息=3012.66*(1+0.0075*12*5)= 4368.34。 扣除原始本金1000,20年后获得利息3368.34。 定义函数Pow计算以利息m存n个y年期的本息,其PAD图描述如图3.18所示: 图3.18 “计算以利息m存n个y年期的本息”的PAD图 i=0 in i++ s*=x Pow(int y, double m, int n) x=1+m*12*y, s=1 返回 s 这种方案计算本息的式子:1000*(1+0.0063*12)2*(1+0.0066*12*2)5*(1+0.0069*12*3) *(1+0.0075*12*5)。 存a个一年期、b个二年期、c个三年期、d个五年期、e个八年期的计算利息应该为: 1000*((1+0.0063*12)a*(1+0.0066*12*2)b*(1+0.0069*12*3)c*(1+0.0075*12*5)d*(1+0.0075*12*5)e-1) 只要穷举a,b,c,d,e的各种可能的方案,都可以计算得到每一种方案的利息,由这些利息可能找到最大的利息。最大利息的变量的初值越小越好,甚至设为负数。 但很明显,a的取值范围为0~20, b的取值范围为0~10, c的取值范围为0~6, d的取值范围为0~4, e的取值范围为0~2。 分两块实现:首先找到最大利息max,再输出能得到最大利息的方案,因为在求max的时候没有保存取得最大值的那种方案(注意:取得最大值的方案可能不只一种)。 a+2*b+3*c +5*d+8*e ==20 a=0 a=20 a++ b=0 b=10 b++ c=0 c=6 c++ d=0 d=4 d++ e=0 e=2 e++ p = X*Pow(1, 0.0063, a) p *= Pow(2, 0.0066, b) p *= Pow(3, 0.0069, c) p *= Pow(5, 0.0075, d) p *= Pow(8, 0.0084, e) (p -= X) max max=p a+2*b+3*c +5*d

文档评论(0)

junjun37473 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档