任务描述
编写程序,输入一个较小的实数deta,利用e=1+1/1!+1/2!+1/3!+⋯+1/n!计算e的近似值,直到最后一项的绝对值小于deta时为止,输出此时e的近似值.
输入格式:
一个较小的实数deta(deta<0.01)。
输出格式:
题目要求的近似值。
输入样例:
0.0001
输出样例:
2.7182787698
#include
int main() {
int a, i, j;
double b = 1, c = 1;
double date;
scanf("%d", &date);
while (date <= b) {
i = 1;
i++;
for (j = i; j > 0; j--) {
b = b / j;
}
c = c + b;
b = 1;
}
printf("%.8f\n", c);
return 0;
}
1.题目中是deta不是date,输出例需小数点后10位
2.泰勒级数第一项和第二项都是1,但是意义不同;
第一项的1:在累加时直接设sum初始值为1即可;
第二项的1:是分子为1,分母累乘的结果
3.由于分子都为1,则只需要对分母做累乘即可
4.你的每次while循环,b最终赋值都为1,(date<=b)这句就没意义了啊
#include <stdio.h>
int main()
{
int i=1;
double a=1,e=1,sum=1;
float deta;
scanf("%f",&deta);
while(e>=deta)
{
a=a*i;
e=1.0/a;
sum=sum+e;
i++;
}
printf("%.10f",sum);
return 0;
}
修改如下,供参考:
#include <stdio.h>
#include <math.h>
int main()
{
int i = 1;
double data, t = 1.0, s = 1.0;
scanf("%lf", &data);
while (fabs(1.0 / t) > data)
{
t*= i;
s += 1.0 / t;
i++;
}
printf("%.10f", s);
return 0;
}