転置行列の出力
この最終ステップでは、読みやすさとエラー処理を向上させたフォーマットで転置行列を出力する方法を学びます。前のプログラムを強化して、よりプロフェッショナルな出力にします。
matrix_transpose.c ファイルを開きます。
cd ~/project
nano matrix_transpose.c
以前のコードを以下の改良された実装に置き換えます。
#include <stdio.h>
#define MAX_ROWS 100
#define MAX_COLS 100
void printMatrix(int matrix[MAX_ROWS][MAX_COLS], int rows, int cols, const char* title) {
printf("%s:\n", title);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%4d ", matrix[i][j]);
}
printf("\n");
}
printf("\n");
}
int main() {
int rows, cols;
int matrix[MAX_ROWS][MAX_COLS];
int transposed[MAX_COLS][MAX_ROWS];
// 入力検証
do {
printf("行数を入力してください (1-%d): ", MAX_ROWS);
scanf("%d", &rows);
} while (rows <= 0 || rows > MAX_ROWS);
do {
printf("列数を入力してください (1-%d): ", MAX_COLS);
scanf("%d", &cols);
} while (cols <= 0 || cols > MAX_COLS);
// 行列要素を入力
printf("行列要素を入力してください:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("要素 [%d][%d] を入力してください:", i, j);
scanf("%d", &matrix[i][j]);
}
}
// 行列を転置する
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
transposed[j][i] = matrix[i][j];
}
}
// フォーマットされた出力で行列を出力
printMatrix(matrix, rows, cols, "元の行列");
printMatrix(transposed, cols, rows, "転置行列");
return 0;
}
プログラムをコンパイルして実行します。
gcc matrix_transpose.c -o matrix_transpose
./matrix_transpose
実行例:
行数を入力してください (1-100): 3
列数を入力してください (1-100): 3
行列要素を入力してください:
要素 [0][0] を入力してください: 1
要素 [0][1] を入力してください: 2
要素 [0][2] を入力してください: 3
要素 [1][0] を入力してください: 4
要素 [1][1] を入力してください: 5
要素 [1][2] を入力してください: 6
要素 [2][0] を入力してください: 7
要素 [2][1] を入力してください: 8
要素 [2][2] を入力してください: 9
元の行列:
1 2 3
4 5 6
7 8 9
転置行列:
1 4 7
2 5 8
3 6 9
今回のバージョンで改善された点:
- 行列の次元に対する入力検証を追加しました。
- より良いコード構造のために、
printMatrix() 関数を別途作成しました。
%4d を使用して、整数の表示を揃え、行列の出力のフォーマットを改善しました。
- 行列出力にタイトルを追加して、分かりやすくしました。
- より頑健に、様々なサイズの行列に対応できるようになりました。