所以我创建了一个生成随机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;
答案 0 :(得分:4)
数组是基于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;
}