You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

错误分析

  1. 内层循环未计算括号内的和:你内层循环只是把temp反复赋值为j,最终temp等于i,完全没计算每个括号里1-2+…±i的实际结果。比如i=2时,括号内应该是1-2=-1,但你用temp=2去计算,导致结果错误。
  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:05:21