我必须找到 1+x/1!+x^2/2!+.....
这是我的代码:
void main()
{
long int a, i = 0;
double p, e, x, sum = 1, t = 1;
printf("Enter desired number of decimal places\n");
scanf("%d", &a);
printf("Enter x\n");
scanf("%d", &x);
e = pow(10, -a);
do
{
t = x * t / (double) (i + 1);
sum = sum + t;
p = fabs(t);
i++;
printf("Sum is %ld\n", sum);
} while ((p > e) && (i < 10000));
}
我的程序逻辑是这样的:
我让用户输入 x 和准确度(a)。我的错误是 10^(-a)。我是我的柜台。sum 是我对这个系列的总和。t 表示我的条款。
我从 t=1 开始,使用递归 t=(x*t)/(double)(i+1)。[注意:因为 i 是 int 并且 t 是 double,所以我在这里进行类型转换。]
例如,如果我选择 x=5,则初始化 t=1。接下来我得到 t=5/1=5。Sum 被初始化为 1。所以 sum 现在变为 sum=1+5=6。然后 i 变为 1。所以 t 变为 5*5/2=12.5。所以我现在的总和应该是 6+12.5.... 这样它现在应该进入我的 do {} 部分。
现在,对于 while 部分,p 是 t 的绝对值。(n+1) 项之和与 n 项之和之间的差异就是这个 p。所以当我的 p 小于 e 时,我应该得到我想要的总和,对吗?如果系列是发散的,为了避免无限循环,我让 do {} 部分仅在我的 i<10000 时运行。
每次运行该程序时都会遇到的错误是总和为 0。当我将总和初始化为 1 时,这怎么可能呢?
请帮我解决我错的地方。我是编程新手。