C语言求e的近似值
题目:用e≈1+1/1!+1/2!+1/3!+...+1/n!求e得近似值,直到最后一项的绝对值小于10负六次方。求大神指导指导,我打的代码编译组建时都没错,但运行时没反应。
#include <stdio.h>
#include <math.h>
int main ()
{
int n=1;
float sum=1,term=1,a; //sum开始代表多项式的值,最后代表e的近似值,term代表当前项的值
while (fabs(term)>=1e-6)
{ n++;
term=1/(term*n);
sum=sum+term;
}
printf ("e=%10.8f\n",sum);
return 0;
} 本帖最后由 mingcxx 于 2016-4-13 15:53 编辑
问题原因:语句" term=1/(term*n);”有问题:(n++位置也有问题)
它的作用是:取前一项M,乘以当前n, 再取倒数为当前项, 等于1/(M*n),把前一项套在了当前项的分母,当前项错误,累加也就错了,回到循环首,错误的当前项大于1e-6,继续循环,依次往后,每一项的分母套上了前一项,无限循环......
解决方法:声明一个变量保存当前项的分母,分母不断取阶乘、取倒数得到当前项,再把当前项累加起来,{:5_108:} 注意n++位置,在循环体最后。
#include <stdio.h>
#include <math.h>
int main(void)
{
int n = 1;
float sum = 1, term = 1, term_monther = 1; //那个a利用上,保存分母
//从第二项开始
while (fabs(term) >= 1e-6)
{
term_monther *= n; //分母累乘
term = 1 / term_monther; //当前项
sum += term; //当前项加到sum里
n++;
}
printf("e=%10.8f\n", sum);
return 0;
}
mingcxx 发表于 2016-4-13 15:16
问题原因:语句" term=1/(term*n);”有问题:(n++位置也有问题)
它的作用是:取前一项M,乘以当前n, 再取 ...
哦哦,这样啊。一开始还以为term_monther *= n;term = 1 / term_monther;这两条语句合起来就是我打错这个term=1/(term*n) ,谢谢啦{:10_254:} zhyin 发表于 2016-4-13 18:52
哦哦,这样啊。一开始还以为term_monther *= n;term = 1 / term_monther;这两条语句合起来就是我打错这个 ...
么事么事,清楚了就好{:5_109:}
页:
[1]