반복문(Iteration Statements)
반복문이란 프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 명령문입니다.
프로그램이 처리하는 대부분의 코드는 반복적인 형태가 많으므로, 가장 많이 사용되는 제어문 중 하나입니다.
C++에서 사용되는 대표적인 반복문의 형태는 다음과 같습니다.
- while 문
- do / while 문
- for 문
- 범위 기반의 for 문
while 문
while 문은 특정 조건을 만족하는 한 계속해서 주어진 명령문을 반복 실행합니다.
C++에서 while 문의 문법은 다음과 같습니다.
문법
while (조건식) { 조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문; }
do / while 문
while 문은 루프에 진입하기 전에 먼저 조건식부터 검사합니다.
하지만 do / while 문은 먼저 루프를 한 번 실행한 후에 조건식을 검사합니다.
즉, do / while 문은 조건식의 결과와 상관없이 무조건 한 번은 루프를 실행합니다.
C++에서 do / while 문의 문법은 다음과 같습니다.
문법
do { 조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문; } while (조건식);
for 문
while 문은 우선 조건식이 참(true)인지를 판단하여, 참이면 내부의 명령문을 실행합니다.
내부의 명령문을 전부 실행하고 나면, 다시 조건식으로 돌아와 또 한 번 참인지를 판단하게 됩니다.
for 문은 while 문과는 달리 자체적으로 초기식, 조건식, 증감식을 모두 포함하고 있는 반복문입니다.
따라서 while 문보다는 좀 더 간결하게 반복문을 표현할 수 있습니다.
C++에서 for 문의 문법은 다음과 같습니다.
문법
for (초기식; 조건식; 증감식) { 조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문; }
범위 기반의 for 문
C++11부터는 범위 기반의 for 문이라는 새로운 형태의 반복문이 추가되었습니다.
범위 기반의 for 문은 표현식 안에 포함되어 있는 모든 값에 대해 한 번씩 루프를 실행해 줍니다.
이러한 범위 기반의 for 문은 배열을 자동으로 인식하며, 컨테이너 클래스에서 많이 사용됩니다.
다음 예제는 범위 기반의 for 문을 사용하여 배열의 모든 값을 출력하는 예제입니다.
예제
int arr[5] = {1, 3, 5, 7, 9}; for (int element : arr) { cout << element << " "; } // 1 3 5 7 9
루프 제어
일반적으로 조건식의 검사를 통해 루프로 진입하면, 다음 조건식을 검사하기 전까지 루프 안에 있는 모든 명령문을 실행합니다.
하지만 continue 문과 break 문은 이러한 일반적인 루프의 흐름을 사용자가 직접 제어할 수 있도록 도와줍니다.
continue 문
continue 문은 루프 내에서 사용하여 해당 루프의 나머지 부분을 건너뛰고, 바로 다음 조건식의 판단으로 넘어가게 해줍니다.
보통 반복문 내에서 특정 조건에 대한 예외 처리를 하고자 할 때 자주 사용됩니다.
다음 예제는 1부터 100까지의 정수 중에서 짝수를 제외하고 홀수만을 출력하는 예제입니다.
예제
int except_num = 2 for (int i = 0; i <= 100; i++) { if (i % except_num == 0) { continue; } cout << i << " "; } // 1 3 5 7 9 ... 97 99
break 문
break 문은 루프 내에서 사용하여 해당 반복문을 완전히 종료시킨 뒤, 반복문 바로 다음에 위치한 명령문을 실행합니다.
즉 루프 내에서 조건식의 판단 결과와 상관없이 반복문을 완전히 빠져나가고 싶을 때 사용합니다.
다음 예제는 1부터 사용자가 입력한 정수까지의 합을 구하는 예제입니다.
예제
int num = 1, sum = 0; int end_num = 10; while (1) // 무한 루프 { sum += num; if (num == end_num) { break; } num++; } cout << "1부터 " << end_num << "까지 더한 값은 " << sum << "입니다."; //1부터 10까지 더한 값은 55입니다.