级数:1 + 1/3 + 1/5 +...最多 N 项

Series: 1 + 1/3 + 1/5 +...upto N terms

我最近在编程测试中被问到这个问题。我似乎无法理解为什么我会得到答案“1”。我是 C 编程语言的初学者。

这是我的代码:

#include<stdio.h>
int main()
{
    float c = 0;
    int n, i = 1;
    printf("Enter the number here: ");
    n = getchar();
    while (i <= 2*n - 1)
    {
        c = c + (1/i);
        i = i + 2;
    }
    printf("%f", c);
}

我已经尝试过使用 for 循环,但答案还是一样。如有任何帮助,我们将不胜感激!

您的代码中的问题在于这一行:

c = c + (1/i);

这里括号内进行的运算是整数除法!因此,当 i 的任何值大于 1 时,结果将为零。然后将此零转换为浮点值。

要强制编译器使用浮点数除法,请使用:

c = c + (1.0/i);

我同意阿德里安的回答。

另一个问题是,当浮点数以任意顺序添加时,浮点数在系统中的表示方式可能会丢失精度。

为了获得最大精度,浮点数应从小到大依次相加。