Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어로 행렬의 주대각선과 부대각선 요소 교환하는 프로그램

문제 개요

이번 글에서는 정사각행렬의 주대각선(왼쪽 위 → 오른쪽 아래) 요소와 부대각선(오른쪽 위 → 왼쪽 아래) 요소를 서로 교환하는 C 프로그램을 작성해 보겠습니다.

행렬의 크기(m×n)는 프로그램 실행 시 사용자로부터 직접 입력받습니다. 만약 입력된 행과 열의 값이 서로 다르다면 해당 행렬은 정사각행렬이 아니므로, "정사각행렬이 아닙니다"라는 메시지를 출력하도록 처리합니다.

주대각선과 부대각선의 교환은 오직 정사각행렬(n×n)에서만 가능하다는 점을 기억하세요.

해결 방법

주어진 행렬의 대각선 요소를 교환하는 C 프로그램의 핵심 아이디어는 다음과 같습니다.

i번째 행에서 주대각선 요소는 ma[i][i], 부대각선 요소는 ma[i][m-i-1]에 위치합니다. 따라서 임시 변수를 이용해 두 값을 맞바꾸면 됩니다.

for (i = 0; i < m; ++i) {
    a = ma[i][i];              // 주대각선 요소 임시 저장
    ma[i][i] = ma[i][m-i-1];   // 부대각선 요소를 주대각선 위치에 저장
    ma[i][m-i-1] = a;          // 임시 저장한 값을 부대각선 위치에 저장
}

전체 소스 코드

다음은 행렬의 대각선 요소를 교환하는 전체 C 프로그램입니다.

#include<stdio.h>
main() {
    int i, j, m, n, a;
    static int ma[10][10];
    printf("Enter the order of the matrix m and n\n");
    scanf("%dx%d", &m, &n);
    if (m == n) {
        printf("Enter the co-efficients of the matrix\n");
        for (i = 0; i < m; ++i) {
            for (j = 0; j < n; ++j) {
                scanf("%d", &ma[i][j]);
            }
        }
        printf("The given matrix is \n");
        for (i = 0; i < m; ++i) {
            for (j = 0; j < n; ++j) {
                printf(" %d", ma[i][j]);
            }
            printf("\n");
        }
        // 주대각선과 부대각선 요소 교환
        for (i = 0; i < m; ++i) {
            a = ma[i][i];
            ma[i][i] = ma[i][m-i-1];
            ma[i][m-i-1] = a;
        }
        printf("Matrix after changing the \n");
        printf("Main & secondary diagonal\n");
        for (i = 0; i < m; ++i) {
            for (j = 0; j < n; ++j) {
                printf(" %d", ma[i][j]);
            }
            printf("\n");
        }
    }
    else
        printf("The given order is not square matrix\n");
}

실행 결과

위 프로그램을 컴파일하고 실행하면 다음과 같은 결과를 확인할 수 있습니다.

Run 1:
Enter the order of the matrix m and n
3x3
Enter the co-efficient of the matrix
1
2
3
4
5
6
7
8
9
The given matrix is
1 2 3
4 5 6
7 8 9
Matrix after changing the
Main & secondary diagonal
3 2 1
4 5 6
9 8 7

Run 2:
Enter the order of the matrix m and n
4x3
The given order is not square matrix

동작 원리 정리

첫 번째 실행 예시(3×3 행렬)를 보면, 원래 행렬에서 1↔3, 5↔5, 7↔9가 서로 교환되어 결과 행렬이 만들어졌습니다. 가운데 요소인 5는 주대각선과 부대각선이 만나는 지점이므로 그대로 유지됩니다.

두 번째 실행 예시처럼 4×3처럼 행과 열의 크기가 다른 경우에는 정사각행렬이 아니므로 교환 작업 없이 안내 메시지만 출력되고 종료됩니다.

이 프로그램의 시간 복잡도는 O(n)으로, 단 한 번의 반복문만으로 모든 대각선 요소를 교환할 수 있어 매우 효율적입니다.