C言語を使用した行列の転置方法


方法1: 二次元配列を使用して行列を転置する方法

#include <stdio.h>
#define ROWS 3
#define COLS 3
void transposeMatrix(int mat[ROWS][COLS], int transposedMat[COLS][ROWS]) {
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            transposedMat[j][i] = mat[i][j];
        }
    }
}
int main() {
    int matrix[ROWS][COLS] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    int transposedMatrix[COLS][ROWS];
    transposeMatrix(matrix, transposedMatrix);
    printf("Original Matrix:\n");
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    printf("\nTransposed Matrix:\n");
    for (int i = 0; i < COLS; i++) {
        for (int j = 0; j < ROWS; j++) {
            printf("%d ", transposedMatrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}

この方法では、二次元配列を使用して行列を表現し、入れ替えた行列を別の二次元配列に保存します。入れ替えは、元の行列の各要素を転置行列の対応する位置に代入することで行います。

方法2: ポインタと動的メモリ割り当てを使用して行列を転置する方法

#include <stdio.h>
#include <stdlib.h>
void transposeMatrix(int mat, int rows, int cols, int transposedMat) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            transposedMat[j][i] = mat[i][j];
        }
    }
}
int main() {
    int rows = 3;
    int cols = 3;
    int matrix = (int)malloc(rows * sizeof(int*));
    for (int i = 0; i < rows; i++) {
        matrix[i] = (int*)malloc(cols * sizeof(int));
    }
    int transposedMatrix = (int)malloc(cols * sizeof(int*));
    for (int i = 0; i < cols; i++) {
        transposedMatrix[i] = (int*)malloc(rows * sizeof(int));
    }
// 行列の要素を設定する
    transposeMatrix(matrix, rows, cols, transposedMatrix);
    // 転置された行列を出力する
    // 動的メモリを解放する
    return 0;
}

この方法では、ポインタと動的メモリ割り当てを使用して行列を表現します。行列の要素を設定した後、transposeMatrix関数を使用して行列を転置します。

これらの方法を使用すると、C言語で行列の転置を実装することができます。コード例は、各方法での行列の転置の実装方法を示しています。