30 계단식으로 별 출력하기

이번에는 지금까지 배운 for, while 반복문과 if 조건문을 사용하여 계단식으로 별(*)을 출력해보겠습니다.

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

참고로 이제부터 설명할 부분은 반복문을 여러 번 사용하므로 내용이 조금 어려울 수도 있습니다. 지금은 완벽히 이해하지 않아도 되며 C 언어에 익숙해지면 다시 돌아와서 살펴보세요.

30.1 중첩 루프 사용하기

콘솔은 2차원 평면이므로 별을 일정한 모양으로 출력하려면 반복문을 두 개 사용하는 것이 편리합니다.

다음과 같이 반복문 안에 반복문이 들어가는 형태를 중첩 루프(다중 루프)라고 합니다. 그리고 반복문의 루프 인덱스 변수는 index의 첫 글자를 따서 i를 사용하는데 반복문 안에 반복문이 들어갈 때는 변수 이름을 i, j, k처럼 i부터 알파벳 순서대로 짓습니다. 여기서는 반복문이 두 개이므로 ij를 사용합니다(변수 이름을 ij로 짓는 것은 강제된 사항은 아니지만 오래 전부터 관례적으로 사용하고 있습니다. 특히 이미 만들어진 소스 코드에서 많이 볼 수 있으므로 눈에 익혀두는 것이 좋습니다).

i를 사용하는 바깥쪽 루프는 세로 방향을 처리하고, j를 사용하는 안쪽 루프는 가로 방향을 처리합니다. 다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.

multiple_loop.c

#include <stdio.h>

int main()
{
    for (int i = 0; i < 5; i++)    // 5번 반복. 바깥쪽 루프는 세로 방향
    {
        for (int j = 0; j < 5; j++)    // 5번 반복. 안쪽 루프는 가로 방향
        {
            printf("j:%d ", j);        // j값 출력
        }

        printf("i:%d\\n", i);      // i값 출력, 개행 문자 모양도 출력
        printf("\n");              // 가로 방향으로 숫자를 모두 출력한 뒤 다음 줄로 넘어감
    }

    return 0;
}

실행 결과

출력 결과가 좀 복잡해 보이지만 간단한 내용입니다. 먼저 바깥쪽 루프로 시작하여 안쪽 루프가 가로 방향으로 j 값을 출력합니다. 그리고 가로 방향이 출력이 끝나면 바깥쪽 루프에서 i 값과 개행 문자를 출력하여 세로 방향을 처리하게 됩니다(\n을 화면에 보여주기 위해 \\n으로 출력했습니다).

이처럼 중첩 루프는 2차원 평면을 다룰 수 있으므로 이미지 처리, 영상 처리, 좌표계 처리 등에 주로 쓰입니다.