C语言特定级数求和函数结果错误,寻求问题排查与修正
级数求和程序的错误排查与修复
你需要实现的是计算级数:1+(1-2)+(1-2+3)+…+(1-2+3-…±n)(奇数项取+k,偶数项取-k),但现有代码结果不符合预期,比如:
- n=2时正确结果应为0,实际输出-1
- n=3时正确结果应为2,实际输出3
你的原代码:
#include <stdio.h> int athroismaAkolouthias(int n); // 用于计算级数和的函数 int main(){ int n; printf("give n: "); scanf("%d", &n); printf("the sum is %d", athroismaAkolouthias(n)); } int athroismaAkolouthias(int n){ int sum1=0, sum2=0,sum=0; int i, temp, j; for (i=1; i<=n; i++){ for (j=1; j<=i; j++){ temp=j; } if (i%2==0){sum=sum-temp; printf("test1 %d%d",sum,temp);} else{sum=temp; printf("test2 %d%d",sum,temp);} } return sum; }
错误分析
- 内层循环未计算括号内的和:你内层循环只是把
temp反复赋值为j,最终temp等于i,完全没计算每个括号里1-2+…±i的实际结果。比如i=2时,括号内应该是1-2=-1,但你用temp=2去计算,导致结果错误。 - 总和更新逻辑错误:当i为奇数时,你直接把
sum赋值为temp(也就是i),而不是把当前括号的和加到总sum里;当i为偶数时,你用sum=sum-temp,这也是错误的逻辑,应该加的是当前括号的和,而不是减i。
修复后的代码
#include <stdio.h> int athroismaAkolouthias(int n); int main(){ int n; printf("give n: "); scanf("%d", &n); printf("the sum is %d", athroismaAkolouthias(n)); } int athroismaAkolouthias(int n){ int total_sum = 0; for (int i = 1; i <= n; i++){ int current_bracket_sum = 0; // 计算当前括号内的和:1-2+3-…±i for (int j = 1; j <= i; j++){ if (j % 2 == 1){ current_bracket_sum += j; } else { current_bracket_sum -= j; } } // 将当前括号的和加到总和里 total_sum += current_bracket_sum; } return total_sum; }
验证结果
- 当n=2时:
1 + (1-2) = 1 + (-1) = 0,符合预期 - 当n=3时:
1 + (-1) + (1-2+3) = 0 + 2 = 2,符合预期
内容的提问来源于stack exchange,提问作者Achno
相关产品推荐
相关产品推荐

