我必须找到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)。 [注意:因为我是int而t是double,我在这里进行类型转换。]
例如,如果我选择x = 5,则初始化t = 1。接下来我得到t = 5/1 = 5。 Sum初始化为1.因此sum现在变为sum = 1 + 5 = 6。然后我变成1.所以t变为5 * 5/2 = 12.5。所以现在我的总和应该是6 + 12.5 ....这样它现在应该在我的do {}部分。
现在,对于while部分,p是t的绝对值。 (n + 1)项和n项之和的差值是p。所以当我的p小于e时,我应该得到我想要的金额,对吧?如果系列是分歧的,为了避免无限循环,我让do {}部分只运行我的i <10000。
每次运行此程序时我得到的错误是我得到的总和为0.当我将sum初始化为1时,这甚至是可能的吗?
请帮我解决我错的地方。我是编程新手。
答案 0 :(得分:4)
更改此
scanf("%d", &x);
成为这个:
scanf("%lf", &x);
至少使用你想要的x
而不会引起未定义的行为。
对于prinf()
sum
,您也不得使用d
,f
代表double
。此处不需要长度修饰符l
,因为printf()
f
代表double
。很奇怪,但就是这样。
printf("Sum is %f\n", sum);
此外,您正在使用错误的转换说明符来扫描, which is a
long`,因此它应该是:
scanf("%ld", &a);
同样^ 2它(至少)int main(void)
。
来自C11标准:
5.1.2.2.1 / 1程序启动
程序启动时调用的函数名为main。实施宣布否 这个功能的原型。它应该使用返回类型int和no来定义 参数:
int main(void) { /* ... */ }
或有两个参数(这里称为argc和argv,但可能有任何名称 使用,因为它们是声明它们的函数的本地函数):
int main(int argc, char *argv[]) { /* ... */ }
此外,^ 3您的代码段未包含相关的头文件。
作为最后的注释:编译所有警告并认真对待。
答案 1 :(得分:1)
在这个答案中,我使用小数位来格式化术语并测试系列是否已收敛,将总和格式化为字符串 - 无论如何需要 来格式化输出
#include <stdio.h>
#include <string.h>
int main ()
{
double sum=1, term=1;
int n=1, x=1, dp=0;
char current[50]="", previous[50]="";
printf ("Enter number of decimal places: ");
scanf ("%d", &dp);
printf ("Enter x: ");
scanf ("%d", &x);
printf ("Series for x=%d to %d decimal places\n", x, dp);
do {
strcpy (previous, current);
sprintf (current, "%-10.*f", dp, sum);
printf ("Term = %-10.*f Sum = %s\n", dp, term, current);
term = term * (double)x / (double)n;
sum += term;
n++;
} while (strcmp(previous, current));
return 0;
}
我应该测试scanf()
的结果。节目输出
Enter number of decimal places: 2
Enter x: 2
Series for x=2 to 2 decimal places
Term = 1.00 Sum = 1.00
Term = 2.00 Sum = 3.00
Term = 2.00 Sum = 5.00
Term = 1.33 Sum = 6.33
Term = 0.67 Sum = 7.00
Term = 0.27 Sum = 7.27
Term = 0.09 Sum = 7.36
Term = 0.03 Sum = 7.38
Term = 0.01 Sum = 7.39
Term = 0.00 Sum = 7.39