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

C 언어로 하삼각 행렬과 상삼각 행렬 출력하는 프로그램 만들기

프로그램 설명

이 글에서는 배열(2차원 행렬)의 하삼각 행렬상삼각 행렬을 출력하는 C 프로그램을 작성하는 방법을 알아봅니다.

삼각 행렬(Triangular Matrix)이란?

삼각 행렬은 하삼각 행렬 또는 상삼각 행렬 중 하나에 해당하는 행렬을 의미합니다.

하삼각 행렬(Lower Triangular Matrix)

정사각형 행렬에서 주대각선 위쪽의 모든 원소가 0일 때, 이 행렬을 하삼각 행렬이라고 부릅니다.

상삼각 행렬(Upper Triangular Matrix)

반대로, 정사각형 행렬에서 주대각선 아래쪽의 모든 원소가 0일 때, 이 행렬을 상삼각 행렬이라고 부릅니다.

다음과 같은 형태의 행렬을 하삼각 행렬(또는 좌삼각 행렬)이라 하며,

$${\displaystyle L={\begin{bmatrix}\ell _{1,1}&&&&0\\\ell _{2,1}&\ell _{2,2}&&&\\\ell _{3,1}&\ell _{3,2}&\ddots &&\\\vdots &\vdots &\ddots &\ddots &\\\ell _{n,1}&\ell _{n,2}&\ldots &\ell _{n,n-1}&\ell _{n,n}\end{bmatrix}}}$$

다음과 같은 형태의 행렬을 상삼각 행렬(또는 우삼각 행렬)이라고 합니다.

$${\displaystyle U={\begin{bmatrix}u_{1,1}&u_{1,2}&u_{1,3}&\ldots &u_{1,n}\\&u_{2,2}&u_{2,3}&\ldots &u_{2,n}\\&&\ddots &\ddots &\vdots \\&&&\ddots &u_{n-1,n}\\0&&&&u_{n,n}\end{bmatrix}}}$$

일반적으로 하삼각 행렬은 변수 L로, 상삼각 행렬은 변수 U 또는 R로 표기합니다.

참고로, 상삼각 행렬이면서 동시에 하삼각 행렬인 행렬은 대각 행렬(diagonal matrix)입니다. 또한 삼각 행렬과 닮은(similar) 행렬을 삼각화 가능(triangularisable) 행렬이라고 부릅니다.

예시 — 상삼각 행렬

$${\displaystyle {\begin{bmatrix}{1}&{4}&{1}\\{0}&{6}&{4}\\{0}&{0}&{1}\end{bmatrix}}}$$

예시 — 하삼각 행렬

$${\displaystyle {\begin{bmatrix}{1}&{0}&{0}\\{2}&{8}&{0}\\{4}&{9}&{7}\end{bmatrix}}}$$

알고리즘

예시 — 다양한 크기의 행렬

C 언어로 하삼각 행렬과 상삼각 행렬 출력하는 프로그램 만들기

C 언어로 하삼각 행렬과 상삼각 행렬 출력하는 프로그램 만들기

하삼각 행렬을 만드는 방법

  1. 행(row)과 열(column)의 인덱스 위치를 확인합니다.
  2. 열 위치가 행 위치보다 크면(즉, 주대각선 위쪽이면) 해당 위치의 값을 0으로 만듭니다.

상삼각 행렬을 만드는 방법

  1. 행과 열의 인덱스 위치를 확인합니다.
  2. 열 위치가 행 위치보다 작으면(즉, 주대각선 아래쪽이면) 해당 위치의 값을 0으로 만듭니다.

C 언어로 하삼각 행렬과 상삼각 행렬 출력하는 프로그램 만들기

예제 코드

/* 하삼각 행렬과 상삼각 행렬을 구하는 프로그램 */
#include<stdio.h>
int main() {
    int rows, cols, r, c, matrix[10][10];
    clrscr(); /* 화면 지우기 */
    printf("Please enter the number of rows for the matrix: ");
    scanf("%d", &rows);
    printf("\n");
    printf("Please enter the number of columns for the matrix: ");
    scanf("%d", &cols);
    printf("\n");
    printf("Please enter the elements for the Matrix: \n");
    for(r = 0; r < rows; r++){
        for(c = 0;c < cols;c++){
            scanf("%d", &matrix[r][c]);
        }
    }
    printf("\n The Lower Triangular Matrix is: ");
    for(r = 0; r < rows; r++){
        printf("\n");
        for(c = 0; c < cols; c++){
            if(r >= c){
                printf("%d\t ", matrix[r][c]);
            }
            else{
                printf("0");
                printf("\t");
            }
        }
    }
    printf("\n\n The Upper Triangular Matrix is: ");
    for(r = 0; r < rows; r++){
        printf("\n");
        for(c = 0; c < cols; c++){
            if(r > c){
                printf("0");
                printf("\t");
            }
            else{
                printf("%d\t ", matrix[r][c]);
            }
        }
    }
    getch();
    return 0;
}

참고: 위 코드의 clrscr()getch() 함수는 Turbo C 계열 컴파일러에서만 제공되는 함수입니다. GCC나 Visual Studio 등 최신 컴파일러 환경에서 실행할 경우 이 두 줄을 삭제하고, 대신 #include<conio.h> 관련 호출을 제거한 뒤 표준 입출력만 사용하면 됩니다.

핵심 로직 요약

  • 하삼각 행렬: 행 인덱스(r)가 열 인덱스(c)보다 크거나 같으면 원래 값을 출력하고, 그렇지 않으면 0을 출력합니다.
  • 상삼각 행렬: 행 인덱스(r)가 열 인덱스(c)보다 크면 0을 출력하고, 그렇지 않으면 원래 값을 출력합니다.

실행 결과

C 언어로 하삼각 행렬과 상삼각 행렬 출력하는 프로그램 만들기