计算e值的C程序
C program for calculating the value of e
我被分配了一个 Hw,要求我使用以下系列计算 e
的值:
1 + 1/1! + 1/2! + ...1/n!
必须计算e
的值,直到达到n
的值(由用户输入)。此外,必须计算 1/n!
的值,直到它的值小于 epsilon
(也由用户输入)。
我写了代码,但有些错误是编译器告诉我的,例如关系比较、使用“;”等任何人都可以帮我解决这个错误。先感谢您。
下面是我的代码:
#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;
}
你不是在对级数求和,而是实际上将 e 设置为 1。
因为你把它设置为 e + 1/factorial(n) 但你的 factorial() returns 一个 int 很可能大于 1,所以除法是整数, 1 除以任何更大的数将得到 0。
最后一个循环很奇怪。您是指 while
而不是 for
吗?请注意阶乘输入错误。此外,除了一遍又一遍地打印相同的消息之外,循环体中没有完成任何工作。
为了更精确,我会使用 double
而不是 float
。
for (i=1; i<=n, i++)
e= 1+1/factorial(i);
这是错误的,你没有添加到 e,你总是在分配最后一个
系列的值,始终为 0(i = 1 除外)。所以你的 e 会
永远是 1.
factorial
是 returns 和 int
的函数。 int
除以 int
是
一个 int
和 C 中的任何 1/x (对于 x > 1,x integer) 为 0. 你要用
1.0
或将至少一个参数转换为 double
(或者 float
,如果你是
使用花车):
double e = 1; // initializing e
for(i = 1; i <= n; ++i)
e += 1.0/factorial(i);
Also, the value of 1/n! must be calculated until it's value is smaller than epsilon, also entered by the user.
没看懂什么意思,如果n是用户给定的固定值,
你一直在计算什么?这真的是练习所说的吗?
我的解释是:如果按 n 个步骤 |e_real - e_calculated| > epsilon,
继续递增 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
我被分配了一个 Hw,要求我使用以下系列计算 e
的值:
1 + 1/1! + 1/2! + ...1/n!
必须计算e
的值,直到达到n
的值(由用户输入)。此外,必须计算 1/n!
的值,直到它的值小于 epsilon
(也由用户输入)。
我写了代码,但有些错误是编译器告诉我的,例如关系比较、使用“;”等任何人都可以帮我解决这个错误。先感谢您。
下面是我的代码:
#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;
}
你不是在对级数求和,而是实际上将 e 设置为 1。
因为你把它设置为 e + 1/factorial(n) 但你的 factorial() returns 一个 int 很可能大于 1,所以除法是整数, 1 除以任何更大的数将得到 0。
最后一个循环很奇怪。您是指
while
而不是for
吗?请注意阶乘输入错误。此外,除了一遍又一遍地打印相同的消息之外,循环体中没有完成任何工作。
为了更精确,我会使用 double
而不是 float
。
for (i=1; i<=n, i++)
e= 1+1/factorial(i);
这是错误的,你没有添加到 e,你总是在分配最后一个 系列的值,始终为 0(i = 1 除外)。所以你的 e 会 永远是 1.
factorial
是 returns 和 int
的函数。 int
除以 int
是
一个 int
和 C 中的任何 1/x (对于 x > 1,x integer) 为 0. 你要用
1.0
或将至少一个参数转换为 double
(或者 float
,如果你是
使用花车):
double e = 1; // initializing e
for(i = 1; i <= n; ++i)
e += 1.0/factorial(i);
Also, the value of 1/n! must be calculated until it's value is smaller than epsilon, also entered by the user.
没看懂什么意思,如果n是用户给定的固定值, 你一直在计算什么?这真的是练习所说的吗?
我的解释是:如果按 n 个步骤 |e_real - e_calculated| > epsilon, 继续递增 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