编写了一个fun函数它有以下功能
s=1+x+x^2/2!+x^3/3!+.....+x^n/n!double fun(double x, int n)
{
int i;
int m;
int k;
for(i=2;i<=n;i++){
for(k=i;k>0;k--)
{m=k*(k-1);}
x+=pow(x,i)/m;}
return x+1;
}
请问我编写的这个函数在哪里出错了???
本帖最后由 jackz007 于 2019-2-17 22:22 编辑
循环从 2 开始,会丢掉 s = 1 + x + x ^2 / 2 ! + . . .+ x ^n / n !中的 x 那一项,其实,最要命的事情,是 x 还没有使用完就已经又被挪作它用,就是这句:
x += pow(x , i) / m ;
连种子 x 都改了,这是不想继续过日子了?
根据题目要求重写了代码,楼主可以测试一下:
double fun(const double x , const int n)
{
double s ;
int i , k , m ;
s = 1.0 ;
for(k = 1 ; k <= n ; k ++) {
m = 1 ;
for(i = 1 ; i <= k ; i ++) m *= i ;
s += pow(x , k) / m ;
}
return s ;
}
楼上的代码是对的,但感觉那个要命的没看懂
我只看的出m=k*(k-1)这个是写错了,因为循环完毕m始终等于1*0,导致结果输出为inf(无限大)
页:
[1]