我被分配了一个Hw,要求我通过使用该系列来计算e
的值:
1 + 1/1! + 1/2! + ... 1 / n!
必须计算e
的值,直到达到n
(由用户输入)的值。此外,必须计算1/n!
的值,直到其值小于epsilon
(也由用户输入)。
我编写了代码,但编译器有一些错误告诉我错误,例如关系比较,使用&#39 ;;'有谁可以帮我修复错误。先感谢您。
以下是我的代码:
#include<stdio.h>
int factorial (int i)
{
if (i==0)
return 1;
else
return i*factorial(i-1);
}
int main(void) {
int i,n;
float e,ep;
printf("what is the value of epsilon: ");
scanf("%f",&ep);
printf("what is the value of n: ");
scanf("%d",&n);
for (i=1; i<=n, i++)
e= 1+1/factorial(i);
for(1/fatorial(i)<=ep)
printf("The value of e for the entered value of epsilon and n:%f",e);
return 0;
}
答案 0 :(得分:0)
你没有对系列进行求和,但实际将e设置为1.
因为你把它设置为e + 1 / factorial(n)但是你的factorial()返回的int很可能高于1,所以除法是整数,1除以任何更大的数字将给0。
最后一个循环非常奇怪。您的意思是while
而不是for
吗?请注意,阶乘是错误的。此外,除了一遍又一遍地打印相同的消息之外,在循环体中没有做任何工作。
答案 1 :(得分:-1)
为了更加精确,我会使用double
代替float
。
for (i=1; i<=n, i++)
e= 1+1/factorial(i);
这是错误的,你没有添加到 e ,你总是分配最后一个 系列的值,始终为0( i = 1 除外)。所以你的 e 会 永远是1。
factorial
是一个返回int
的函数。 int
除以int
是。{
一个int
并且在C中任何 1 / x (对于 x &gt; 1, x 整数)都是0.你是使用
1.0
或至少将其中一个参数投射到double
(或float
,如果你是的话
使用花车):
double e = 1; // initializing e
for(i = 1; i <= n; ++i)
e += 1.0/factorial(i);
此外,必须计算 1 / n!的值,直到它的值小于 epsilon ,也是由用户输入的。
我不明白这意味着什么,如果 n 是用户给出的固定值, 你一直在计算什么?这真的是练习说的吗?
我的解释是:如果通过 n 步骤 | e_real - e_calculated | &GT;小量, 继续增加 n ,否则停止。那将是
#include <stdio.h>
#include <math.h>
#include <stdint.h>
uint64_t factorial (uint64_t i)
{
if (i==0)
return 1;
else
return i*factorial(i-1);
}
int main(void)
{
int n;
double e = 1;
double epsilon;
printf("what is the value of epsilon: ");
scanf("%lf", &epsilon);
printf("what is the value of n: ");
scanf("%d",&n);
int i = 1;
while(1)
{
e += 1.0/factorial(i++);
if(i >= n && (fabs(e - M_E) < epsilon))
break;
}
printf("e: %.20lf, calculated e: %.20lf, error: %.20lf, steps: %d\n", M_E, e, fabs(e-M_E), i);
return 0;
}
注意:如果您使用GCC,则必须使用-lm
选项进行编译:
$ gcc e.c -oe -lm