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 반복문 종료
'프로그래밍 언어 > C++' 카테고리의 다른 글
[게임 프로그래머 입문 올인원] 함수와 디버깅 : 스택과 레지스터 (13강) (0) | 2023.09.05 |
---|---|
[게임 프로그래머 입문 올인원] 함수와 디버깅 : 함수, 변수의 범위 (12강) (0) | 2023.09.05 |
[게임 프로그래머 입문 올인원] 데이터와 로직 : 조건문, 반복문, 연습문제 (8, 9, 10강) (0) | 2023.09.05 |
C++ 연산자 총정리 (0) | 2023.09.05 |
[게임 프로그래머 입문 올인원] 데이터와 로직 : 연산 (6, 7강) (4) | 2023.09.05 |