为什么在这个C循环中乘法加倍?

nr9pn0ug  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(150)

这个代码应该接受输入,形成一个3x3矩阵,然后把每一项乘以该行的对角线元素,但是,由于某种原因,我不知道,当列索引大于行索引时,它乘以对角线元素两次。

#include <stdio.h>

#define R 3

int a[R][R], i, j;

int main(void) {
    for (i = 0; i < R; i++) {
        for (j = 0; j < R; j++) {
            printf("\nInsira o n%i%i ", i, j);
            scanf("%i", &a[i][j]);
        }
    }

    for (i = 0; i < R; i++) {
        for (j = 0; j < R; j++) {
            a[i][j] = a[i][j] * a[i][i];
        }
    }

    for (i = 0; i < R; i++) {
        printf("\n");
        for (j = 0; j < R; j++) {
            printf("%i   ", a[i][j]);
        }
    }
}

输入:

9 8 7
6 5 4
3 2 1

输出:

81 648 567
30 25 100
3 2 1
tjvv9vkg

tjvv9vkg1#

给定行的对角线值在该行完全相乘之前被更改,因此一旦列经过对角线,相乘将使用该对角线的 * 新 * 值,而不是旧值。
您可以按如下方式修复它(并提高速度):

for (i = 0; i < R; i++) {
    int tmp = a[i][i];
    for (j = 0; j < R; j++) {
        a[i][j] *= tmp;
    }
}

此外,如前所述,ij都应该是局部变量。

相关问题