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];
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话:问题:
回答:
根据问题描述,您期望代码能够正确读取输入的数字,将其存储在数组a中,并能够输出计算的结果。具体而言,您想要计算每一行和每一列的加和结果,将每行的加和结果存储在一个整型变量中,并输出这些结果。
您提到,您计划使用两个数组来分别存储行和列的加和结果,并且只需要一个循环来计算结果。然而,您发现答案中使用了两个循环,并将每行的加和结果存储在一个整型变量中,并进行输出。您希望优化的部分应该是将计算结果存储在数组中的方法,以便更方便地进行输出。
您认为这样会更好的原因可能是: - 使用数组可以更方便地存储和访问每一行和每一列的加和结果,使代码更容易维护和理解。 - 只需要一个循环来计算结果,可以减少代码的复杂性,并提高执行效率。
请提供相关代码以便进一步分析和解决问题。
第18行错误: for (int j = 0; i < N; j++) 修改为: for (int j = 0; j < N; j++)