【C言語】行列の転置行列を計算する方法

この記事では、C言語を使って行列の転置方法を学ぶことができます。

具体的には、2次元配列を使った方法とポインタを使った方法の2つを紹介します。

目次から探す

行列の転置方法

行列の転置とは、行と列を入れ替える操作のことです。

C言語では、2次元配列を使った方法とポインタを使った方法の2つの方法があります。

それぞれの方法について詳しく見ていきましょう。

方法1: 2次元配列を使った方法

行列の転置を行うためには、2次元配列を使って行と列を入れ替える必要があります。

以下に、2次元配列を使った行列の転置の手順を示します。

  1. 元の行列を2次元配列として宣言します。
  2. 転置後の行列を格納するための新しい2次元配列を宣言します。
  3. 元の行列の行数と列数を取得します。
  4. 元の行列の行と列を入れ替えて、新しい2次元配列に格納します。

以下に、具体的なコード例を示します。

#include <stdio.h>
#define ROWS 3
#define COLS 3
void transposeMatrix(int matrix[ROWS][COLS], int transposedMatrix[COLS][ROWS]) {
    int i, j;
    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLS; j++) {
            transposedMatrix[j][i] = matrix[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("元の行列:\n");
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    printf("\n転置後の行列:\n");
    for (int i = 0; i < COLS; i++) {
        for (int j = 0; j < ROWS; j++) {
            printf("%d ", transposedMatrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}

上記のコードでは、3×3の行列を転置しています。

元の行列と転置後の行列をそれぞれ表示しています。

方法2: ポインタを使った方法

行列の転置を行うためには、ポインタを使って行と列を入れ替えることもできます。

以下に、ポインタを使った行列の転置の手順を示します。

  1. 元の行列を2次元配列として宣言します。
  2. 転置後の行列を格納するための新しい2次元配列を宣言します。
  3. 元の行列の行数と列数を取得します。
  4. ポインタを使って、元の行列の行と列を入れ替えて、新しい2次元配列に格納します。

以下に、具体的なコード例を示します。

#include <stdio.h>
#define ROWS 3
#define COLS 3
void transposeMatrix(int *matrix, int *transposedMatrix, int rows, int cols) {
    int i, j;
    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            *(transposedMatrix + j * rows + i) = *(matrix + i * cols + j);
        }
    }
}
int main() {
    int matrix[ROWS][COLS] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    int transposedMatrix[COLS][ROWS];
    transposeMatrix((int *)matrix, (int *)transposedMatrix, ROWS, COLS);
    printf("元の行列:\n");
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    printf("\n転置後の行列:\n");
    for (int i = 0; i < COLS; i++) {
        for (int j = 0; j < ROWS; j++) {
            printf("%d ", transposedMatrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}

上記のコードでは、3×3の行列を転置しています。

元の行列と転置後の行列をそれぞれ表示しています。

この記事では、行列の要素は整数型として扱っていますが、実際のプログラムでは他のデータ型(float,double)にも対応することができます。

また、行列のサイズも任意の値に変更することができます。

目次から探す