프로그래밍 언어/C++

C++ 제어문 총정리

순정법사 2023.09.05

A. 제어문

1. 제어문

a. 제어문이란?

C 프로그램은 절차적 프로그램(procedural program) 또는 명령형 프로그램(Imperative program)

따라서 C 프로그램은 수많은 명령문이 처음부터 끝까지 순서대로 실행되는데

 

🌟 이때 원하는 결과를 얻기 위해서는 순차적 흐름을 제어하는 명령문을 제어문이라고 함

 

b. 제어문의 특징

중괄호{} 에 둘러싸있음 (블록(block)이라고 칭함)

 

c. 제어문의 종류

1) 조건문

2) 반복문

 

 

2. 조건문

🌟 주어진 조건식의 결과에 따라 별도의 명령을 수행하도록 제어하는 명령문

 

if ( / else if / else) 문, 삼항 연산자에 의한 조건문, switch문이 있음

 

a. if ( / else if / else) 문

🌟 if(else if) 문은 조건식의 결과가 참이면 명령문을 실행하고 else 문은 거짓이면 실행함. (else문이 없다면 실행 X)

 

📘 문법

if (조건식1) 
{
    조건식1의 결과가 참일 때 실행하고자 하는 명령문;
} 
else if (조건식2) 
{
    조건식2의 결과가 참일 때 실행하고자 하는 명령문;
} 
else 
{
    조건식1의 결과도 거짓이고, 조건식2의 결과도 거짓일 때 실행하고자 하는 명령문;
}

 

👉 실행될 명령문이 한 줄뿐이라면 중괄호 생략 가능

 

🎨 도식화

 

b. 삼항 연산자에 의한 조건문

위에서 공부한 if 문과 목적은 동일함

 

👉 간단한 식을 단순하게 사용할 수 있음

 

📘 문법

조건식 ? 반환값1 : 반환값2

 

c. switch 문

🌟 주어진 조건 값의 결과에 따라 프로그램이 다른 명령을 수행하도록 하는 조건문

 

📘 문법

switch (조건 값) 
{
    case 값1:
        조건 값이 값1일 때 실행하고자 하는 명령문;
        break;
    case 값2:
        조건 값이 값2일 때 실행하고자 하는 명령문;
        break;
    ...
    default:
        조건 값이 어떠한 case 절에도 해당하지 않을 때 실행하고자 하는 명령문;
        break;
}

 

🤍 문법설명

 

✔ default 절 : 조건 값이 위에 나열된 어떤 case 절에도 해당되지 않을때 실행, (선택사항)

     + 위치가 항상 마지막일 필요는 없음

✔ 절을 빠져나가기 위해서는 break 키워드를 포함하고 있어야 함 (없다면, default까지 쭉 실행)

 

👍 장점

 

if / else 문보다 가독성이 좋음

컴파일러가 최적화를 쉽게 해 속도가 빠름

 

👎 단점

 

조건 값으로 int 형으로 승격할 수 있는 값만 사용 가능해 사용가능한 상황이 적음

ex) char, short, int, 리터럴, 열거체까지만 사용 가능

 

❔ 예제

#include <iostream>
using namespace std;

int main(void)
{
	char ch = 'C';

	switch (ch)
	{
		case 'a':
		case 'A':
			cout << "이 학생의 학점은 A입니다." << endl;
			break;
		case 'b':
		case 'B':
			cout << "이 학생의 학점은 B입니다." << endl;
			break;
		case 'c':
		case 'C':
			cout << "이 학생의 학점은 C입니다." << endl;
			break;
		case 'd':
		case 'D':
			cout << "이 학생의 학점은 D입니다." << endl;
			break;
		case 'f':
		case 'F':
			cout << "이 학생의 학점은 F입니다." << endl;
			break;
		default:
			cout << "학점을 정확히 입력해 주세요!(A, B, C, D, F)" << endl;
			break;
	}
	return 0;
}

✨ 실행결과

이 학생의 학점은 C입니다.

 

 

3. 반복문

🌟 프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 명령문

 

while, do/while, for 문이 있음

 

a. while 문

🌟 특정 조건을 만족할 때까지 계속해서 주어진 명령문을 반복 실행

 

📘 문법

while (조건식)
{

    조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
    조건식의 결과를 변경하는 명령문;

}

 

 

🤍 문법설명

 

✔  (1) 조건식이 참(true)인지를 판단하여, 참이면 내부의 명령문을 실행

✔  (2) (3) 내부 명령문 전부 실행 후

✔  (4) 조건식의 결과를 변경하는 명령문을 실행하고 다시 조건식 판단 (이 과정을 루프라고 함)

 

👉 내부 명령문을 제대로 작성하지 않으면 무한루프에 걸리기 때문에 while 문을 작성할 때는 조건식의 결과가 어느 순간 거짓(false)을 갖도록 조건식의 결과를 변경하는 명령문 (4)을 반드시 포함

 

👉 실행될 명령문이 한 줄뿐이라면 중괄호 생략 가능

 

❔ 예제

#include <iostream>
using namespace std;

int main(void)
{
	int i = 0, num = 5;
	
	while (i < num)
	{
		cout << "while 문이 현재 " << i + 1 << " 번째 반복 실행중입니다." << endl;
		i++; // 이 부분을 삭제하면 무한 루프에 빠지게 됨 
	}
	cout << "while 문이 종료된 후 변수 i의 값은 " << i << "입니다." << endl;
	return 0;
}

✨ 실행결과

while 문이 현재 1 번째 반복 실행중입니다.
while 문이 현재 2 번째 반복 실행중입니다.
while 문이 현재 3 번째 반복 실행중입니다.
while 문이 현재 4 번째 반복 실행중입니다.
while 문이 현재 5 번째 반복 실행중입니다.
while 문이 종료된 후 변수 i의 값은 5입니다.

 

b. do / while 문

🌟 while문과 다르게 먼저 루프를 무조건 한 번 실행한 후 조건식을 검사

 

📘 문법

do {
    조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
    조건식의 결과를 변경하는 명령문;
} while (조건식);

 

 

🤓 예제

#include <iostream>
using namespace std;

int main(void)
{
	int i = 0, num = 3;
	
	do {
		cout << "do / while 문이 현재 " << i + 1 << " 번째 반복 수행중입니다." << endl;
		i++; // 이 부분을 삭제하면 무한 루프에 빠지게 됨 
	} while (i > num);
	cout << "do / while 문이 종료된 후 변수 i의 값은 " << i << "입니다." << endl;
	return 0;
}

✨ 실행결과

do / while 문이 현재 1 번째 반복 수행중입니다.
do / while 문이 종료된 후 변수 i의 값은 1입니다.

 

👉 무조건 한번이 실행되어 위 값들이 출력됨

 

c. for 문

🌟 초기식, 조건식, 증감식을 모두 포함하고 있는 반복문

 

while 문보다는 좀 더 간결하게 반복문을 표현함

 

📘 문법

for (초기식; 조건식; 증감식) 
{
    조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
}

 

 

🤍 문법 설명

 

✔ 초기식, 조건식, 증감식은 각각 생략될 수 있음

👉 실행될 명령문이 한 줄뿐이라면 중괄호 생략 가능

 

🤓 예제

#include <iostream>
using namespace std;

int main(void)
{
	int i;
	int num = 5;
	
	for (i = 0; i < num; i++)
	{
		cout << "for 문이 현재 " << i + 1 << " 번째 반복 수행중입니다." << endl;
	}
	cout << "for 문이 종료된 후 변수 i의 값은 " << i << "입니다." << endl;
	return 0;
}

✨ 실행결과

for 문이 현재 1 번째 반복 수행중입니다.
for 문이 현재 2 번째 반복 수행중입니다.
for 문이 현재 3 번째 반복 수행중입니다.
for 문이 현재 4 번째 반복 수행중입니다.
for 문이 현재 5 번째 반복 수행중입니다.
for 문이 종료된 후 변수 i의 값은 5입니다.

 

d. 범위 기반의 for 문

🌟 표현식 안에 포함되어있는 모든 값에 대해 한 번씩 루프를 실행

 

✔ C++11부터 범위 기반의 for문의 새로운 반복문

✔ 배열을 자동으로 인식

✔ 컨테이너 클래스에서 많이 사용

 

🤓 예제

#include <iostream>
using namespace std;

int main(void)
{
	int arr[5] = {1, 3, 5, 7, 9};
		
	for (int element : arr)
	{
		cout << element << " ";
	}
	return 0;
}

✨ 실행결과

1 3 5 7 9

 

 

4. 기타 제어문

🧡 루프의 제어

 

일반적으로 조건식의 검사를 통해 루프로 진입하면, 루프 안에 있는 모든 명령문을 실행하는데

continue, break 문을 사용하면 루프의 흐름을 제어할 수 있음

 

a. continue 문

🌟 루프 내에서 사용하여 해당 루프의 나머지 부분을 건너뛰고, 바로 다음 조건식의 판단으로 넘어감

 

보통 반복문 내에서 특정 조건에 대한 예외처리를 하고자 할 때 사용

 

🤓 예제 : 1부터 100까지의 정수 중에서 3의 배수를 제외하고 출력

#include <iostream>

int main() {
    for (int i = 1; i <= 10; ++i) {
        // i가 짝수인 경우, 현재 반복을 종료하고 다음 반복으로 이동
        if (i % 2 == 0) {
            continue;
        }
        
        std::cout << i << " "; // 홀수만 출력
    }

    std::cout << std::endl;

    return 0;
}

✨ 실행결과

1 3 5 7 9

 

b. break 문

🌟 루프 내에서 사용하여 해당 반복문을 완전히 종료시킨 뒤, 반복문 바로 다음에 위치한 명령문을 실행

 

즉 루프 내에서 조건식의 판단 결과에 상관없이 현재 반복문을 완전히 빠져나가고 싶을 때 사용

 

👉 현재 반복문이라서 다음에 위치한 명령문이 루프라면 루프를 다시 실행함

 

🤓 예제 : 1부터 10까지의 합을 구하기

#include <iostream>

int main() {
    for (int i = 1; i <= 10; ++i) {
        // i가 짝수인 경우, 현재 반복을 건너뛰고 다음 반복으로 이동
        if (i % 2 == 0) {
            continue;
        }
        
        std::cout << i << " "; // 홀수만 출력

        // i가 7일 때, 반복문을 완전히 종료
        if (i == 7) {
            break;
        }
    }

    std::cout << std::endl;

    return 0;
}

✨ 실행결과

1 3 5 7

 

c. goto문

🌟 프로그램의 흐름을 지정된 레이블(label)로 무조건 변경시키는 명령문

 

다른 제어문과는 달리 아무런 조건 없이 프로그램의 흐름을 옮김

그래서 가장 손쉽게 사용할 수 있지만, 그래서 더 흐름을 복잡하게 만들기 때문에 디버깅 이외에 사용

 

🤓 예제 : 1부터 10까지의 합을 구하기

#include <iostream>

int main() {
    int i = 1;

startLoop:
    if (i <= 10) {
        std::cout << i << " ";

        if (i == 7) {
            goto endLoop; // i가 7이면 반복문 종료
        }

        ++i;
        goto startLoop; // 다음 반복 실행
    }

endLoop:
    std::cout << "반복문 종료" << std::endl;

    return 0;
}

✨ 실행결과

1 2 3 4 5 6 7 반복문 종료

 

 

 


출처 : http://www.tcpschool.com/cpp/cpp_control_loop