南通通州定海湖的位置:C语言编程

来源:百度文库 编辑:高考问答 时间:2024/04/28 12:15:45
题目:e=1+1/1!+1/2!+1/3!+...+...1/n!
#include <math.h>
main()
{
float a,e,i,n,t;
a=1.0;
e=1.0;
do
{for(n=1;;n++)
{for(i=1;i<n;i++)
a=a*i;
t=1/a;
}
}
while(fabs(t)>1e-6);
e=e+t;

printf("e=%f",e);
}
程序有哪里错误
请指出并改正
请我正确的答案

错误有几处,其中最主要的是for循环是在while里面,while永远不能判断for的变量,for循环会永远进行下去而不会停止.也不必用两个for循环嵌套,对于这样一个小程序也不必使用子程序.还有一些其它错误. 我的代码如下:
#include <math.h>
#include <stdio.h>
main()
{
float a,e,i,n,t;
e=1;
n=1;
a=1;
do {
++n;
a = 1;
for (i=1; i<n; ++i) a=a*i;
t = 1/a;
e = e+t;
} while (fabs(t)>1e-6);

printf("e=%f",e);
}

输出结果是2.718282

它应该是自然对数的底e的无限逼近的算法.

由于有1e-6的限制,所以n的值不会太大,不必担心浮点运算溢出的问题(大概只算到10!就可以满足精度要求了)

void main()
{
int n=0;
printf("please input a integer less than 100: \n");
scanf("%d", &n);

int i;
double e=1.0;
for(i=1; i<=n; i++)
{
e=e+1/Factorial(i);
}

printf("e = %f\n",e);
}

double Factorial(int N)
{
if(N > 100)
return 0.0;

double Temp = 1.0;
for(int i = 1; i <= N; i++)
Temp *= i;

return Temp;
}

写成这样就可以了。
程序结构太复杂,写一个子程序合理一些。
阶乘有内存限制,所以n最好小于100。