【发布时间】:2017-09-05 22:52:18
【问题描述】:
这是我到目前为止所做的。我不知道代码有什么问题。从理论上讲,它应该运行得很好(或者我可能错了),但事实并非如此,这让我发疯了。顺便说一句,我是初学者。
谁能指出代码有什么问题?
# include <stdio.h>
# include <conio.h>
# include <math.h>
main()
{
int i , sum = 0 , n;
float x;
printf("Please enter the desired values for x and n (n>0): ");
scanf("%f %d",&x,&n);
for(i=1;i<=n;i++)
{
sum = sum +((pow(-1,i+1)*pow(x,2*i-1))/(factorial(2*i-1)));
}
printf("%f",sum);
}
int factorial(int n)
{
int c;
int result = 1;
for( c = 1 ; c <= n ; c++ )
result = result*c;
return ( result );
}
【问题讨论】:
-
这听起来像是学习使用调试器的绝佳机会。它会教你一些宝贵的技能,为你节省大量时间。
-
要考虑的一件事是
int中可以容纳的最大值是多少。 -
sum的类型更改为double形式int。 -
将 int 更改为双重工作。
-
您可以按照@JonathanLeffler 的建议将x、n、总和全部更改为两倍。这将使其不易溢出。此外,如果您有任意输入 x,则需要对参数进行归约。否则,收敛速度会非常缓慢,以至于无法获得远程正确的答案。
标签: c series trigonometry