16 while 문과 do 문으로 반복 처리하기

  • 15 minutes to read

이번 장에서는 앞서 살펴본 for 문과 마찬가지로 반복을 처리해주는 while 문, do 문에 대한 내용을 다룹니다.

> // 반복문: for 문(구간반복), while 문(조건반복), do 문(실행반복)

16.1 while 문

while 문은 조건식이 참일 동안 문장을 반복 실행합니다. 코드 모양은 다음과 같습니다.

while (조건식)
{
	조건식이 참일 때까지 실행할 문장들...
}

while 문의 조건식이 참일 동안 실행문을 반복하여 실행합니다. 반복을 중지하려면 while 문 안쪽 코드에서 증감식 등을 통해서 조건식의 값의 변경이 필요합니다. while 문을 순서도로 표현해 보면 다음과 같습니다.

그림: while 문 순서도

while 문 순서도

16.2 while 문으로 "안녕하세요." 여러 번 출력하기

이번 예제에서는 while 문으로 "안녕하세요." 문자열을 반복해서 출력해보도록 하겠습니다. while 문의 최소한의 구성 요소들은 초기식, 조건식, 증감식 그리고 실행문입니다. 이 부분을 잘 구분해서 코드를 작성하세요.

코드: while_description.c

// while 문으로 "안녕하세요." 여러 번 출력하기
#include <stdio.h>

int main(void)
{
    int count = 0;                  // 초기식

    while (count < 3)               // 조건식
    {
        printf("안녕하세요.\n");     // 실행문
        count++;                    // 증감식
    }

    return 0;
}
안녕하세요.
안녕하세요.
안녕하세요.

while 문은 for 문과 마찬가지로 반복문입니다. 반복문은 일반적으로 초기식, 조건식, 실행문, 증감식의 식과 문을 가집니다. 다만 그 위치가 for 문과 while 문이 조금 다를 뿐입니다.

16.3 while 문을 사용하여 1부터 5까지 출력하기

이번에는 카운트 변수 또는 인덱스 변수를 1부터 시작하는 예제를 만들어 보도록 하겠습니다.

코드: while_demo.c

//[?] while 문: 조건식이 참일 동안 반복 실행
#include <stdio.h>

int main(void)
{
    int i = 1; // 초기식부터
    while (i <= 5) // 조건식을 만족하는동안
    {
        printf("카운트: %d\n", i); // 실행문을 실행하고
        i++; // 증감식을 사용하여 인덱스 변수를 1씩 증가 
    }

    return 0;
}
카운트: 1
카운트: 2
카운트: 3
카운트: 4
카운트: 5

초깃값은 0부터 시작해도 되고 1부터 시작해도 됩니다. 초깃값을 저장할 때 i 변수에 1로 초기화한 후 반복하는 예제입니다. 초기식인 1부터 조건식인 5까지 반복하면서 카운트를 출력하고 증감식에서 1씩 증가시켜 총 5번 반복하는 내용을 보여줍니다. 이번 예제 역시 for 문과 달리 초기식, 조건식, 증감식, 실행문의 위치가 조금 다릅니다.

16.4 카운트 증가 프로그램

while 문의 구성 요소는 초기식, 조건식, 실행문, 증감식으로 이루어졌습니다.

코드: while_loop.c

// 카운트 증가 프로그램
#include <stdio.h>

int main(void)
{
    int count = 1; // 초기식
    while (count <= 3) // 조건식
    {
        printf("카운트: %d\n", count); // 실행문
        count++; // 증감식
    }

    return 0;
}
카운트: 1
카운트: 2
카운트: 3

1부터 3까지 반복하여 카운트를 증가하는 기본적인 while 문의 모양입니다.

16.5 초깃값을 감소시켜서 반복시키기

일반적으로 반복문은 반복되는 카운트를 설정하는 인덱스 변수를 작은 수에서 큰 수로 증가하면서 루프를 실행했습니다. 이번에는 큰 수로 설정 후 인덱스 변수의 값을 감소시키면서 반복을 실행하는 예제를 만들어 보도록 하겠습니다.

코드: while_decrement.c

// 초깃값을 감소시켜서 반복시키기   
#include <stdio.h>

int main(void)
{
    int index = 5;
    while (index > 0)
    {
        printf("안녕하세요. %d\n", index);
        index--;
    }

    return 0;
}
안녕하세요. 5
안녕하세요. 4
안녕하세요. 3
안녕하세요. 2
안녕하세요. 1

index가 5로 설정된 상태에서 증감식에서 index--에 의해서 루프를 한번 실행할 때마다 1씩 감소하도록 하였습니다. index가 0이 되는 순간에 while 문을 종료하는 형태로 인덱스 변수의 값을 감소시키면서 반복 실행을 할 수 있습니다.

16.6 while 문을 사용하여 1부터 100까지의 합을 구하는 프로그램

앞서 for 문을 사용하여 합계를 구하는 프로그램을 while 문으로 다시 만들어보겠습니다.

코드: while_sum.c

//[?] while 문을 사용하여 1부터 100까지의 합을 구하는 프로그램
#include <stdio.h>

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

    i = 1;                  // 초기식
    while (i <= 100)        // 조건식
    {
        sum += i;           // 실행문
        i++;                // 증감식 
    }

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

    return 0;
}
1부터 100까지의 합: 5050

1부터 100까지 1씩 증가시키면서 반복하여 1부터 100까지 정수의 합계를 구하는 프로그램입니다.

16.7 while 문을 사용하여 짝수의 합 구하기

이번에는 while 문을 사용하여 1부터 100까지 정수들의 짝수의 합을 구해보겠습니다.

코드: while_even.c

#include <stdio.h>

int main(void)
{
    //[!] while 문을 사용하여 짝수의 합
    int sum = 0;

    int i = 1;                  // 초기식
    while (i <= 100)            // 조건식
    {
        if (i % 2 == 0)         // 필터링(조건처리)
        {
            sum += i;           // 실행문 
        }
        i++;                    // 증감식
    }

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

    return 0;
}
1부터 100까지 짝수의 합: 2550

초기식부터 조건식을 만족하는 통한 필터링된 실행문을 실행하고 증감식을 진행하는 형태의 전형적인 반복문의 모양을 예제로 살펴보았습니다.

16.7.1 참고: 짝수의합.c

코드: 짝수의합.c

/*
    4.4. 예제 : 짝수의 합을 구하는 프로그램 : 짝수의합.c
*/
#include <stdio.h>

int main(void)
{
    //입력(Input) 변수 선언부 
    int intSum = 0;
    int i = 0;

    //처리(Process)
    i = 1;				//[1]초기식
    while (i <= 100)		//[2]조건식
    {
        if (i % 2 == 0)
        {
            intSum += i;//[!]실행문
        }
        i++;			//[3]증감식
    }

    //출력(Output)
    printf("1~100 짝수합:%d\n", intSum);

    return 0;
}

16.8 피보나치 수열을 while문으로 표현하기

조금은 어렵지만 while 문을 사용하여 수학의 피보나치 수열을 표현해 보겠습니다. 피보나치 수열에 대한 이론적인 내용은 수학 서적이나 인터넷을 좀 더 활용해서 검색해보면 좋습니다. 이번 예제는 피보나치 수열을 1부터 20까지 범위내에 있는 내용을 출력하는 내용입니다.

코드: while_fibonacci.c

//[?] 피보나치 수열: 1 1 2 3 5 8 13 21 ...
#include <stdio.h>

int main(void)
{
    int first = 0;
    int second = 1;

    // while 문으로 피보나치 수열 표현하기 
    while (second <= 20)
    {
        printf("%d\n", second);
        int temp = first + second;
        first = second;
        second = temp;
    }

    return 0;
}
1
1
2
3
5
8
13

반복 회차에 맞는 first, second 변수의 출력값을 정리해보면 다음과 같습니다.

회차 first second temp
1 0 1 0 + 1
2 1 1 1 + 1
3 1 2 1 + 2
4 2 3 2 + 3
5 3 5 3 + 5
6 5 8 5 + 8
7 8 13 8 + 13

second 변수의 값을 출력하면 1부터 20사이의 피보나치 수열이 출력됩니다.

while 문의 진행 사항도 디버거를 사용하여 F10 또는 F11을 여러 번 눌러가며 단계별로 진행되는 코드의 상태를 살펴보면 좋습니다.

16.9 do while 반복문으로 최소 한 번은 실행하기

이번에는 또 다른 반복문인 do 문을 살펴보겠습니다. do 문은 while 문과 비슷하나 일단은 문장을 한 번은 실행 후 그 다음에 조건을 따지는 구문입니다. 이 또한 조건식이 참일 동안 문장을 반복 실행합니다. do 문의 형식은 다음과 같습니다.

do
{
    실행문;
} while (조건식);

조건식이 참일 동안 실행문을 반복하여 실행합니다. 이 때 do 문은 마지막에 세미콜론(;) 기호로 끝나야 함을 주의해야 합니다. do 문은 while (조건식) 식이 뒤에 오기에 한 번은 실행문을 실행하는 특징을 가지고 있습니다.

그림: do while 문 순서도

while 문 순서도

16.10 do while 문을 사용하여 "안녕하세요." 3번 출력하기

do while 문을 사용하여 "안녕하세요."를 3번 출력하는 프로그램을 작성하겠습니다.

코드: do_while.c

// do while 문을 사용하여 "안녕하세요." 3번 출력하기
#include <stdio.h>

int main(void)
{
    int count = 0;                  // 초기식

    do
    {
        printf("안녕하세요.\n");     // 실행문
        count++;                    // 증감식
    } while (count < 3);            // 조건식

    return 0;
}
안녕하세요.
안녕하세요.
안녕하세요.

앞서 살펴본 while 문과 달리 조건식이 맨 마지막에 나와서 한번은 실행문을 실행하게 됩니다.

16.11 do while 문으로 1부터 5까지의 합계 구하기

do while 문을 사용하여 합계를 구하는 프로그램을 작성하겠습니다.

코드: do_while_sum.c

//[?] do 문을 사용하여 1부터 5까지의 합
#include <stdio.h>

int main(void)
{
    int sum = 0;

    int i = 1;                  // 초기식
    do
    {
        sum += i;               // 실행문
        i++;                    // 증감식
    } while (i <= 5);           // 조건식
    printf("합계: %d\n", sum);   // 15

    return 0;
}
합계: 15

do while 문은 while 문과 동일한 기능을 합니다. 다만, 조건식이 뒤에 오는 것만 차이점이 있습니다.

16.12 1~100 사이의 3의 배수이면서 4의 배수인 정수의 합 구하기

do~while 문은 먼저 실행 후 반복한다고해서 선행반복이라고 합니다.

코드: do_while_demo.c

#include <stdio.h>

int main(void)
{
    //[!] 1 ~ 100까지 3의 배수이고 그리고 4의 배수인 정수의 합
    int sum = 0;

    //[2] Process : 알고리즘(Algorithm): 주어진 범위 + 주어진 조건
    int i = 1;                                  // 초기식
    do
    {
        if (i % 3 == 0 && i % 4 == 0)           // 필터링(조건식)
        {
            sum += i;                           // 실행문(문장)
        }
        i++;                                    // 증감식
    } while (i <= 100);                         // 조건식(평가할 식)

    printf("%d\n", sum); // 432

    return 0;
}
432

do 문을 사용하여 1부터 100까지 반복하면서 3의 배수이고 그리고 4의 배수인 정수의 합을 구하는 코드입니다.

16.13 참고: 실행반복.c***

코드: 실행반복.c

/*
    do~while문: 한번은 실행 후 조건처리
*/
#include <stdio.h>

int main(void)
{
    int intSum = 0;
    int i = 0;

    //[!] Process   
    i = 1;                          //[1] 초기식
    do
    {
        if (i % 2 == 0)             //[!] 필터링
        {
            intSum += i;            //[!] 실행문
        }
        i++;                        //[2] 증감식
    } while (i <= 100);             //[3] 조건식

    printf("%d\n", intSum); // 2550

    return 0;
}
2550

16.14 참고: 실행반복_Do문.c***

코드: 실행반복_Do문.c

// 실행반복: do문(선 실행 후 조건 비교)
#include <stdio.h>

int main(void)
{
    // 1부터 5까지 짝수 출력
    // 반복문 = 초기식+조건식+증감식+실행문
    int i = 1;                  //[1] 초기식 반복 증가용 변수
    do
    {
        if (i % 2 == 0)         //[!] 필터링(조건처리)
        {
            printf("%d\n", i);  //[4] 실행문
        }
        i++;                    //[3] 증감식
    } while (i <= 5);           //[2] 조건식

    return 0;
}
2
4

16.15 장 요약

지금까지 C 언어에서 제공하는 반복문인 for, while, do 문에 대해서 알아보았습니다. 계속해서 나머지 제어문에 대해서 학습해 나가도록 하겠습니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com