首页 > 试题广场 >

展开式求和。输入一个实数x,计算并输出下式的值,直到最后一项

[问答题]

展开式求和。输入一个实数x,计算并输出下式的值,直到最后一项的绝对值小于0.00001 (保留2 位小数)。要求定义和调用函数fact(n)计算n 的阶乘,可以调用pow()函数求幂。试编写相应程序。

s = x+x*x/2!+x*x*x/3!+x*x*x*x/4!+……

推荐
#include <stdio.h>
#include <math.h>
double fact ( int n ) ;
int main(void)
{
int i=1,j;
double item, sum ;
double x ;
sum = 0 ;
scanf ("%lf", &x) ;
while (fabs(item)>=0.00001) //(调试时程序到这一步直接跳到第17行输出0.00)
{
item = pow(x,j=i++)/fact(j) ;
sum += item ;
printf ("%.2f\t%d\t%f\n",sum,j,item) ;
}
printf ("%.2f",sum) ;
return 0 ;
}
double fact ( int n ) 
{
int i;
double result ;

result = 1 ;
for (i=1;i<=n;i++)
result *= i ;

return result ;
}

发表于 2018-05-06 21:24:30 回复(2)
/*
展开式求和
autho: a1bum 
*/ 

#include<stdio.h>
#include<math.h>

double fact(int n);

int main(){
    double x,sum = 0;
    int n = 1;

    printf("please input value of x: ");
    scanf("%lf", &x);
    while(true){
        double var = pow(x, n)/fact(n);        
        sum += var;
        if(var < 0.0001)
            break;
        n++;
    }
    printf("result is %.2lf ", sum);

    return 0;
}

double fact(int n){
    double result = 1;
    for(int i=n;i>=2;i--){
        result *= i;
    }
    return result;
}

感觉楼上这句写的十分巧妙

item = pow(x,j=i++)/fact(j) ;
发表于 2018-06-06 09:48:20 回复(0)
#include<stdio.h>
#include<math.h>
long fact(int n)
{
    long sun=1;
    for(int i=1;i<=n;i++)
    sun*=i;
    return sun;
}
int main()
{
    int x,n=1;
    double sum=0,m;
    scanf("%d",&x);
    m=x;
    while(fabs(m)>=0.00001)
    {
        sum+=m;
        n++;
        m=pow(x,n)/fact(n);
    }
    printf("%2lf",sum);
}
发表于 2021-03-18 18:16:28 回复(0)