C

时间:2019-04-12 23:42:25

标签: c sum printf

我是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中输入多少数字,总和的结果始终为0.000000。 我该怎么办?

2 个答案:

答案 0 :(得分:0)

serie为0.0的原因是,list[i]是整数。在您从serie进行的减法/加法中将其首先转换为浮点型:

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

答案 1 :(得分:0)

此处的代码:

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

正在执行整数除法,这总是会导致(1 / list [i])部分的计算结果为0。要执行计算,必须使用浮点运算,这可以通过使用a浮点强制转换,或浮点文字(.f后缀)而不是整数:

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