C - 矩阵上错误的打印值

标签 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;

最佳答案

数组是基于 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;
}

关于C - 矩阵上错误的打印值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38649019/

相关文章:

python - numpy 数组的 np.max(x ,axis = 1) 和 x.max(axis = 1) 之间的差异

objective-c - `.A`中的 `libobjc.A.dylib`是什么

c - OpenGL glutWireCube 可以工作,但 glutWireCylinder 不能。我究竟做错了什么?

c - 使用凯撒密码的 C 加密

c - 如何将文件的第一行(字符串)和第一列(字符串)作为C中二维数组的索引

python-2.7 - 如何在 Python 中解析具有八进制值的 char 数组?

python - 删除pytorch中的零维

c - C中具有混合数据类型的指针矩阵

javascript - 使用 JavaScript 在 HTML 表单字段中传递二维数组

java - 添加矩阵和数组