Серия: 1 + 1/3 + 1/5 + ... до N сроков - PullRequest
5 голосов
/ 16 октября 2019

Мне недавно задали этот вопрос в тесте по программированию. Я не могу понять, почему я получаю ответ «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, но ответ остался прежним. Любая помощь будет оценена!

Ответы [ 2 ]

10 голосов
/ 16 октября 2019

Проблема в вашем коде лежит в этой строке:

c = c + (1/i);

Здесь операция, выполняемая в скобках, представляет собой целое число деление! Таким образом, когда i имеет какое-либо значение больше 1, результат будет нулевым. Затем этот ноль преобразуется в значение с плавающей запятой.

Чтобы заставить компилятор использовать с плавающей запятой , используйте это:

c = c + (1.0/i);
2 голосов
/ 16 октября 2019

Я согласен с ответом Адриана.

Другая проблема связана с тем, как числа с плавающей запятой представляются в системе, когда они добавляются в произвольном порядке, точность может быть потеряна.

Чтобы иметьмаксимальная точность, числа с плавающей запятой должны быть добавлены от наименьшего первого к наибольшему последнему.

...