0
#include<stdlib.h>
#include<stdio.h>

long double fact(unsigned long int n)
    /*The factorial of a positive integer by recursion*/
{
    if (n==0)
        return 1;
    else
        return n*fact(n-1);
}

int main()
{
    long double  sum, n;
    int i, m;
    printf("\t/*Code to find the approximate value of e */");
check:
    printf("\n\n\tPlease Enter the value of n := ");
    scanf("%lf", &n);
    sum=0;
    for (i=0; i<=n; i++)
        sum +=1/(fact(i));
    printf("\n\n\tThe appriximate value of e := %.15lg\n\n\t", sum);
    printf("Let's do this again? 1/ YES Any key/ NO := ");
    scanf("%d", &m);
    if (m==1)
        goto check;
    else (1);
    return 0;
}

此代码在 Visual C++ 2010 中运行良好,但不适用于 DEV C++。对于 e 的值,它一直返回零。有人可以解释为什么!谢谢!

4

3 回答 3

1

使用这个scanf("%Lf", &n);long double 的格式说明符是%Lf, %le%lg所以使用这个

并考虑这些点

Dev-C++ 它使用 GCC (MinGW)。没有大量的 Dev-C++ 更新可以解决这个问题。

  1. Dev-C++ 5 年没有更新了;不要屏住呼吸。

  2. 衍生 wxDev-C++ 得到维护。

  3. 如果您想要编译器更新,请访问 www.mingw.org,并希望最新版本仍然适用于古老的 Dev-C++。或者使用不同的 IDE 或编译器。我推荐 VC++ 2010 Express Edition(免费,并且调试器更好),您的代码在 VC++ 2008 中可以正常工作,但这并不安全。

  4. 您如何确定该值为“0”?很可能它实际上是 0.000001 之类的东西,而您的审讯方法将其四舍五入。您应该在调试器而不是打印语句中查看该值。不幸的是,Dev-C++ 的调试器很糟糕。

  5. ISO C 标准库只为双精度定义函数。如果要为 float 定义版本,则需要编译为 C++ 并包含 . C 不支持函数重载,因此在 C 中没有不同命名的函数是不可能的。

于 2012-05-05T16:10:05.707 回答
0

did you check wheter scanf(...) really reads the number you want to read? Try to print the value you read. And also the line

sum +=1/(fact(i));

looks suspicious. 1 as an integer divided by something bigger than 1 should always yield 0, in the optimal case on every compiler... Maybe you could try this instead:

sum +=1.0/(fact(i));

EDIT: Sorry was wrong here. Typeconversions make it possible to devide integer by long double.

于 2012-05-05T16:12:49.817 回答
0
scanf("%lf", &n);

%lf转换规范用于读取double.

您必须使用%Lf来阅读long double.

于 2012-05-05T16:08:50.310 回答