我有一个功课来制作一个算法来对这个序列求和: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?任何人都可以向我解释为什么会发生这种情况吗?
答案 0 :(得分:7)
尝试1./k
- 否则1的整数除法将产生零。 (并查看有关=+
vs +=
拼写错误的其他答案。)
答案 1 :(得分:3)
在你的循环中你有这个
k=+2;
所以每次迭代都要将值2赋值给k
。你可能想要
k+=2;
还要注意其他答案中突出显示的整数除法问题
答案 2 :(得分: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);
}
}