转置矩阵会导致错误的输出

Transposing a matrix results in wrong output

本文关键字:错误 输出 转置      更新时间:2023-10-16

我正试图将一个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;
}

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

<>之前原始矩阵:7 4 2 1 124 6 22 11 612 10 3 1220 . 4 . 1 . 3转置矩阵:7 4 12 20-858993460 6 10998952744 22 3111599080 11 1310495049-858993460-858993460-858993460之前

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

你的代码中有一个错误。

这是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]