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 문이 조금 다를 뿐입니다.
while
문을 사용하여 1부터 5까지 출력하기
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
문을 사용하여 카운트를 1부터 3까지 증가시키는 기본적인 구현을 보여줍니다.
카운트 증가 프로그램
while
문의 구성 요소는 초기식, 조건식, 실행문, 증감식으로 이루어집니다.
코드: while_loop.c
// C 언어 코드: 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
문의 모양입니다.
이 문서는 while
문을 사용해 1부터 시작하는 카운트를 증가시키는 두 가지 언어의 예제를 포함하고 있습니다. 각 탭은 해당 언어의 특정 코드 예제를 참조합니다.
16.4. 카운트 증가 프로그램
../includes/c-count-increment-example.md
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까지의 합 계산 프로그램
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
위의 코드는 number
변수를 1부터 시작하여 100에 이를 때까지 1씩 증가시키며 누적 합계를 계산하는 프로그램입니다. while
문은 주어진 조건이 참인 동안 계속해서 블록 내의 명령을 반복 실행하며, 이를 통해 1부터 100까지의 총합을 구할 수 있습니다.
16.7. while
문을 사용하여 짝수의 합 구하기
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
초기식부터 조건식을 만족하는 통한 필터링된 실행문을 실행하고 증감식을 진행하는 형태의 전형적인 반복문의 모양을 예제로 살펴보았습니다.
참고: 짝수의 합 계산 프로그램
아래는 1부터 100까지의 짝수들의 합을 구하는 C 프로그램의 코드입니다.
코드: 짝수의합_While.c
/*
예제: 1부터 100까지 짝수의 합을 구하는 프로그램
*/
#include <stdio.h>
int main(void)
{
int sumOfEvens = 0; // 짝수의 합을 저장할 변수
int counter = 0; // 반복문의 카운터로 사용할 변수
// 1부터 100까지 반복
counter = 1; // 초기화
while (counter <= 100) // 조건 검사
{
if (counter % 2 == 0) // 짝수 판별
{
sumOfEvens += counter; // 짝수이면 합계에 더함
}
counter++; // 다음 숫자로 증가
}
// 결과 출력
printf("1부터 100까지 짝수의 합: %d\n", sumOfEvens);
return 0;
}
이 프로그램은 counter
변수를 1부터 시작해 100까지 증가시키면서, 각 단계에서 counter
가 짝수인 경우에만 sumOfEvens
변수에 누적하여 합계를 계산합니다. 최종적으로 계산된 짝수의 합을 출력합니다.
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. "안녕하세요."를 3번 출력하기 위한 do while 문 활용
이번에는 do while 문을 사용해 "안녕하세요."를 3번 출력하는 프로그램을 작성해 보겠습니다.
코드 파일명: do_while.c, DoWhile.c
// do while 문을 사용하여 "안녕하세요." 3번 출력하기
#include <stdio.h>
int main(void)
{
int count = 0; // 초기식
do
{
printf("안녕하세요.\n"); // 실행문
count++; // 증감식
} while (count < 3); // 조건식
return 0;
}
안녕하세요.
안녕하세요.
안녕하세요.
do while 문은 조건을 마지막에 평가하기 때문에, 조건과 관계없이 루프 내의 명령문이 최소 한 번은 실행됩니다.
16.11. 1부터 5까지의 합계를 구하는 do while 문 활용
이번에는 do while 문을 이용하여 1부터 5까지의 숫자 합계를 계산하는 프로그램을 작성해 보겠습니다.
코드 파일명: do_while_sum.c, DoWhileSum.c
//[?] do 문을 사용하여 1부터 5까지의 합
#include <stdio.h>
int main(void)
{
int sum = 0; // 합계를 저장할 변수 초기화
int i = 1; // 초기식
do
{
sum += i; // 실행문: i 값을 sum에 더함
i++; // 증감식: i 값을 1 증가
} while (i <= 5); // 조건식: i가 5 이하인 동안 반복
printf("합계: %d\n", sum); // 합계 출력
return 0;
}
합계: 15
do while 문은 while 문과 유사하게 반복을 제어하지만, 조건 검사를 루프의 마지막에서 수행하여 루프의 명령문이 조건의 참/거짓 여부와 상관없이 최소 한 번은 실행되도록 합니다.
짝수의 합계 계산하기
do~while
문을 사용해 1부터 100까지 짝수의 합을 계산합니다.
코드: 실행반복.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;
}
이 코드는 do~while
문을 활용하여 1부터 100까지의 숫자 중 짝수만을 골라 그 합계를 계산합니다. 이 프로세스는 최소 한 번 실행 후 조건을 확인하여 진행됩니다. 이를 통해 조건이 참인 동안 짝수의 합을 반복적으로 계산하게 됩니다. 결과적으로, 짝수의 총합인 2550이 출력됩니다.
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의 배수인 정수의 합을 구하는 코드입니다.
참고 강의: 1부터 100까지 3과 4의 공배수의 합 구하기
이 예제에서는 C 언어를 사용하여 1부터 100까지의 숫자 중 3의 배수이면서 동시에 4의 배수인 숫자들의 합을 계산합니다. 이러한 조건을 만족하는 숫자는 12, 24, 36, ... 등입니다. 이 프로그램은 조건 반복문을 활용하여 해당 조건에 맞는 숫자들을 찾고, 그 합을 계산하여 출력합니다.
코드: 조건반복.c
/*
1부터 100까지 3의배수이고 그리고(&&) 4의 배수의 합
12 + 24 + 36 + ... +
*/
#include <stdio.h>
int main(void)
{
//[1] Input
int intSum = 0;
int i; // 반복문
//[2] Process
i = 1; //[a] 초기식
while (i <= 100) //[b] 조건식
{
if (i % 3 == 0 && i % 4 == 0) //[!] 필터링
{
intSum += i; //[c] 실행문
}
i++; //[d] 증감식
}
//[3] Output
printf("%d\n", intSum);
}
이 프로그램은 1부터 100까지의 범위에서 조건에 맞는 숫자들의 총합을 출력합니다.
참고 강의: 짝수 합계 계산하기
파일명: 실행반복.c
/*
do~while문을 사용하여 1부터 100까지의 짝수들의 합계를 구하는 예제입니다.
이 구조는 조건을 검사하기 전에 최소 한 번은 코드를 실행함으로써,
초기 조건에 관계없이 반복문 내의 로직이 실행될 수 있도록 보장합니다.
*/
#include <stdio.h>
int main(void)
{
int intSum = 0; // 짝수들의 합을 저장할 변수
int i = 0; // 반복 제어 변수
// 프로세스 시작
i = 1; // 초기값 설정
do
{
if (i % 2 == 0) // 짝수만 골라내기
{
intSum += i; // 짝수의 합 계산
}
i++; // 다음 숫자로
} while (i <= 100); // 100 이하의 숫자에 대해 반복
printf("%d\n", intSum); // 계산된 짝수의 합 출력: 2550
return 0;
}
2550
이 코드는 do~while문을 활용해 1부터 100까지 숫자 중 짝수만을 선별하여 그 합을 계산합니다. 반복문은 최소 한 번의 실행을 보장하며, 이를 통해 짝수의 총합 2550을 성공적으로 계산하고 출력합니다.
참고 강의: do 문 활용 예제
파일명: 실행반복_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
이 예제는 do문을 사용하여 1부터 5까지의 숫자 중 짝수를 선별하여 출력하는 프로그램을 보여줍니다. do문의 특징은 조건식의 검사가 실행문 이후에 이루어져, 조건이 참인 경우 반복 실행되며, 최소 한 번은 실행문이 수행된다는 점입니다. 이를 통해 프로그램은 2와 4, 즉 1부터 5까지의 짝수를 성공적으로 출력합니다.
3개의 반복문으로 1부터 100까지의 합 구하기
아래는 C 언어를 사용해 1부터 100까지의 합을 구하는 세 가지 방법을 작성한 예제입니다. for
, while
, 그리고 do-while
반복문을 각각 사용하여 같은 문제를 해결하는 다양한 접근 방식을 보여줍니다.
For 루프를 사용한 합계 계산
#include <stdio.h>
int main()
{
int sum = 0;
for (int i = 1; i <= 100; i++)
{
sum += i;
}
printf("1부터 100까지의 합: %d\n", sum);
return 0;
}
While 루프를 사용한 합계 계산
#include <stdio.h>
int main()
{
int sum = 0, i = 1;
while (i <= 100)
{
sum += i;
i++;
}
printf("1부터 100까지의 합: %d\n", sum);
return 0;
}
Do-While 루프를 사용한 합계 계산
#include <stdio.h>
int main()
{
int sum = 0, i = 1;
do
{
sum += i;
i++;
} while (i <= 100);
printf("1부터 100까지의 합: %d\n", sum);
return 0;
}
이 코드 예제들은 C 언어의 다양한 반복문을 사용해 1부터 100까지의 합을 구하는 방법을 보여줍니다.
장 요약
지금까지 C 언어에서 제공하는 반복문인 for, while, do 문에 대해서 알아보았습니다. 계속해서 나머지 제어문에 대해서 학습해 나가도록 하겠습니다.
문제 풀이
정보처리기능사 실기 문제: 숫자를 역순으로 출력하기
이 문제에서는 C 언어를 사용하여 주어진 숫자를 역순으로 변환하여 출력하는 프로그램을 작성하는 것이 목표입니다. 이 과정에서 while
반복문과 산술 연산을 사용하여 숫자의 각 자릿수를 역순으로 재배치하는 방법에 대해 이해해야 합니다.
문제: 정수 number
가 주어졌을 때, 이 숫자를 역순으로 변환하여 출력하는 C 프로그램을 작성하시오.
#include <stdio.h>
int main() {
int number = 1234;
int div = 10, result = 0;
// 숫자를 역순으로 변환하는 과정
while (number != 0) {
result = result * div;
result = result + number % div;
number = number / div;
}
// 역순으로 변환된 숫자 출력
printf("%d", result);
}
해결 방법:
#include <stdio.h>
를 사용하여 표준 입출력 라이브러리를 포함합니다.main
함수를 정의하여 프로그램의 시작점을 만듭니다.- 정수형 변수
number
에 역순으로 변환하고자 하는 숫자를 할당합니다. 예제에서는1234
를 사용합니다. - 변수
div
를 10으로 초기화하여 10진수 체계에서 숫자를 분해하고 다시 조합하는 데 사용합니다. 변수result
는 역순으로 변환된 숫자를 저장하기 위해 0으로 초기화합니다. while
반복문을 사용하여number
가 0이 아닌 동안 숫자의 각 자릿수를 역순으로 재배치하는 과정을 반복합니다. 이때,number % div
를 사용하여 현재number
의 가장 낮은 자릿수를 구하고,result
에 이를 추가하여 역순으로 재조합합니다.- 각 반복마다
number
를div
로 나누어 한 자리씩 줄여나갑니다. - 최종적으로 역순으로 변환된
result
를printf
함수를 사용하여 출력합니다.
이 문제는 숫자의 각 자릿수를 분해하고, 이를 역순으로 재조합하여 새로운 숫자를 생성하는 기본적인 알고리즘 구현 능력을 평가합니다.
정보처리산업기사 실기 시험 기출 문제 - 7의 배수 합계 계산
문제
다음 C 프로그램이 실행되었을 때의 동작을 설명하고, 출력 결과를 예측하시오.
소스 코드 파일명: sum_of_multiples_of_seven.c
#include <stdio.h>
main() {
int i = 1, n = 0;
while (i <= 50) {
if (i % 7 == 0)
n += i;
i++;
}
printf("%d", n);
}
입력 예시
이 프로그램은 입력을 받지 않습니다.
출력 예시
정답 예시에 해당하는 숫자를 여기에 작성합니다. (계산 필요)
해설
이 프로그램은 1부터 50까지의 숫자 중 7의 배수의 합을 계산하고 그 결과를 출력합니다.
int i = 1, n = 0;
에서i
를 1로 초기화하여, 1부터 시작하는 반복문을 생성하고,n
을 0으로 초기화하여 7의 배수의 합을 저장할 변수를 선언합니다.while (i <= 50)
는i
가 50 이하인 동안 반복합니다.if (i % 7 == 0)
는i
가 7의 배수인지를 확인합니다. 만약 7의 배수라면,n += i;
를 통해n
에i
를 더합니다.i++
는 반복문의 매 회차마다i
의 값을 1씩 증가시킵니다.printf("%d", n);
는 계산된 7의 배수의 총 합을 출력합니다.
이 프로그램은 반복문과 조건문을 사용하여 특정 조건(여기서는 7의 배수)에 부합하는 숫자들의 합을 계산하는 방법을 보여줍니다.