6. 반복문

header


1. 반복문이란?

반복문은 특정 코드를 여러 번 반복 실행할 때 사용하는 제어문입니다.

반복문 = 같은 코드를 여러 번 실행
반복문을 사용하면 코드의 양을 줄이고 효율적인 프로그램을 작성할 수 있습니다.

반복문의 필요성:

반복문이 없다면?

printf("Hello\n");
printf("Hello\n");
printf("Hello\n");
printf("Hello\n");
printf("Hello\n");
// 100번 출력하려면...?

반복문을 사용하면?

int i;
for (i = 0; i < 100; i++) {
    printf("Hello\n");
}

C 언어의 반복문 종류:

반복문 특징 주요 용도
while 조건이 참인 동안 반복 반복 횟수가 정해지지 않은 경우
do-while 최소 1회 실행 후 조건 검사 한 번은 반드시 실행해야 하는 경우
for 반복 횟수가 명확한 경우 반복 횟수를 알고 있는 경우

2. while문

while문은 조건이 참인 동안 코드를 반복 실행합니다.

기본 형태

while (조건식)
{
    // 조건이 참일 때 반복 실행할 코드
}

실행 흐름:

시작 → 조건 검사 → 참? → 코드 실행 → 조건 검사 반복
                 ↓ 거짓
               종료
while문의 동작 원리
1. 조건식을 먼저 검사
2. 조건이 참이면 코드 실행
3. 다시 조건식으로 돌아가 검사
4. 조건이 거짓이면 반복 종료

실습 1

#include <stdio.h>

int main() {
    int count = 0;

    while (count < 3) {
        printf("count = %d\n", count);
        count++;  // count 증가 (중요!)
    }

    printf("반복 종료\n");

    return 0;
}
실행 결과 보기
count = 0
count = 1
count = 2
반복 종료
  • count가 0, 1, 2일 때 조건(count < 3)이 참
  • count가 3이 되면 조건이 거짓이므로 반복 종료
  • count++가 없으면 무한루프 발생!

실습 2 - 사용자 입력 반복

#include <stdio.h>

int main() {
    int num;

    printf("숫자를 입력하세요 (-1 입력 시 종료)\n");

    num = 0;  // 초기값 설정
    while (num != -1) {
        printf("입력: ");
        scanf("%d", &num);

        if (num == -1) {
            printf("프로그램을 종료합니다.\n");
        } else {
            printf("%d를 입력하셨습니다.\n", num);
        }
    }

    return 0;
}
실행 결과 보기
숫자를 입력하세요 (-1 입력 시 종료)
입력: 5
5를 입력하셨습니다.
입력: 10
10를 입력하셨습니다.
입력: -1
프로그램을 종료합니다.

무한루프

조건이 항상 참이면 반복문이 영원히 실행됩니다.

의도하지 않은 무한루프 (주의!):

int num = 1;
while (num < 5) {
    printf("무한 반복!\n");
    // num이 변하지 않음 → 무한루프!
}

의도적인 무한루프:

while (1) {  // 1은 항상 참
    printf("무한 반복 중...\n");
    // 특정 조건에서 break로 탈출
}
💡 무한루프 탈출 방법
• 프로그램 강제 종료: Ctrl + C
• 코드 내에서 탈출: break 사용

3. do-while문

do-while문은 최소 한 번은 실행한 후 조건을 검사합니다.

기본 형태

do {
    // 최소 1회는 실행되는 코드
} while (조건식);
⚠️ while문과의 차이점
while문: 조건 검사 → 실행
do-while문: 실행 → 조건 검사
• do-while문은 조건이 거짓이어도 최소 1회는 실행됩니다!

실행 흐름:

시작 → 코드 실행 → 조건 검사 → 참? → 코드 실행 반복
                              ↓ 거짓
                            종료

실습 3

#include <stdio.h>

int main() {
    int num;

    do {
        printf("숫자 입력 (-1 입력 시 종료): ");
        scanf("%d", &num);
    } while (num != -1);

    printf("종료되었습니다.\n");

    return 0;
}
실행 결과 보기
숫자 입력 (-1 입력 시 종료): 5
숫자 입력 (-1 입력 시 종료): 10
숫자 입력 (-1 입력 시 종료): -1
종료되었습니다.

do-while문은 입력을 최소 1회는 받아야 하는 경우에 적합합니다.

실습 4 - 1부터 10까지의 합

#include <stdio.h>

int main() {
    int num = 1;
    int sum = 0;

    do {
        sum += num;  // sum = sum + num
        num++;
    } while (num <= 10);

    printf("1부터 10까지의 합: %d\n", sum);

    return 0;
}
실행 결과 보기
1부터 10까지의 합: 55
  • num이 1부터 10까지 증가하며 sum에 더해짐
  • 1 + 2 + 3 + ... + 10 = 55

4. for문

for문은 반복 횟수가 정해져 있을 때 가장 많이 사용하는 반복문입니다.

기본 형태

for (초기식; 조건식; 증감식)
{
    // 반복 실행할 코드
}

각 요소의 역할:

요소 역할 실행 시점
초기식 반복 변수 초기화 딱 한 번만 실행
조건식 반복 조건 검사 매 반복마다 검사
증감식 반복 변수 변경 매 반복 후 실행

실행 순서:

초기식 → 조건식 → 참? → 코드 실행 → 증감식 → 조건식 반복
                ↓ 거짓
              종료
for문의 실행 순서
1. 초기식 실행 (딱 1번)
2. 조건식 검사
3. 조건이 참이면 코드 실행
4. 증감식 실행
5. 2번으로 돌아가 반복

실습 5

#include <stdio.h>

int main() {
    int i;

    for (i = 0; i < 5; i++) {
        printf("i = %d\n", i);
    }

    return 0;
}
실행 결과 보기
i = 0
i = 1
i = 2
i = 3
i = 4
  • i = 0: 초기식, i를 0으로 초기화
  • i < 5: 조건식, i가 5보다 작으면 반복
  • i++: 증감식, i를 1씩 증가
  • 총 5회 반복 (i = 0, 1, 2, 3, 4)

실습 6 - 1부터 100까지의 합

#include <stdio.h>

int main() {
    int i;
    int sum = 0;

    for (i = 1; i <= 100; i++) {
        sum += i;
    }

    printf("1부터 100까지의 합: %d\n", sum);

    return 0;
}
실행 결과 보기
1부터 100까지의 합: 5050

for문의 다양한 형태

증감식 변형:

// 2씩 증가
for (i = 0; i < 10; i += 2)
    printf("%d ", i);  // 0 2 4 6 8

// 1씩 감소
for (i = 5; i > 0; i--)
    printf("%d ", i);  // 5 4 3 2 1

요소 생략 가능:

int i = 0;
for (; i < 3; i++) {  // 초기식 생략
    printf("%d ", i);
}

무한루프:

for (;;) {  // 모든 요소 생략
    printf("무한 반복!\n");
    // Ctrl + C로 종료
}
💡 for문 vs while문
for문: 반복 횟수가 명확할 때 (카운팅)
while문: 조건에 따라 반복할 때 (조건 기반)

5. 중첩 반복문

반복문 안에 또 다른 반복문을 넣을 수 있습니다.

기본 형태

for (외부 초기식; 외부 조건식; 외부 증감식)
{
    for (내부 초기식; 내부 조건식; 내부 증감식)
    {
        // 외부 반복 1회당 내부 반복 전체가 실행됨
    }
}
중첩 반복문의 실행 횟수
외부 반복 N회 × 내부 반복 M회 = 총 N × M회 실행

실습 7 - 구구단 출력

#include <stdio.h>

int main() {
    int dan, num;

    printf("=== 구구단 ===\n");

    for (dan = 2; dan <= 9; dan++) {
        printf("\n[%d단]\n", dan);
        for (num = 1; num <= 9; num++) {
            printf("%d × %d = %d\n", dan, num, dan * num);
        }
    }

    return 0;
}
실행 결과 보기
=== 구구단 ===

[2단]
2 × 1 = 2
2 × 2 = 4
2 × 3 = 6
...
2 × 9 = 18

[3단]
3 × 1 = 3
3 × 2 = 6
...
[9단까지 계속]

외부 for문(dan)이 1회 실행될 때마다 내부 for문(num)이 9회 실행됩니다.

실습 8 - 별 찍기 패턴

#include <stdio.h>

int main() {
    int i, j;

    printf("직각삼각형 패턴:\n");
    for (i = 1; i <= 5; i++) {
        for (j = 1; j <= i; j++) {
            printf("*");
        }
        printf("\n");
    }

    return 0;
}
실행 결과 보기
직각삼각형 패턴:
*
**
***
****
*****
  • i = 1일 때: j가 1번 반복 → * 1개
  • i = 2일 때: j가 2번 반복 → * 2개
  • i = 5일 때: j가 5번 반복 → * 5개

6. break와 continue

반복문의 흐름을 제어하는 두 가지 키워드입니다.

break - 반복문 즉시 종료

break는 반복문을 완전히 탈출합니다.

#include <stdio.h>

int main() {
    int i;

    for (i = 1; i <= 10; i++) {
        if (i == 5) {
            break;  // i가 5일 때 반복문 종료
        }
        printf("%d ", i);
    }

    printf("\n반복문 종료\n");

    return 0;
}
실행 결과 보기
1 2 3 4
반복문 종료

i가 5가 되면 break가 실행되어 반복문이 즉시 종료됩니다.

continue - 다음 반복으로 건너뛰기

continue는 현재 반복만 건너뛰고 다음 반복을 계속합니다.

#include <stdio.h>

int main() {
    int i;

    for (i = 1; i <= 5; i++) {
        if (i == 3) {
            continue;  // i가 3일 때 아래 코드 건너뛰기
        }
        printf("%d ", i);
    }

    printf("\n");

    return 0;
}
실행 결과 보기
1 2 4 5

i가 3일 때 continue가 실행되어 printf를 건너뛰고 다음 반복으로 넘어갑니다.

실습 9 - 짝수만 출력하기

#include <stdio.h>

int main() {
    int i;

    printf("1부터 10까지 짝수만 출력:\n");

    for (i = 1; i <= 10; i++) {
        if (i % 2 != 0) {  // 홀수면
            continue;       // 건너뛰기
        }
        printf("%d ", i);
    }

    printf("\n");

    return 0;
}
실행 결과 보기
1부터 10까지 짝수만 출력:
2 4 6 8 10

break vs continue 비교:

키워드 동작 사용 시점
break 반복문 즉시 종료 더 이상 반복이 필요 없을 때
continue 현재 반복만 건너뛰기 특정 조건에서 일부 코드만 건너뛸 때
실행 흐름 비교
break: 반복문 탈출 → 반복문 다음 코드 실행
continue: 반복문의 처음(증감식)으로 이동 → 다음 반복 진행

7. 종합 실습

문제 1 - while문 (기초)

문제 1

다음 코드의 실행 결과는?

반복문
#include <stdio.h>

int main() {
    int i = 5;
    int sum = 0;

    while (i > 0) {
        sum += i;
        i--;
    }

    printf("%d", sum);

    return 0;
}

문제 2 - do-while문 (기초)

문제 2

다음 코드는 몇 번 실행됩니까?

반복문
#include <stdio.h>

int main() {
    int num = 10;
    int count = 0;

    do {
        count++;
    } while (num < 5);

    printf("%d", count);

    return 0;
}

문제 3 - for문 (기초)

문제 3

다음 코드의 실행 결과는?

반복문
#include <stdio.h>

int main() {
    int i;

    for (i = 0; i < 4; i++) {
        printf("%d ", i * 2);
    }

    return 0;
}

문제 4 - break (중급)

문제 4

다음 코드의 실행 결과는?

반복문
#include <stdio.h>

int main() {
    int i;
    int sum = 0;

    for (i = 1; i <= 10; i++) {
        sum += i;
        if (sum > 10) {
            break;
        }
    }

    printf("%d", i);

    return 0;
}

문제 5 - continue (중급)

문제 5

다음 코드의 실행 결과는?

반복문
#include <stdio.h>

int main() {
    int i;
    int count = 0;

    for (i = 1; i <= 5; i++) {
        if (i == 2 || i == 4) {
            continue;
        }
        count++;
    }

    printf("%d", count);

    return 0;
}

문제 6 - 중첩 반복문 (중급)

문제 6

다음 코드의 실행 결과는?

반복문
#include <stdio.h>

int main() {
    int i, j;
    int count = 0;

    for (i = 0; i < 3; i++) {
        for (j = 0; j < 2; j++) {
            count++;
        }
    }

    printf("%d", count);

    return 0;
}

문제 7 - 팩토리얼 (고급)

문제 7

5! (5 팩토리얼)의 값은?

// 5! = 5 × 4 × 3 × 2 × 1

int n = 5;
int result = 1;
int i;

for (i = 1; i <= n; i++) {
    result *= i;
}

printf("%d", result);
반복문

문제 8 - 무한루프 판별 (고급)

문제 8

다음 중 무한루프가 발생하는 코드는? (여러 개 선택 가능)

A. while (1) { }

B. for (;;) { }

C. int i = 0;
   while (i < 5) {
       printf("%d ", i);
   }

D. do {
       printf("Hello");
   } while (1);
반복문

핵심 요약

1. while문
• 조건이 참인 동안 반복
• 형태: while (조건) { 실행문 }
• 조건을 먼저 검사

2. do-while문
• 최소 1회는 실행 후 조건 검사
• 형태: do { 실행문 } while (조건);
• 한 번은 반드시 실행해야 할 때 사용

3. for문
• 반복 횟수가 정해져 있을 때 사용
• 형태: for (초기식; 조건식; 증감식) { 실행문 }
• 가장 많이 사용되는 반복문

4. 중첩 반복문
• 반복문 안에 반복문
• 외부 N회 × 내부 M회 = 총 N×M회 실행
• 2차원 패턴, 구구단 등에 활용

5. break
• 반복문 즉시 종료
• 더 이상 반복이 필요 없을 때 사용

6. continue
• 현재 반복만 건너뛰고 다음 반복 진행
• 특정 조건의 코드만 건너뛸 때 사용

7. 무한루프
while (1) 또는 for (;;)
• 강제 종료: Ctrl + C
• 의도적인 경우: break로 탈출