第5章循环结构--2010.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
例7:国王的许诺 相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。 这位聪明的宰相指着8×8共64格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第一个格子中放1粒,第2格中放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上的64个格子,我就感恩不尽了。 舍罕王让人扛来一袋麦子,他要兑现他的许诺。 国王能兑现他的许诺吗?试编程计算舍罕王共要多少麦子赏赐他的宰相,这些麦子合多少立方米? (已知1立方米麦子约1.42e8粒) 总粒数为:sum=1+2+22+23+…+263 例7方法1 #define CONST 1.42e8 #include stdio.h #include math.h int main( ) { int n; double term, sum = 0; /*累加求和变量赋初值*/ for (n=1; n=64; n++) { term = pow(2, n-1); /*根据累加项的规律计算累加项 */ sum = sum + term; /*作累加运算*/ } printf(sum = %e\n, sum); /*打印总麦粒数*/ printf(volum = %e\n, sum/CONST);/*折合总麦粒体积数*/ return 0; } 例7方法2 #define CONST 1.42e8 #include stdio.h int main( ) { int n; double term = 1, sum = 1; /*累乘求积累加求和变量赋初值*/ for (n=2; n=64; n++) { term = term * 2; /*根据后项总是前项的2倍计算累加项*/ sum = sum + term; /*作累加运算*/ } printf(sum = %e\n, sum); /*打印总麦粒数*/ printf(volum = %e\n, sum/CONST);/*折合总麦粒体积数*/ return 0; } 例8最大公约数和最小公倍数 要求:输入两个正整数m和n,求其最大公约数和最小公倍数。 算法一:欧几里德算法: 首先,任意输入两个数m,n,其次,使k为m除以n的余数,如果m能被n整除,则k值为0,n为这两个数的最大公约数,否则,用k代替n,n代替m,重复以上过程,直到k值为0。n就是最大公约数,而最小公倍数则为输入的两个数的乘积除以最大公约数。 算法一的程序 #include stdio.h int main() { int m,n,k,t; scanf(%d%d,m,n); k=m%n; t=m*n; while(k!=0) { m=n; n=k; k=m%n; } printf(最大公约数是:%d\n,n); printf(最小公倍数是:%d\n,t/n); return 0; } 算法二:按性质直接求: m和n的最大公约数k,也就是能同时整除m和n的最大整数。若mn,则k最大可取到n。根据这一原理,设k的初值为n,检查m和n是否能同时被k整除,若是,则k就是最大公约数,否则k减1,继续检查;直到找到一个能同时整除m和n的k或者k变为1。同样最小公倍数也可用类似方法求。最小公倍数b是指能同时被m和n整除的最小整数,若mn,则b的初值是m,检查b是否能同时被m和n整除,若是则找到最小公倍数;否则b加1,继续检查,直到找到能同时被m和n整除的b,这样的b肯定存在,最坏情况是b=m*n。 算法二 #include stdio.h int main() { int m,n,i,t; scanf(%d%d,m,n); if(mn) { t=m; m=n; n=t; } for(i=n;i=1;i--) if(m%i==0 n%i==0) break; printf(最大公约数是:%d\n,i); for(i=m;i=m*n;i++) if(i%m==0 i%n==0) break; printf(最小公倍数是:%d\n,i); return 0; } * 思考题 先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,且结束游戏,否则计算机给出提示,告诉人所猜的数是太大还是太小,最

文档评论(0)

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

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

1亿VIP精品文档

相关文档