C言語での行列の転置を行うプログラム


方法1: 2次元配列を使用して転置を行う方法

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

方法2: 1次元配列を使用して転置を行う方法

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

上記のコード例では、方法1では2次元配列を使用し、方法2では1次元配列を使用して行列の転置を行っています。方法1では、入力行列と結果行列を別々の配列として取り扱い、要素を入れ替えることで転置を行います。方法2では、入力行列そのものを転置させます。