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

如何获取C语言数组中能被3整除的元素并计算其总和?

问题分析与解决方案

原代码的核心问题

  • 数组参数退化导致长度计算错误:C语言里数组作为函数参数传递时会被转换为指针,sizeof(arr)取的是指针的字节数(比如32位系统是4),而非数组总长度,因此sizeof(arr)/sizeof(arr[0])算出的n完全错误,直接导致sum函数的循环逻辑混乱。
  • 累加逻辑错误:每次找到符合条件的元素就新建单元素数组调用sum,既无法累积所有符合条件元素的总和,sum函数内部还直接打印当前累加值,再加上长度计算错误,最终输出乱码般的结果。
  • 函数返回值缺失:sum函数声明为int类型却未返回任何值,属于C语言中的未定义行为。
  • 输出格式混乱:部分printf未添加正确换行,导致输出内容连在一起,不符合预期格式。

最简修正方案

直接在main函数内完成所有逻辑,避免多余函数带来的问题:

#include <stdio.h>

int main() {
    int F[5] = {1, 3, 5, 9, 8};
    int total_sum = 0;

    for (int i = 0; i < 5; i++) {
        if (F[i] % 3 == 0) {
            printf("%d\n", F[i]);
            total_sum += F[i];
        }
    }
    printf("%d\n", total_sum);

    return 0;
}

保留sum函数的修正版本

如果需要复用累加逻辑,可以修改sum函数,手动传递数组实际长度:

#include <stdio.h>

// 传入数组和真实长度,返回累加总和
int sum(int arr[], int len) {
    int total = 0;
    for (int y = 0; y < len; y++) {
        total += arr[y];
    }
    return total;
}

int main() {
    int F[5] = {1, 3, 5, 9, 8};
    int diviz[5];
    int count = 0;
    int total_sum;

    for (int i = 0; i < 5; i++) {
        if (F[i] % 3 == 0) {
            diviz[count] = F[i];
            printf("%d\n", diviz[count]);
            count++;
        }
    }

    total_sum = sum(diviz, count);
    printf("%d\n", total_sum);

    return 0;
}

版本说明

  • 最简版本直接在遍历过程中打印符合条件的元素并累加,最后输出总和,完全匹配预期输出。
  • 保留sum函数的版本先收集所有符合条件的元素,再调用sum计算总和,核心是给sum函数传递了真实的数组长度,彻底解决了指针退化导致的长度计算问题。

内容的提问来源于stack exchange,提问作者Romeo Tilipet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:35:22