转置矩阵会导致输出错误

时间:2016-09-24 20:10:05

标签: c++ matrix visual-studio-2013 transpose

我试图将4乘5矩阵转置为5乘4矩阵。这是我到目前为止所做的:

#include <stdio.h>

void transposeMatrix(int A2[4][5],int A1[5][4])
{
    int i, j;

    for (i = 0; i < 5; ++i){
        for (j = 0; j < 4; ++j)
            A1[j][i]=A2[i][j];
    }
}

int main(void)
{
    int A2[4][5] = {
        { 7, 4, 2, 1, 12 },
        { 4, 6, 22, 11, 6 },
        { 12, 10, 3, 1, 2 },
        { 20, 4, 1, 3, 4 },
    };
    int A1[5][4];
    int i, j;

    printf("Original matrix:\n ");
    for (i = 0; i < 4; ++i){
        for (j = 0; j < 5; ++j)
            printf("%5i", A2[i][j]);
        printf("\n");
    }

    printf("Transposed matrix:\n");
    transposeMatrix(A2, A1);
    for (i = 0; i < 5; ++i){
        for (j = 0; j < 4; ++j)
            printf("%5i", A1[i][j]);
        printf("\n");
    }
    return 0;
}

当我运行我的代码时,这就是我得到的:

Original matrix:
     7    4    2    1   12
    4    6   22   11    6
   12   10    3    1    2
   20    4    1    3    4
Transposed matrix:
    7    4   12   20
-858993460    6   10    4
998952744   22    3    1
11599080   11    1    3
10495049-858993460-858993460-858993460

看起来它只转置第一行。我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的代码中有一个错误。

这是transpose函数中的索引问题。

for (i = 0; i < 5; ++i){
    for (j = 0; j < 4; ++j)
        A1[i][j]=A2[j][i];
}

而不是A1[j][i]=A2[i][j]