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

C 언어로 다이아몬드(마름모) 모양 별 패턴 출력하기 – 중첩 for 루프 완벽 가이드

C 언어에서 다이아몬드(마름모) 형태로 별(*)을 출력하려면 중첩 for 루프(nested for loop)를 활용하면 됩니다. 다이아몬드 패턴은 크게 윗부분(상단 삼각형)아랫부분(하단 역삼각형)으로 나누어 생각할 수 있으며, 각 부분마다 공백과 별의 개수를 규칙적으로 조절해 출력합니다.

1. 다이아몬드 윗부분 출력 로직

다이아몬드의 상단은 아래로 갈수록 별이 많아지는 정삼각형 구조입니다. 바깥 루프는 행(row)을 제어하고, 안쪽 첫 번째 루프는 왼쪽에 들어갈 공백을, 두 번째 루프는 별을 출력합니다.

// 다이아몬드 윗부분 로직
for (j = 1; j <= rows; j++){
    for (i = 1; i <= rows-j; i++)
        printf(" ");          // 왼쪽 공백 출력
    for (i = 1; i<= 2*j-1; i++)
        printf("*");          // 별 출력 (홀수 개씩 증가)
    printf("\n");             // 줄바꿈
}

예를 들어 rows = 5라고 가정하면, 위 코드는 다음과 같은 결과를 출력합니다.

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

핵심 규칙은 다음과 같습니다.

- j번째 행에서 공백은 (rows - j)개 출력
- 별은 (2 * j - 1)개, 즉 1, 3, 5, 7, 9처럼 홀수 개씩 증가

2. 다이아몬드 아랫부분 출력 로직

다이아몬드의 하단은 위로 갈수록 별이 줄어드는 역삼각형 구조입니다. 이번에는 공백이 점점 많아지고, 별의 개수는 점점 줄어듭니다.

// 다이아몬드 아랫부분 로직
for (j = 1; j <= rows - 1; j++){
    for (i = 1; i <= j; i++)
        printf(" ");                    // 왼쪽 공백 출력 (증가)
    for (i = 1 ; i <= 2*(rows-j)-1; i++)
        printf("*");                    // 별 출력 (감소)
    printf("\n");
}

역시 rows = 5일 때, 하단 부분은 다음과 같이 출력됩니다.

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

3. 전체 예제 코드

두 로직을 하나로 합치면 사용자로부터 행 수를 입력받아 완전한 다이아몬드 패턴을 출력하는 프로그램을 만들 수 있습니다.

#include <stdio.h>
int main(){
    int rows, i, j;
    printf("행의 개수를 입력하세요\n");
    scanf("%d", &rows);

    // 다이아몬드 윗부분
    for (j = 1; j <= rows; j++){
        for (i = 1; i <= rows-j; i++)
            printf(" ");
        for (i = 1; i<= 2*j-1; i++)
            printf("*");
        printf("\n");
    }

    // 다이아몬드 아랫부분
    for (j = 1; j <= rows - 1; j++){
        for (i = 1; i <= j; i++)
            printf(" ");
        for (i = 1 ; i <= 2*(rows-j)-1; i++)
            printf("*");
        printf("\n");
    }
    return 0;
}

4. 실행 결과

입력값을 5로 넣었을 때의 실행 결과입니다.

행의 개수를 입력하세요
5
        *
       ***
      *****
     *******
    *********
     *******
      *****
       ***
        *

정리

다이아몬드 패턴 출력의 핵심은 공백과 별의 개수 규칙을 파악하는 것입니다. 상단에서는 별이 홀수 개씩 늘어나고(2j-1), 하단에서는 반대로 줄어듭니다(2(rows-j)-1). 이 원리만 이해하면 피라미드, 역피라미드 등 다양한 별 찍기 패턴도 쉽게 응용할 수 있습니다.