【发布时间】:2020-12-11 11:07:25
【问题描述】:
我正在编写一个程序,根据展开公式计算 e^x 的值。我需要打印答案,使其正确到小数点后 10 位。我曾尝试使用 for、while 和 do while loop 来执行此操作,但是我无法弄清楚在哪里终止循环,使用哪个条件来终止循环。我写的代码如下:
#include<stdio.h>
#include<math.h>
int factorial(int x);
int main()
{
int x,n;
float sum,d_1;
printf("Enter the value of power :");
scanf("%d",&x);
n=1;sum=1;
while(sum <= %.10f)
{
d_1=pow(x,n)/factorial(n);
sum=sum+d_1;
n++;
}
printf("Answer is %f",sum);
return 0;
}
int factorial(int y)
{
int fact=1,i;
for(i=1;i<=y;i++)
{
fact=fact*i;
}
return(fact);
}
我在 %. 请帮忙。
【问题讨论】:
-
语法错误就在编译器告诉你的地方:
while(sum <= %.10f)你正在尝试使用printf格式说明符作为浮点常量。这没有任何意义。将%.10f替换为实际数字,语法错误就会消失。另外,如果准确性很重要,您应该真正使用double而不是float。 -
float你不会得到 10 位小数精度。factorial()函数也只能在 11! 之前使用。获得小数点后 10 位精度的一种方法是查看从一次迭代到下一次迭代的值变化,并在它不显着时停止。 -
嗨,Tom Karzes 和 Weather Vane,感谢您的回复。由于我是一个完整的新手,您能详细说明一下吗?
-
特别是我无法理解我应该使用哪个条件来终止循环
-
另外,您正在尝试使用
sum的值作为循环终止条件。仅当您可以将其与所需的最终值进行比较时才有意义,因为您尚未计算它,所以您不能这样做。您需要根据您实际知道的项数或下一项的大小来终止循环。
标签: c loops for-loop while-loop infinite