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

C 언어로 속이 찬 마름모와 속이 빈 마름모 패턴 출력하는 프로그램 만들기

프로그램 개요

이 글에서는 C 언어를 사용해 콘솔 화면에 속이 찬 마름모(Solid Rhombus)속이 빈 마름모(Hollow Rhombus) 별표(*) 패턴을 출력하는 방법을 알아봅니다. 두 패턴 모두 사용자가 입력한 행(row) 수에 따라 크기가 결정되며, 중첩 반복문(for 문)을 활용하면 간단하게 구현할 수 있습니다.

알고리즘

1. 속이 빈 마름모

  1. 사용자로부터 마름모를 구성할 행 수를 입력받습니다.
  2. 입력받은 행 수만큼의 크기를 가진 속이 빈 마름모를 생성합니다.
  3. 첫 번째 행에는 행 수와 동일한 개수의 별(*)을 모두 출력합니다.
  4. 중간 행들은 각 줄의 첫 번째 별과 마지막 별만 출력하고, 그 사이는 공백으로 비워 둡니다.
  5. 마지막 행 역시 첫 번째 행처럼 행 수와 동일한 개수의 별을 모두 출력합니다.

2. 속이 찬 마름모

  1. 사용자로부터 행 수를 입력받습니다.
  2. 입력받은 행 수만큼의 크기를 가진 속이 찬 마름모를 생성합니다.
  3. 첫 번째 행부터 마지막 행까지, 매 행마다 행 수와 동일한 개수의 별을 모두 출력합니다.

두 패턴 모두 마름모의 기울기를 만들기 위해, 각 행의 별을 출력하기 전에 (전체 행 수 − 현재 행 번호)개의 공백을 먼저 출력한다는 점이 핵심입니다.

예제 코드

/* 속이 빈 마름모와 속이 찬 마름모 별표 패턴 출력 프로그램 */
#include <stdio.h>

int main() {
    int r, c, rows;     /* 속이 빈 마름모용 변수 */
    int r1, c1, rows1;  /* 속이 찬 마름모용 변수 */

    printf("속이 빈 마름모 패턴의 행 수를 입력하세요: ");
    scanf("%d", &rows);
    printf("\n");

    for (r = 1; r <= rows; r++) {
        /* 왼쪽 공백 출력: 행이 내려갈수록 공백이 줄어듦 */
        for (c = 1; c <= rows - r; c++) {
            printf(" ");
        }
        /* 별 출력: 첫 행, 마지막 행, 그리고 각 행의 첫·마지막 열 */
        for (c = 1; c <= rows; c++) {
            if (r == 1 || r == rows || c == 1 || c == rows)
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }

    printf("\n");
    printf("속이 찬 마름모 패턴의 행 수를 입력하세요: ");
    scanf("%d", &rows1);
    printf("\n");

    for (r1 = 1; r1 <= rows1; r1++) {
        for (c1 = 1; c1 <= rows1 - r1; c1++) {
            printf(" ");
        }
        for (c1 = 1; c1 <= rows1; c1++) {
            printf("*");
        }
        printf("\n");
    }

    return 0;
}

참고: 원본 코드에 포함된 clrscr()getch()는 Turbo C 전용 함수입니다. GCC, Clang 등 최신 표준 컴파일러에서도 바로 실행할 수 있도록 위 코드에서는 제외했습니다.

핵심 로직 설명

  • 왼쪽 공백 처리: rows - r개의 공백을 출력해 행이 내려갈수록 별의 시작 위치가 오른쪽으로 이동하게 함으로써 마름모의 대각선 형태를 만듭니다.
  • 속이 빈 마름모의 조건: r == 1 || r == rows || c == 1 || c == rows — 첫 번째 행, 마지막 행, 또는 각 행의 첫 번째·마지막 열인 경우에만 별을 출력하고, 나머지 위치에는 공백을 출력합니다.
  • 속이 찬 마름모: 별도의 조건 검사 없이 해당 행의 모든 열에 별을 출력하면 됩니다.

실행 결과

행 수를 5로 입력했을 때의 출력 결과는 다음과 같습니다.

속이 빈 마름모 (5행)

    *****
   *   *
  *   *
 *   *
*****

속이 찬 마름모 (5행)

    *****
   *****
  *****
 *****
*****