将矩阵的主对角线与数字相乘

时间:2013-07-19 13:20:44

标签: c matrix multidimensional-array

我的程序必须接收一个数字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;
}

6 个答案:

答案 0 :(得分: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");
}

答案 1 :(得分: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");
}   

答案 2 :(得分:0)

此代码似乎正常运行,请检查。

for(row=0;row<4;i++)
{
    mat[row][row]*=k;
    for(col=0;col<4;j++)
    {
        printf("%d ",mat[row][col]);
    }
    printf("\n");
}

答案 3 :(得分:0)

您应该初始化变量k

scanf("%d", &k);

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

答案 4 :(得分: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;
}

答案 5 :(得分: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