2

我有一个作业来为这个序列求和:S = 1 - 1/2 + 1/4 - 1/6 + 1/8 - 1/10 + ... + 1/2n如果用户输入 2,那么总和将是1 - 1/2 = 1/2等等。

这是我的编码:

int main() {

    int num, N, k;
    double S;
    cout << "enter the sequence : ";
    cin >> N;
    for (num = 1, k = 0, S = 1; num <=N; num++) {
        num++;
        k=+2;
        if (num % 2 == 0) {
            S -= 1/k;
        } else {
            S += 1/k;
        }
    }
    cout << "The sum is " << S;
    system("PAUSE");
    return 0;
}

我很困惑为什么总和总是指 1 ?谁能向我解释为什么会这样??

4

3 回答 3

7

试试1./k——否则 1 除以任何整数都会产生零。(并查看有关=+vs+=错字的其他答案)。

于 2012-11-03T11:44:07.160 回答
3

在你的循环中,你有这个

k=+2;

因此您将值 2 分配给k每次迭代。你可能想要

k+=2;

还要注意另一个答案中突出显示的整数除法问题

于 2012-11-03T11:44:07.417 回答
1
for(num = 1, sum = 1; num <=N; num++){
    if(num%2==0){
        sum += 1/(num*2);
    }else{
        sum -= 1/(num*2);
    }
}

如果您的序列中的第 n 个术语是 ,那么应该这样做(1/((n-1)*2))

编辑:如下所述,执行除法时,其中一个操作数必须为非整数,以防止结果为整数。对我上面尝试的更正是:

for(num = 1, sum = 1; num <=N; num++){
    if(num%2==0){
        sum += 1.0/(num*2);
    }else{
        sum -= 1.0/(num*2);
    }
}

http://codepad.org/KgGAxKxS

于 2012-11-03T11:47:29.537 回答