この記事では、C言語を使って行列の転置方法を学ぶことができます。
具体的には、二次元配列を使った方法とポインタを使った方法の2つを紹介します。
目次から探す
行列の転置方法
行列の転置とは、行と列を入れ替える操作のことです。
C言語では、二次元配列を使った方法とポインタを使った方法の2つの方法があります。
それぞれの方法について詳しく見ていきましょう。
方法1: 二次元配列を使った方法
行列の転置を行うためには、二次元配列を使って行と列を入れ替える必要があります。
以下に、二次元配列を使った行列の転置の手順を示します。
- 元の行列を二次元配列として宣言します。
- 転置後の行列を格納するための新しい二次元配列を宣言します。
- 元の行列の行数と列数を取得します。
- 元の行列の行と列を入れ替えて、新しい二次元配列に格納します。
以下に、具体的なコード例を示します。
#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: ポインタを使った方法
行列の転置を行うためには、ポインタを使って行と列を入れ替えることもできます。
以下に、ポインタを使った行列の転置の手順を示します。
- 元の行列を二次元配列として宣言します。
- 転置後の行列を格納するための新しい二次元配列を宣言します。
- 元の行列の行数と列数を取得します。
- ポインタを使って、元の行列の行と列を入れ替えて、新しい二次元配列に格納します。
以下に、具体的なコード例を示します。
#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の行列を転置しています。
元の行列と転置後の行列をそれぞれ表示しています。
また、行列のサイズも任意の値に変更することができます。