【问题标题】:Error in code; Getting wrong summation output代码错误;得到错误的求和输出
【发布时间】:2015-02-19 09:53:06
【问题描述】:

我必须使用泰勒级数和误差范围来计算 e^(x)。我们被指示制作 3 个单独的函数,然后使用它们以用户输入的精度和 x 值计算 e^(x)。编译器最终编译了代码,但是如果我输入 x=2 和 delta=(anything),我得到 sum=3.000 而不是 7.3890。我假设它的最后一个循环(总和循环)有错误。任何帮助表示赞赏。

代码:

#include<stdio.h>
#include<math.h>

float power(float A, int B)
{
    float sum=1.0;
    int nterms=1;

    while ( nterms <= B && B > 0) 
    {
        sum = A*sum;
        nterms++;
    }

    return sum;
}

int factorial(int b)
{
    int fact=1;

    while (b >= 2) 
    {
        fact = b*(b-1)*fact;
        b = b-2;
    }

    return fact;    
}

int Terms(float X, float a)
{
    int N=1,l;
    float L,R;

    l=N+1;

    while (L < a && a <= R)
    {
        L= (power(X,l)/(factorial(l)));
        R= (power(X,N)/(factorial(N)));
        N++;
    }

    return N;
}

int main()
{

    float x, delta, term=0.0, sum=0.0;
    int n, Nterms;

    printf("Please enter a decimal number. x=");
    scanf("%f",x);
    printf("Please enter an another number. delta=");
    scanf("%d",delta);


    Nterms=Terms(x,delta);

    for(n=0;n<Nterms;n++)
    {
        if( n==0 || n==1 )
        {
            sum = 1 + x;
        }
        else if (n>=2 && n<Nterms)
        {
            sum = sum + term;
            term = (power(x,n))/(factorial(n));
        }   
    }

    printf("The approximation for e^(%f)=%f",x,sum);

    return 0;
}

【问题讨论】:

  • scanf("%d",delta); 更改为 scanf("%f",&amp;delta);
  • 啊,谢谢!我再次运行它,它仍然没有编译就关闭了编译器,但我朝着正确的方向迈出了一步!谢谢!

标签: c function loops factorial


【解决方案1】:

改变

scanf("%f",x);
scanf("%d",delta);

scanf("%f", &x);
scanf("%f", &delta);

错误在于您阅读用户输入的方式。 scanf() 将继续读取指针指向的位置。

【讨论】:

  • 啊谢谢!!现在可以编译了!!!但是,我的最终循环肯定存在某种问题,它将总和打印为 1 + x,但忽略 else if (n>=2)
  • 在循环之前打印Nterms 的值。也不需要else if (n&gt;=2 &amp;&amp; n&lt;Nterms)。只需 else 即可。
  • 好的!谢谢!有点困惑你在循环之前打印 Nterms 的值是什么意思,你在看代码的哪一部分,这是做什么的?
  • 在这条语句之后`Nterms=Terms(x,delta);`写printf("Nterms = %d\n", Nterms);以便调试为什么你的代码else if (n &gt;= 2) is ignored
  • 好的!我会尝试并发布结果!谢谢!
猜你喜欢
  • 2017-04-29
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多