Возникли проблемы с последовательными суммами в C - PullRequest
0 голосов
/ 13 апреля 2019

Я новичок в C, и у меня возникают проблемы, когда я пытаюсь суммировать серию простых чисел.

#include <stdio.h>

int main(void) {

    int n, div, prime, i, x;
    float serie;
    serie = 0;

    scanf("%d", &n);
    int list[n];

    for (int i = 0; i < n; i++) { // creates a sequence from 1 to n
        list[i] = i + 1;
    }

    for (int i = 1; i < n; i++){ // check if a number is prime
        div = 2;
        prime = 1;
        while (div < list[i]) {
            if (list[i] % div == 0) {
                prime = 0;
            }
            div = div + 1;
        }
        if (prime == 1) {
            if (i % 2 == 0) {
                serie = serie - (1 / list[i]);
            } else {
                serie = serie + (1 / list[i]);
            }
        }
    }
    printf("%f", serie);

    return 0;
}

Независимо от того, какое число я введу в n, результат sum всегда равен 0,000000,Что я должен делать?

Ответы [ 2 ]

0 голосов
/ 13 апреля 2019

код здесь:

        if (prime == 1) {
            if (i % 2 == 0) {
                serie = serie - (1 / list[i]);
            } else {
                serie = serie + (1 / list[i]);
            }
        }

Выполняет целочисленное деление, которое всегда приводит к тому, что часть (1 / list [i]) оценивается в 0. Чтобы выполнить вычисление, вы должны использовать арифметику с плавающей запятой, которую вы можете сделать, используя приведение с плавающей запятой или литерал с плавающей запятой (суффикс .f) вместо целого числа:

        if (prime == 1) {
            if (i % 2 == 0) {
                serie = serie - (1.f / list[i]);
            } else {
                serie = serie + (1.f / list[i]);
            }
        }
0 голосов
/ 13 апреля 2019

причина, по которой serie равен 0,0, в том, что list[i] является целым числом. Примените его сначала к плаванию, в вашем вычитании / сложении из serie:

if (i % 2 == 0) {
    serie = serie - (1 / (float)list[i]);
} else {
    serie = serie + (1 / (float)list[i]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...