전치 행렬 출력
이 마지막 단계에서는 가독성과 오류 처리를 개선하여 전치 행렬을 서식화하고 출력하는 방법을 배웁니다. 이전 프로그램을 개선하여 출력을 더욱 전문적으로 만들 것입니다.
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를 사용하여 정렬된 서식으로 행렬 출력을 개선했습니다.
- 명확성을 위해 행렬 출력에 제목을 추가했습니다.
- 다양한 행렬 크기를 더욱 안정적으로 처리합니다.