鱼C论坛

 找回密码
 立即注册
查看: 14397|回复: 3

C语言求e的近似值

[复制链接]
发表于 2016-4-13 13:52:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:用e≈1+1/1!+1/2!+1/3!+...+1/n!求e得近似值,直到最后一项的绝对值小于10负六次方。
求大神指导指导,我打的代码编译组建时都没错,但运行时没反应。

112948f4ssp4rqffroefz3.png.thumb.jpg
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main ()
  4. {   
  5.         int n=1;
  6.         float sum=1,term=1,a;     //sum开始代表多项式的值,最后代表e的近似值,term代表当前项的值
  7.         
  8.         while (fabs(term)>=1e-6)
  9.         {   n++;
  10.                 term=1/(term*n);
  11.                 sum=sum+term;
  12.         }
  13.         printf ("e=%10.8f\n",sum);
  14.         return 0;
  15. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-4-13 15:16:59 | 显示全部楼层
本帖最后由 mingcxx 于 2016-4-13 15:53 编辑

问题原因:语句" term=1/(term*n);”有问题:(n++位置也有问题)
它的作用是:取前一项M,乘以当前n, 再取倒数为当前项, 等于1/(M*n),把前一项套在了当前项的分母,当前项错误,累加也就错了,回到循环首,错误的当前项大于1e-6,继续循环,依次往后,每一项的分母套上了前一项,无限循环......
解决方法:声明一个变量保存当前项的分母,分母不断取阶乘、取倒数得到当前项,再把当前项累加起来, 注意n++位置,在循环体最后。
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main(void)
  4. {
  5.         int n = 1;
  6.         float sum = 1, term = 1, term_monther = 1;     //那个a利用上,保存分母

  7.         //从第二项开始
  8.         while (fabs(term) >= 1e-6)
  9.         {
  10.                 term_monther *= n;                                        //分母累乘
  11.                 term = 1 / term_monther;                                //当前项
  12.                 sum += term;                                                        //当前项加到sum里
  13.                 n++;
  14.         }

  15.         printf("e=%10.8f\n", sum);
  16.         return 0;
  17. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-13 18:52:13 | 显示全部楼层
mingcxx 发表于 2016-4-13 15:16
问题原因:语句" term=1/(term*n);”有问题:(n++位置也有问题)
它的作用是:取前一项M,乘以当前n, 再取 ...

哦哦,这样啊。一开始还以为term_monther *= n;term = 1 / term_monther;这两条语句合起来就是我打错这个term=1/(term*n) ,谢谢啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-13 18:54:03 | 显示全部楼层
zhyin 发表于 2016-4-13 18:52
哦哦,这样啊。一开始还以为term_monther *= n;term = 1 / term_monther;这两条语句合起来就是我打错这个 ...

么事么事,清楚了就好
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-22 07:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表