所以我创建了一个程序,它生成一个随机的 4x4 矩阵,值范围从 0 到 17。之后,它会计算并打印每一行和每一列的总和。问题是,(1) 行总和的值不正确,(2) 最后一个元素,即 m[4][4]
,似乎值翻了一番,给出了不正确的值第 4 列的总和也是如此。这是代码:
srand(time(NULL));
printf("Generating matrix... ");
getch();
printf("\n\n");
for (i = 1; i <= 4; i++) {
for (j = 1; j <= 4; j++) {
m[i][j] = rand() % 17;
printf("%d\t", m[i][j]);
if (i == 1) { // Calculation of Row Sums
rSum[1] += m[i][j];
} else if (i == 2) {
rSum[2] += m[i][j];
} else if (i == 3) {
rSum[3] += m[i][j];
} else if (i == 4) {
rSum[4] += m[i][j];
}
if (j == 1) { // Calculation of Column Sums
cSum[1] += m[i][j];
} else if (j == 2) {
cSum[2] += m[i][j];
} else if (j == 3) {
cSum[3] += m[i][j];
} else if (j == 4) {
printf("\n");
cSum[4] += m[i][j];
}
}
}
getch();
printf("\n\n");
for (i = 1; i <= 4; i++) { // Printing of Values
printf("Sum of Row %d: %d\n", i, rSum[i]);
printf("Sum of Column %d: %d\n", i, cSum[i]);
printf("-----------------------------------------------\n");
}
return 0;
最佳答案
数组是基于 C 的 0
。你应该改变你所有的循环以这种方式迭代:
for (i = 0; i < 4; i++) {
并且还可以更改代码中使用显式索引值的其他部分。这部分可以大大简化。
数组rSum
和cSum
必须初始化为0
。如果不这样做,可能会解释您的程序计算出的错误值。
这是一个改进的版本:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int m[4][4];
int rSum[4] = { 0 };
int cSum[4] = { 0 };
int i, j;
srand(time(NULL));
printf("Generating matrix... ");
getch();
printf("\n\n");
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
m[i][j] = rand() % 17;
printf("%d\t", m[i][j]);
rSum[i] += m[i][j]; // Calculation of Row Sums
cSum[j] += m[i][j]; // Calculation of Column Sums
}
printf("\n");
}
getch();
printf("\n\n");
for (i = 0; i < 4; i++) { // Printing of Values
printf("Sum of Row %d: %d\n", i, rSum[i]);
printf("Sum of Column %d: %d\n", i, cSum[i]);
printf("-----------------------------------------------\n");
}
return 0;
}
关于C - 矩阵上错误的打印值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38649019/