二维数组列求和问题求助:已实现行求和,列求和失败
解决二维数组列求和的问题
我看了你的代码,行求和的逻辑完全没问题,但列求和部分确实有两个关键问题导致结果不符合预期:
问题分析
- 循环顺序搞反了:你现在是先遍历行再遍历列,这种逻辑是逐个扫过每个元素,而不是按列累加。列求和应该先固定列,再遍历该列对应的所有行元素。
- 累加变量初始化位置错误:
columnAdder被放在了最内层循环里,每次循环都会重置为0,所以每次只能加到当前的单个元素值,根本没法累加整列的总和。
修正后的代码
#include <iostream> using namespace std; int main() { const int ROW1 = 29; const int COL1 = 5; int days[ROW1][COL1] = { { 1, 2, 3, 4, 5 }, { 1, 2, 3, 4, 5 }, // 中间重复行与原代码一致,此处省略 { 1, 2, 3, 4, 5 }, }; // 行求和(原代码正确,保留) for (int k = 0; k < ROW1; k++) { int rowAdder = 0; for (int l = 0; l < COL1; l++) { rowAdder += days[k][l]; } cout << "The total of row " << k + 1 << " is " << rowAdder << "." << endl; } cout << endl; // 修正后的列求和代码 for (int n = 0; n < COL1; n++) { // 先遍历列 int columnAdder = 0; // 每列开始前初始化累加变量 for (int m = 0; m < ROW1; m++) { // 再遍历该列的所有行 columnAdder += days[m][n]; } // 累加完该列所有元素后再输出结果 cout << "The total of column " << n + 1 << " is " << columnAdder << "." << endl; } return 0; }
改动说明
- 调整循环顺序:外层循环遍历列索引
n,内层循环遍历行索引m,这样就能依次处理每一列的所有行元素。 - 移动累加变量位置:把
columnAdder的初始化放在列循环的开头,这样每计算一列时,累加器都会从0开始,然后把该列的29个元素逐个加进去。 - 调整输出位置:把输出语句移到内层循环外面,等整列的元素都累加完成后,再输出该列的总和,和行求和的输出格式保持一致。
预期输出
修正后运行代码,列求和部分会输出:
The total of column 1 is 29. The total of column 2 is 58. The total of column 3 is 87. The total of column 4 is 116. The total of column 5 is 145.
内容的提问来源于stack exchange,提问作者user6378390
相关产品推荐
相关产品推荐

