C - 矩阵上的打印值错误

时间:2016-07-29 01:08:33

标签: c arrays matrix

所以我创建了一个生成随机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;

1 个答案:

答案 0 :(得分:4)

数组是基于C的0。您应该将所有循环更改为以这种方式迭代:

for (i = 0; i < 4; i++) {

并且还会更改代码中使用显式索引值的其他部分。这部分可以大大简化。

必须将数组rSumcSum初始化为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;
}