C言語での行列の転置操作


  1. 2次元配列を使用する方法: 2次元配列を使用して行列を表現し、その要素を転置することで行と列を入れ替えることができます。以下は、この方法のコード例です。

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

    上記のコードでは、transposeMatrix関数が与えられた行列を転置します。main関数では、元の行列と転置後の行列を表示しています。

  2. ポインタを使用する方法: 行列を1次元配列として表現し、ポインタを使用して要素をアクセスする方法もあります。以下は、この方法のコード例です。

    #include <stdio.h>
    #define ROWS 3
    #define COLS 3
    void transposeMatrix(int *matrix, int rows, int cols) {
       int temp;
       for (int i = 0; i < rows; i++) {
           for (int j = i + 1; j < cols; j++) {
               temp = *(matrix + i * cols + j);
               *(matrix + i * cols + j) = *(matrix + j * cols + i);
               *(matrix + j * cols + i) = temp;
           }
       }
    }
    int main() {
       int matrix[ROWS][COLS] = {{1, 2, 3},
                                 {4, 5, 6},
                                 {7, 8, 9}};
       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");
       }
       transposeMatrix(&matrix[0][0], ROWS, COLS);
       printf("Transposed Matrix:\n");
       for (int i = 0; i < ROWS; i++) {
           for (int j = 0; j < COLS; j++) {
               printf("%d ", matrix[i][j]);
           }
           printf("\n");
       }
       return 0;
    }

    上記のコードでは、transposeMatrix関数がポインタを使用して与えられた行列を転置します。main関数では、元の行列と転置後の行列を表示しています。

これらの方法を使用すると、C言語で行列の転置を実装することができます。どちらの方法も同じ結果を得ることができますので、好みやプログラムの要件に合わせて適切な方法を選択してください。以上が、C言語で行列の転置を行うためのコード例と解説です。