C语言二维数组指定列求和:如何修改全列求和代码按索引计算单列和
二维数组指定列求和实现方案
原代码核心问题
- 数组下标使用逻辑错误:C语言二维数组的下标规则是
arr[行索引][列索引],你定义的arr是4行3列,行索引范围是03,列索引范围是02,原代码中循环i范围到3(LINE=4),作为列下标使用时已经越界,会读取到非法内存值。 - 冗余双重循环:指定列求和只需要固定列索引,遍历所有行的对应位置累加即可,双重循环会遍历所有元素累加,得到的是全部元素的和,不符合需求。
你之前硬编码为arr[0][i]的修改也不对,该写法遍历的是第一行的所有元素,不是第一列的所有元素,自然无法得到正确结果。
实现方案
固定目标列索引,仅遍历所有行累加对应列的元素即可,可额外增加列索引合法性校验,避免越界访问。
修改后完整代码如下:
#include <stdio.h> #define LINE 4 #define COLUMN 3 int main() { int arr[LINE][COLUMN] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; // 定义要求和的目标列索引,可自行修改为需要的值 int target_col = 0; int csum = 0; // 列索引合法性校验,避免越界访问 if (target_col < 0 || target_col >= COLUMN) { printf("输入的列索引非法!\n"); return 1; } printf("\nColumn Sum of column %d....\n", target_col); // 遍历所有行,累加目标列的元素 for (int i = 0; i < LINE; i++) { csum += arr[i][target_col]; printf("当前行:%d | 累计和:%d \n", i, csum); } printf("\n指定列的元素和为 %d\n",csum); return 0; }
当target_col设置为0时,输出结果为22,符合预期需求。
内容的提问来源于stack exchange,提问作者Vinnicius Stein
相关产品推荐
相关产品推荐

