逆序输出0 200之间的偶数 c语言,北京交通大学c语言课件复习题讲解_1.ppt

北京交通大学c语言课件复习题讲解_1

* 共循环了多少次? 完整程序1:一层for循环(利用自定义函数) #include int sq(int n) {int m,f=0; for (m = 1; m * m <= n; m++) if (m * m == n) f=1; return f; } int main() { int m, n; for(n=1; n <= 200; n++) if(sq(n)) printf("%d ", n); printf("\n"); return 0; } 函数定义 函数调用 * 完整程序2:两重for循环(只有主函数) #include int main() { int m, n; for(n=1; n <= 200; n++) for (m = 1; m * m <= n; m++) if (m * m == n) printf("%d ", n); printf("\n"); return 0; } 内层循环结束的两种情况: 1,找到m使m*m==n(n是完全平方数) 2,试探了所有可能,但都不成功(n不是) 共循环了多少次? * 具有累计循环次数功能的完整程序: #include int main () { int m, n, count = 0; for (n = 1; n <= 200; n++) for (m = 1; m * m <= n; m++) { count++; if (m * m == n) printf("%d ", n); } printf(“%d\n“, count); return 0; } 共循环了1799次 * 方法二:需要打印的一定是从1开始连续几个整数的平方,可从1开始打印到平方大于200为止。 for (n = 1; n * n <= 200; ++n) printf("%d ", n * n); /*注意打印什么*/ 方法一产生所有备选数据(1到200的整数),检查排除不合格的。生成与检查是解决问题的常用方法。 方法二是针对具体问题的特定方法。 * #include int main() { int termn, n; for (n = 1,termn = 1;termn <= 200; n++) { printf("%4d",termn); termn += 2*n+1; } return 0; } 方法三:还可以考虑利用递推公式求平方数程序: * 例2,艰难旅程(浮点误差)。乌龟要去环球。第1秒爬1米,第2秒爬1/2米,第3秒爬1/3米,第4秒爬1/4米,…。问一小时能爬出多远?爬20米需多少秒? 一小时能爬多远算法: 1.d(距离,实数); s(时间,整数); 2. d=0.0;s=1; 3. d=d+1/(实数)s; s=s+1; 4.如果s<=3600,转3; 5.否则,输出d; 爬20m需多少秒算法: d(距离,实数); s(时间,整数); d=0.0,s=1; d=d+1/(实数)s;s=s+1; 如果d<20.0,转3; 否则,输出s-1; 根据数学,乌龟能完成环球,可以爬得任意远。 这里想比较float和double的计算误差情况。 s-1? * n秒能爬x米的函数float distfun(long n) float distfun(long n) { long i; float x = 0.0; for (i = 1; i <= n; ++i) x += 1/(float)i; return x; } 例2,艰难旅程(浮点误差)。乌龟要去环球。第1秒爬1米,第2秒爬1/2米,第3秒爬1/3米,第4秒爬1/4米,…。问一小时能爬出多远?爬20米需多少秒? * 例2,艰难旅程(浮点误差)。乌龟要去环球。第1秒爬1米,第2秒爬1/2米,第3秒爬1/3米,第4秒爬1/4米,…。问一小时能爬出多远?爬20米需多少秒? 20米需要多少时间。写出下面函数: long scndsfun(float d) /*d为爬行距离*/ { long i; float x = 0.0; for (i = 1; x < d; ++i) x += 1/(float)i; return i - 1; } d=20 * 写下面语句,执行时总也不输出: printf("%lds, %fm\n",scndsfun(20.),20.); 修

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值