【发布时间】:2018-09-10 19:47:24
【问题描述】:
标题几乎是不言自明的。我试图近似一个可以写为 f(x) = x¹/(1x2) -x³/(3x4) +x^(5)/(5x6) + ... 的系列,条件是总和应该停止当术语的模块低于用户输入的容差时。例如,如果 x=0.5 且容差=0.01,则结果应为 0.239583,因为这是前两项之和(均高于 0.01)。下面的代码只计算第一项,然后由于某种我无法弄清楚的原因停止循环。如何进行?
int main()
{
double x, e, result=0, term;
int i=1;
printf("Write some value to x: ");
scanf("%lf", &x);
if(x<-1 || x>1)
{
printf("Invalid number");
}
else
{
printf("Write the tolerance: ");
scanf("%lf", &e);
do
{
term=(pow(x, 2*i-1)*pow(-1, i+1))/((2*i-1)*(2*i));
result+=term;
i+=1;
}
while(abs(term)>=e);
printf("The result is: %.6lf", result);
}
return 0;
}
【问题讨论】:
-
对不起,弄错了:“结果应该是0.239583,因为那是前两项之和(都高于0.01)”。
-
.. 所以请编辑问题。
-
只有一种方法可以让您的
do while循环终止,那就是term的绝对值大于或等于e(abs(term) >= e)。也许e或term不是您所期望的那样。 -
旁白:
abs()==>fabs()因为您使用的是double。您还必须检查scanf返回值(成功输入),然后检查输入范围。 -
请注意,您可以使用
pow()计算所有这些项,x^n 和 (-1)^n,没有。
标签: c loops do-while numerical-methods approximation