Skip to Main Content

C언어 기초 가이드 STEP 1: 반복문

코딩 학습 가이드는 소프트웨어학과 송오영교수님이 검수하였습니다.

while 문

while문은 반복 문장을 실행하기 전에 반복 조건을 검사합니다. while문의 소괄호 안에 반복 조건을 명시하고, 이 조건이 만족되는 동안 중괄호 안에 있는 코드가 반복 실행됩니다.

형식

초기식
while (조건식)    // while 끝에 세미콜론을 붙이지 않습니다.
{
    반복할 실행문;
}

무한 반복문은 while(1)로 만들 수 있습니다.


이 예제에서 while문 조건은 num < 5 입니다. 처음 num을 0으로 초기화한 후, num이 5보다 작은지 조건을 체크합니다.
num의 값이 0이므로 5보다 작다는 조건이 만족(true)하여 반복 영역을 실행합니다. 반복 영역이 실행되면 Hello, world! 를 출력하고 num 값을 +1 시켜줍니다.
모든 문장을 수행한 후에는 다시 조건을 체크하게 되고, 이렇게 반복하다보면 마침내 거짓이 됩니다.
결과적으로 num 값이 5가 된 후에는 조건이 만족하지 않아 while 문을 벗어나게 되는 것입니다.

                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main(void)
{
    int num = 0;
 
    while (num < 5)
    {
        printf("Hello, world!\n");
        num++;
    }
 
    return 0;
}
 

반복하는 과정을 표로 그려보면 다음과 같습니다.

  while문 1회 while문 2회 while문 3회 while문 4회 while문 5회 while문 6회
조건식 num < 5 num=0 (참) num=1 (참) num=2 (참) num=3 (참) num=4 (참) num=5 (거짓)
실행문 printf("Hello, world!\n");
           num++;
num값은 0->1 num값은 1->2 num값은 2->3 num값은 3->4 num값은 4->5 while문 건너 뜀

do~while 문

do~while문은 while문과 거의 차이가 없습니다. while문은 조건식을 먼저 확인하지만, do~while문은 일단 반복 문장을 실행한 후에 반복 조건을 검사합니다.
do~while문이란 '반복영역을 최소한 한번은 실행하는 구조'인 반복문입니다.

형식

do
{
     반복할 실행문;
} while (조건식);    // while 끝에 세미콜론을 붙입니다.

C언어 문법상 while 문의 while 뒤엔 중괄호가 오기 때문에 세미콜론을 붙이지 않지만, do~while 문의 while 뒤엔 중괄호가 없기 때문에 세미콜론을 붙여줘야 합니다.


아래 코드는 비밀번호를 입력받아 비밀번호가 맞을 때까지 반복하는 코드입니다.
아래 예제의 경우, 프로그램 사용자로부터 비밀번호를 입력받고 난 다음에야 계속해서 진행할 것인지 말 것인지를 결정하게 됩니다.
따라서 반복영역을 최소한 한번은 실행해야 합니다. 이처럼 반복영역이 무조건 한 번 이상 실행되어야 하면 do~while문을 사용합니다.

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int main(void)
{
    int pw = 1234;
    int inputpw = 0;
 
    do
    {
        printf("비밀번호를 입력하세요. : ");
        scanf("%d"&inputpw);
    } while (pw != inputpw);
 
    printf("확인되었습니다.\n");
 
    return 0;
}

for 문

for문도 while문과 비슷하게 반복문입니다. 다만 for 반복문은 반복 횟수가 정해져 있을 때 유용합니다.
for문은 초기식, 조건식, 증감식으로 반복 횟수를 제어하며 실행문을 반복합니다.

형식 

for (초기식; 조건식; 증감식)    // for 끝에는 세미콜론을 붙이지 않습니다.
{
    반복할 실행문;
}

for문에서 실행할 문장이 한 줄이라면 { } (중괄호)를 생략할 수 있습니다.
       무한 반복문은 for (;;)로 만들 수 있습니다.


아래 예제는 num 값을 2배로 증가시키는 문장을 3번 반복하는 코드입니다.
초기식은 반복을 시작하기에 앞서 최초 한 번만 실행됩니다. 이어서 조건식을 검사하여 결과가 참이면 블록 안으로 들어가 반복할 문장 num *= 2를 실행합니다.
반복할 부분을 실행하면 증감식으로 올라가 i 값을 1 증가시키고 다시 조건식을 검사하는 순서로 반복합니다.
이렇게 반복하는 과정에서 조건식이 거짓이면 반복을 끝냅니다.

     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main(void)
{
    int num = 1;
    int i;
 
    for (i = 0; i < 3; i++)
    {
        num *= 2;    // num = num * 2;
    }
 
    printf("%d", num);
 
    return 0;
}
 

구구단을 출력하는 과정을 통해 중첩 반복문을 살펴보겠습니다.
구구단은 단의 수가 2단부터 9단까지 8개입니다. 그리고 곱셈 수식이 9번 반복됩니다.
이 반복 규칙을 적용해보면 다음의 형태로 실행이 이어집니다.

cur이 2일 때, is가 1부터 9까지 증가 (2단 출력)
cur이 3일 때, is가 1부터 9까지 증가 (3단 출력)
....
cur이 8일 때, is가 1부터 9까지 증가 (8단 출력)
cur이 9일 때, is가 1부터 9까지 증가 (9단 출력)

아래 코드를 실행하면 구구단 전체가 출력됩니다.

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main(void)
{
    int cur, is;
 
    for (cur = 2; cur < 10; cur++)
    {
        for (is = 1; is < 10; is++)
            printf("%dx%d=%d\n", cur, is, cur * is);
        printf("\n");
    }
 
    return 0;
}

기타 제어문

반복문 안에서 break문을 만나면 바로 반복문을 빠져나갑니다.

아래 코드는 1부터 100까지의 합 중 최초로 1000이 넘는 위치를 구하는 for 반복문입니다.
여기서 if (hap >= 1000) break; 를 사용하여 hap의 값이 1000보다 크거나 같을 때 break; 를 만나 루프를 빠져나오게 됩니다.

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int main(void)
{
    int hap = 0;
    int i;
 
    for (i = 0; i <= 100; i++)
    {
        hap += i;
 
        if (hap >= 1000)
            break;
    }
 
    printf("1~100의 합 중 최초로 1000이 넘는 위치는? : %d\n", i);
 
    return 0
}

실행결과

1~100의 합 중 최초로 1000이 넘는 위치는? : 45

continue문을 만나면 남은 블록은 건너뛰고 반복문의 처음으로 돌아갑니다.

아래 코드는 1부터 100까지 숫자 중 짝수만 더합니다. if를 사용하여 i가 홀수이면 continue를 실행합니다. (i를 2로 나누었을 때 나머지가 0이면 짝수, 0이 아니면 홀수)
i가 짝수이면 hap += i; 가 실행되고, 홀수이면 continue가 실행되어 hap += i; 를 실행하지 않습니다.
즉 반복문 안에서 continue를 실행하면 continue 아래의 코드는 실행하지 않고 건너뛴 뒤 다음 반복문을 수행합니다.

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int main(void)
{
    int hap = 0;
    int i = 1;
 
    while (i <= 100)
    {
        i++;
        if (i % 2 != 0)
            continue;
 
        hap += i;    // hap = hap + i;
    }
 
    printf("1부터 100까지 숫자 중 짝수만 더한 값은 %d입니다.\n", hap);
 
    return 0;
}

실행결과

1부터 100까지 숫자 중 짝수만 더한 값은 2550입니다.