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

C 언어로 별표(*) 육각형 패턴 출력하기

정수 n이 하나 주어졌을 때, 이를 이용해 육각형 모양의 패턴을 생성하고 화면에 출력하는 것이 이번 글의 목표입니다.

예시

입력: n = 5
출력:

C 언어로 별표(*) 육각형 패턴 출력하기

입력: n = 4
출력:

C 언어로 별표(*) 육각형 패턴 출력하기

문제 해결 접근 방식

육각형 패턴을 한 번에 그리기는 어렵기 때문에, 패턴을 세 구역으로 나누어 단계별로 출력하는 방법을 사용합니다.

  • 사용자로부터 정수 'n'을 입력받습니다.
  • 전체 패턴을 윗부분(upper), 중간부분(middle), 아랫부분(lower)의 세 구역으로 나눕니다.
  • 윗부분 출력: 루프 변수 i를 0부터 n 미만까지 1씩 증가시키며 각 행을 출력합니다.
  • 중간부분 출력: 루프 변수 m을 0부터 n-2 미만까지 1씩 증가시키며 좌우 테두리만 별표로 채운 행을 반복 출력합니다.
  • 아랫부분 출력: 루프 변수 h를 res(n-1)부터 시작해 0 이상일 때까지 1씩 감소시키며 윗부분과 대칭 형태로 출력합니다.
  • 각 위치마다 조건을 검사하여 별표(*) 또는 공백을 출력합니다.

알고리즘

START
Step 1 -> 육각형 패턴을 출력할 함수 선언
    void pattern(int n)
    int len = 2 * n - 1 로 선언 및 초기화
    Loop For int i = 0, i < n, i++   // 윗부분 출력
        int temp = i + n 으로 선언 및 초기화
        Loop For int k = 0, k < temp, k++
            IF ((k == n + i - 1) || (k == n - i - 1))
                * 출력
            ELSE
                공백 출력
            END IF
            개행(\n) 출력
        End Loop
    End Loop
    Loop For int m = 0, m < n - 2, m++   // 중간부분 출력
        Loop For int j = 0, j < len, j++
            if (j == 0 || j == len - 1)
                * 출력
            ELSE
                공백 출력
            END IF
        End Loop
        개행(\n) 출력
    End Loop
    int res = n - 1 로 선언 및 초기화
    Loop For int h = res, h >= 0, h--   // 아랫부분 출력
        int temp2 = h + n 으로 선언 및 초기화
        Loop For int k = 0, k < temp2, k++
            if ((k == n + h - 1) || (k == n - h - 1))
                * 출력
            ELSE
                공백 출력
            END IF
        End Loop
        개행(\n) 출력
    End Loop
End Function
Step 2 -> main() 함수에서
    int n = 5 선언
    pattern(n) 호출
STOP

C 코드 구현

위 알고리즘을 실제 C 코드로 구현하면 다음과 같습니다.

#include <stdio.h>
// 육각형 패턴을 출력하는 프로그램
void pattern(int n) {
    int len = 2 * n - 1;
    // 패턴의 윗부분을 출력하는 for 루프
    for (int i = 0; i < n; i++) {
        int temp = i + n;
        for (int k = 0; k < temp; k++) {
            if ((k == n + i - 1) || (k == n - i - 1))
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
    // 패턴의 중간부분을 출력하는 for 루프
    for (int m = 0; m < n - 2; m++) {
        for (int j = 0; j < len; j++) {
            if (j == 0 || j == len - 1)
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
    // 패턴의 아랫부분을 출력하는 for 루프
    int res = n - 1;
    for (int h = res; h >= 0; h--) {
        int temp2 = h + n;
        for (int k = 0; k < temp2; k++) {
            if ((k == n + h - 1) || (k == n - h - 1))
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
}
int main() {
    int n = 5;
    pattern(n);
    return 0;
}

실행 결과

n = 5를 입력했을 때 위 프로그램을 실행하면 다음과 같은 육각형 패턴이 출력됩니다.

C 언어로 별표(*) 육각형 패턴 출력하기

코드 동작 원리 요약

  • 윗부분: 각 행에서 별표가 출력되는 위치는 k == n - i - 1(왼쪽 대각선)과 k == n + i - 1(오른쪽 대각선) 두 곳입니다. i가 커질수록 두 별표 사이의 간격이 넓어져 위쪽 뾰족한 부분이 만들어집니다.
  • 중간부분: len = 2n - 1 길이의 행에서 첫 번째 칸(j == 0)과 마지막 칸(j == len - 1)만 별표를 출력해 육각형의 좌우 옆면을 형성합니다.
  • 아랫부분: 윗부분과 동일한 조건식을 역순(h 감소)으로 적용해 아래쪽 뾰족한 부분을 완성합니다.