16 while 문과 do 문으로 반복 처리하기
이번 장에서는 앞서 살펴본 for 문과 마찬가지로 반복을 처리해주는 while 문, do 문에 대한 내용을 다룹니다.
> // 반복문: for 문(구간반복), while 문(조건반복), do 문(실행반복)
16.1 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 문 순서도
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 문에 대해서 알아보았습니다. 계속해서 나머지 제어문에 대해서 학습해 나가도록 하겠습니다.