第3讲结构化设计及C语言语句答题.ppt

  1. 1、本文档共147页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
七、循环结构的应用示例 P128 例3.18 有一对兔子,出生后第3个月起每个月都生一对兔 子。小兔子长到第3个月后每个月又生一对兔子。假设所有 兔子都不死,问40个月的兔子总数为多少? 这是著名的费波那西(Fibonacci)数列: 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , …… 该数列的特点是: f1 = 1 ,f2 = 1 , fi = fi-1 + fi-2 ( i = 3, 4, 5, …… ) 由该数列可以导出著名的 “黄金分割率” 解题思路: 是计算出该数列的第40项 …… 第2次循环 初始值: f1=1,f2=1 循环计算:f1=f1+f2,f2=f2+f1;终止条件:in/2 书中(P128)的程序,用到的 “循环不变式” 为(每次计算2项): f1 = f1 + f2; f2 = f2 + f1; 循环初始值为:f1=1,f2=1; 循环终止条件为: in/2 该不变式适合于n为偶数的情况,但当n为奇数时会出问题! 思考题: 请你模仿前面的例3.14的方法,找到关于该问题求 解的另外一个“循环不变式”吗?且可以解决奇数问题! 1 , 1 , 2 , 3 , 5 , 8 , 13 , …… f1 , f2 , f1 , f2 , f1 , f2 , f1 , …… + + + + + + ……… 第1次循环 #include stdio.h void main() { long int f1,f2; int i; f1=1; f2=1; for(i=1; i=20; i++) { printf(%12ld %12ld ,f1,f2); if(i%2==0) printf(\n); f1=f1+f2; f2=f2+f1; } } 编程小技巧1:对输出的各行数据如何控制对齐! 编程小技巧2:如何控制一行输出 N 个数据! 例 3.19 素数的判定问题 有一个整数m,判断它是否素数。 解题思路: 所谓素数(或称质数)是指除了1和它本身以外,不能被任何整数整除的数 例如17是素数,因为它不能被2到16间任一整数整除 因此判断一个整数m是否素数,只需把m被2到m-1之间的每一个整数去除,如果都不能被整除,那末m就是一个素数 P130 编程小技巧:学会判断素数的经典算法! 用m去除2到 之间的每一个整数,如果都不能被整除,那末m就是一个素数 。 假 假 真 i=i+1 输入m i=2 i ≤ 真 m被i整除 i 输出是素数 真 输出不是素数 假 用m去除2到 之间的每一个整 数,如果都不能 被整除,那末m 就是一个素数 。 #include stdio.h #include math.h void main() { int m,i,k; printf(“number:); scanf(“%d”,m); k=(int)sqrt(m); for (i=2;i=k;i++) if (m%i==0) break; if (ik) printf(%d prime\n,m); else printf(%d not prime\n,m); } number: 17↙ 17 prime 编程小技巧1:对强制类型转换的使用! 编程小技巧2:如果循环终止的可能性(条件)不止一个的话,那么在循环退出后,有时需要判断是哪种可能性退出了循环? 思考题: 该程序的结构 不是很好, 你能改进吗? #include stdio.h #include math.h void main() { int m, i, k, flag=1 ; /* flag =1表示m是素数;flag =0 表示m不是素数*/ printf(“number:); scanf(“%d”,m); k=(int)sqrt(m); for (i=2;i=k;i++) if (m%i==0) { flag=0; break; } /* break; */ if ( flag ) /* if (ik) */ printf(

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档