《C 语言程序设计:现代方法》第 8 章第 7 道题,我的代码的问题?

C 语言的一个问题,具体是《C 语言程序设计:现代方法》第 8 章第 7 道编程题。题目要求进行 5 次输入,每次输入 5 个数字,并创建一个 5x5 的数组来储存这些数据,输出数组每行、每列的加和结果。

我的代码如下:

#include <stdio.h>

#define N 5

int main(void)
{
  int a[N][N];
  int row_sum[N] = {0}, col_sum[N] = {0};

  for (int i = 0; i < N; i++) {
    printf("Enter row %d: ", i + 1);
    for (int j = 0; j < N; j++)
      scanf("%d", &a[i][j]);
    getchar();
  }

  for (int i = 0; i < N; i++) {
    for (int j = 0; i < N; j++) {
      row_sum[i] += a[i][j];
      col_sum[i] += a[j][i];
    }
  }

  printf("\nRow totals:");
  for (int i = 0; i < N; i++)
    printf(" %d", row_sum[i]);
  printf("\nColumns totals:");
  for (int i = 0; i < N; i++)
    printf(" %d", col_sum[i]);
  printf("\n");

  return 0;
}

以上代码的运行结果可以正常读入输入的数字并将之储存在数组 a 中,但是输出不了计算的结果。我这里打算利用两个数组分别存储行加和、列加和的结果,这样计算结果的话,只需要一个循环。我看答案用了两个循环,以计算行加和的循环为例,它是将每行的加和结果存储到一个整型变量中,并进行输出。

以上代码哪里错了呢?

for (int i = 0; i < N; i++) {
    for (int j = 0; i < N; j++) { //这里是j不是i
      row_sum[i] += a[i][j];
      col_sum[i] += a[j][i];
    }
}
->
for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
      row_sum[i] += a[i][j];
      col_sum[j] += a[i][j];
    }
}

因为你i,j控制的是行和列,所以每个值应该加到第i行,第j列,因此你累加部分有误,这样修改:


  for (int i = 0; i < N; i++) {
    for (int j = 0; i < N; j++) {
      row_sum[i] += a[i][j];
      col_sum[i] += a[j][i];
    }
  }
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

第18行错误: for (int j = 0; i < N; j++) 修改为: for (int j = 0; j < N; j++)