评估C

时间:2017-05-12 10:51:40

标签: c taylor-series

我是C编程的新手。在这里,我编写了一个非常简单的C程序来评估指数函数e ^ x的泰勒级数展开,但是我的输出中出现错误,尽管程序编译成功。

#include <stdio.h>
int main()
{
double sum;
int x;
printf("Enter the value of x: ");
scanf("%d",&x);
sum=1+x+(x^2)/2+(x^3)/6+(x^4)/24+(x^5)/120+(x^6)/720;
printf("The value of e^%d is %.3lf",x,sum);
return 0;
}

3 个答案:

答案 0 :(得分:4)

C中的

^不是取幂运算符。这是一个按位运算符。对于短期而言,更容易相乘。

您还需要处理整数除法。如果你除x*x/2,那么你将获得整数除法。您需要将数字除以得到双重答案,如下所示。

您可以使用以下行替换计算总和的行。

sum=1+x+(x*x)/2.0+(x*x*x)/6.0+(x*x*x*x)/24.0+(x*x*x*x*x)/120.0+(x*x*x*x*x*x)/720.0;

更好的选择是使用循环来计算每个术语并将其添加到答案中。

double answer, term = 1;
int divisor = 1;
amswer = term;
for (i=0; i<6; i++)
{
   term = term * x / divisor;
   answer += term;
   divisor *= (i+2);
}   

答案 1 :(得分:1)

由于其他人未能提供适当的C代码,我必须尝试:

#include <stdio.h>
int main() {
    printf("Enter the value of x: ");
    double x;
    scanf("%lf", &x);
    double sum = 1.0 + x * (1.0 + x * (1.0 / 2 + x * (1.0 / 3 + x * (1.0 / 4 + x * (1.0 / 5 + x / 6.0)))));
    printf("The value of e^%.3lf is %.3lf", x, sum);
}

答案 2 :(得分:0)

Better make it dynamic like this one.


#include <stdio.h>

int power(int x,int n){
int sum=1,i;  
if (n == 0)
    return 1;

  for(i=1; i<= n; i++){
    sum *= x;
  }
 return sum;
}

int fact(int n){
 if(n == 0)
   return 1;

 for(i=1; i<= n; i++){
   fact *=i;
 }
  return fact;
}


int main()
{
float sum=0.0;
int i,x,n;
printf("Enter the value of x and n terms: ");
scanf("%d %d",&x,&n);
 for(i=0; i<=n; i++){
  sum += (float)power(x,i)/fact(i);
 }
printf("The value of %d^%d is %.3f",x,n,sum);
return 0;
}