0

我的程序必须接收一个数字 k,一个 4x4 矩阵,并且 k 必须乘以该矩阵的主对角线。输出应该是输入矩阵,但是,它的主对角线乘以 k。例如,我给出 k = 2 和以下矩阵:

1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1

输出应该是:

2 1 1 1
1 2 1 1
1 1 2 1
1 1 1 2

但我的程序给出以下输出:

2 1 1 1 
1 1 1 1
1 1 1 1
1 1 1 1

这是为什么?我该怎么做才能乘以主对角线而不仅仅是矩阵的第一个数字?

我的代码:

#include <stdio.h>

int main() {

    int k;
    int mult = 0;

    int matrix[4][4];
    int row, column;

    for (row = 0; row < 4; row++) {
        for (column = 0; column < 4; column++) {
            scanf("%d", &matrix[row][column]);
        }
    }

    for(row = 0 ; row < 4 ; row++)
    {
        for(column = 0 ; column < 4 ; column++) {
            printf("%3d", matrix[row][column]);

            mult = k * matrix[row][row];
        }
        printf(" \n");
    }

    return 0;
}
4

6 回答 6

2

如果要更改矩阵值,只需更改循环操作,如下所示:

for(row = 0 ; row < 4 ; row++)
{
    for(column = 0 ; column < 4 ; column++) {
        if ( row == column )
            matrix[row][column] *= k;
        printf("%3d", matrix[row][column]);
    }
    printf(" \n");
}
于 2013-07-19T13:26:12.220 回答
2

为什么不这样:

for(row = 0 ; row < 4 ; row++)
{
    for(column = 0 ; column < 4 ; column++) {
        if(row == column)
            matrix[row][column] *= k;
        printf("%3d", matrix[row][column]);
    }
    printf(" \n");
}   
于 2013-07-19T13:26:17.837 回答
0

此代码似乎有效,请检查。

for(row=0;row<4;i++)
{
    mat[row][row]*=k;
    for(col=0;col<4;j++)
    {
        printf("%d ",mat[row][col]);
    }
    printf("\n");
}
于 2013-07-19T13:44:00.907 回答
0

你应该初始化变量k

scanf("%d", &k);

并且您没有更改输入矩阵的内容。

于 2013-07-19T13:55:04.117 回答
0

如果您只想获得正确的输出,请尝试以下操作:

#include <stdio.h>

int main() {

    int k;
    int matrix[4][4];
    int row, column;
    printf("input k :\n");
    scanf("%d,"&k);
    printf("input matrix :\n");
    for (row = 0; row != 4; ++row) {
        for (column = 0; column != 4; ++column) {
            scanf("%d", &matrix[row][column]);
        }
    }

    for(row = 0 ; row != 4 ; ++row)
    {
        for(column = 0 ; column != 4 ; ++column) {
            printf("%3d",row != column ?  matrix[row][column]:k*matrix[row][cloumn]);
        }
        printf(" \n");
    }

    return 0;
}
于 2013-07-19T14:06:15.613 回答
0

要仅将数字与选定的模式相乘,您需要进行一些检查(过滤器),以便该值仅在此处相乘。

尝试上面其他人提到的代码 -

for(row = 0 ; row < 4 ; row++)
{
    for(column = 0 ; column < 4 ; column++) {
        **if ( row == column )** //this is the filter 
            matrix[row][column] *= k;
        printf("%3d", matrix[row][column]);
    }
    printf(" \n");
}

对于对角线,行和列值始终相同 - 就像你的情况一样 -

1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1

在通用形式中,它可以写成 -

a00 a01 a02 a03 .... a0n

a10 a11 a12 a13 .... a1n

a20 a21 a22 a23.......a2n

am0 am1 am2 am3 ....... a(mn)

这里的对角线元素是 - a00 ,a11,a22 ,a33 ,....a(mn) 其中 m= n

于 2018-01-22T12:34:54.330 回答