网站大量收购闲置独家精品文档,联系QQ:2885784924

lh-05 循环结构程序设计.ppt

  1. 1、本文档共52页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
lh-05循环结构程序设计要点

例如,艰难旅程(浮点误差)。乌龟要去环球。第1秒爬1米,第2秒爬1/2米,第3秒爬1/3米,第4秒爬1/4米,…。问一小时能爬出多远?爬20米需多少秒? #include stdio.h #include stdlib.h int main(){ long i=1; double x = 0.0, a=0.0; for (x=10.0; x20.0; x+=1.0) { for(; ax; i++) a += 1.0/i; printf(%ld s, %lf m \n, i-1, a); } return 0; } 很快就输出: 12367s, 10.000043m 33617s, 11.000018m 91380s, 12.000003m 248397s, 13.000001m 675214s, 14.000001m 1835421s, 15.000000m 4989191s, 16.000000m, 17.000000m, 18.000000m 100210581s, 19.000000m 272400600s, 20.000000m 将上面代码中的float改为double,20亿秒时还增长,输出: 2000000000s, 21.993629m 经过大约63年半,乌龟爬了近22米。在大约2亿5千万秒(约8年)爬过了20米,这是题目第二部分的答案。 由于long为32位表示,在此范围内没找到用double类型的增长结束点。但一定比用float大得多。 特殊情况中浮点误差积累可能更迅速。有两个重要情况: 将一批小的数加到很大的数上,会导致丢掉小的数的重要部分,甚至小数整个被丢掉(例中情况) 两个值接近的数相减,可能导致精度大大下降 百钱百鸡问题 中国古代数学家张丘建在他的《算经》中曾提出著名的“百钱百鸡问题”,其题目如下: 鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何? 百钱百鸡问题 解:设i、j、k分别代表公鸡、母鸡、小鸡的数量,根据题意列方程: 根据题意可知,i、j、k的范围一定是0到100的正整数,那么,最简单的解题方法是:穷举i、j、k每一种可能的取值组合,直接代入方程组,若满足该方程组则是一组解。这样即可得到问题的全部解。 百钱百鸡问题 i ← 0 i 20? 买母鸡和 小鸡 N Y 开始 结束 i ← i + 1 Y N j 34? j ← j + 1 j ← 0 买小鸡 Y N k 100? k ← k + 1 k ← 0 将i、j、k的值代入 i+j+k和i+3j+k/3, 若都为100,则是一种买法 i = 0; while (i 20 ) { i++; } { int i, j, k; /*i、j、k分别表示公鸡、母鸡和小鸡的数目*/ } j = 0; while (j 34) { j++; } k = 0; while ( k 100) { if ( i + j + k == 100 i*5 + j*3 + k/3 == 100) printf(%d %d %d\n,i,j,k); k++; } 百钱百鸡问题(while) 输出: 0 25 75 3 20 77 4 18 78 7 13 80 8 11 81 11 6 83 12 4 84 for(i = 0; i 20; i++ ) { /*设定公鸡的数目*/ } int main( ) { int i, j, k; /*i、j、k分别表示公鸡、母鸡和小鸡的数目*/ return 0; } for(j = 0; j 34; j++) { /*设定母鸡的数目*/ } for(k = 0; k 100; k++) { /*设定小鸡的数目*/ if ( i + j + k == 100 i*15 + j*9 + k == 300) printf(%d %d %d\n,i,j,k); } 百钱百鸡问题(for) 输出: 0 25 75 4 18 78 8 11 81 12 4 84 for(i = 0; i 20; i++ ) { /*设定公鸡的数目*/ } int main( ) {

文档评论(0)

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

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

1亿VIP精品文档

相关文档