C语言编程:ex=1+x⼀1!+x2⼀2!+x3⼀3!+……+xn⼀n!+…… 要求输入x的值后能计算ex的值,用循环编程。谢谢

2024-11-16 14:37:54
推荐回答(5个)
回答1:

#include
#include

// 计算 n 的阶乘
int jc (int n)
{
if (n < 0) return -1;
else if (n == 0) return 1;
else return n * jc (n - 1);
}

// 计算 ex 的值
double ex (double x)
{
int i = 0;
double sum = 0;
// pow(x,i)是x的i次方, elem是要计算的多项式的通项式
double elem = pow (x, i) / (double) (jc (i));
// 当elem的值小于 0.000001 时结束循环
while (elem > 1e-6)
{
sum = sum + elem;
i++;
elem = pow (x, i) / (double)(jc (i));
}
return sum;
}

int main()
{
double x;
printf("请输入x的值: ");
scanf("%lf", &x);
printf("ex = %lf\n", ex(x));
return 0;
}

以上代码已经通过测试,结果正确,并有一定量的注释,便于理解

回答2:

这个题有一个陷阱就是n!

当n超过12时,n!就超过了int型的最大表示范围。

如果X是任意值的话,那就需要大整数乘法的知识,不能简单的定义一个int n了事。

回答3:

double ex(int x, int n)
{
int i;
double ret, un,dn;
ret=1;
for(i=1,un=x,dn=1;i<=n;i++)
{
ret=ret+un/dn;
un=un+x;
dn=dn*(n+1);
}
return ret;
}

回答4:

(简洁且易理解的代码,已测试,有效。)
#include

void main()
{
int x,n=1; //x是输入的值,n用来算阶乘
long f=1; //f是总的阶乘
float y=1,p=1.0; //y是最终值,p用来算次方
scanf("%d",&x); //输入语句
do{
f=f*n ; //计算阶乘
n++;
p=p*x; //计算次方
y=y+p/f;
}while(1.0/f>1e-6);//直到1/n!小于10-6为止,所以要大于1e-6
printf("e%d=%f\n",x,y);
}

回答5:

int func(int x)
{
int result;
if(x==0 ||x==1) return 1;
return x*func(x-1);
}

main()
{
int x;
int i;
int result=0;
printf("please input a num\n");
scanf("%d",&x);
for(i=0;i {
result += func(i);
}
printf("result=%d\n",result);
}