본문 바로가기
C++ 독학/[C++ 독학] C++ 배우기

[C++ 독학] 제어문 <C++기초> 03

by NpsCause 2022. 3. 17.

코드의 흐름을 제어하는 제어문!

 

조건 제어문 

 

우선 조건제어문의 예시를 보며 구체적으로 살펴보겠습니다.

예를들어 'a'라는 변수의 값이 2이상 일 때 에만 실행돼야하는 코드가 있다고 생각해봅시다.

우리는 먼저 a가 2라는 것을 확인하고 맞을 때 실행시키는 코드와 아닐 때 실행시키는 코드로 나눠야됩니다. 

 

 

if-else if-else문

 

if문은 조건이 참(ture)일 경우와 거짓(false)일 경우로 나뉜다.

if(조건){
	코드(1)
}
else{
	코드(2)
}

if문은 이런식으로 사용되게 됩니다.

 

이 때 조건은 'a가 2이상 일 때'를 말하는 것이고 참일 경우에 if 블록 안에 있는 코드(1)를 실행시킵니다.

여기서 블록이란 if문 뒤에 중괄호 '{' 로 시작해서 중괄호 '}' 로 끝나는 공간을 말합니다.

그리고 만약 'a'가 2이상이 아니라면(거짓) else 블록 안에 있는 코드(2)를 실행하게 됩니다.

 

즉, 조건이 '참'이라면 if문 블록을 실행시키고 조건이 '거짓'이라면 else블록을 실행시킵니다.

ex)

if(a > 2){
	코드(a가 2이상일 경우)
}
else{
	코드(a가 2이상이 아닌 경우)
}

 

그런데 만약 2와 같은경우를 확인해야 한다면 어떻게 해야할까요?

이 때 우리가 사용하는 것이 else if입니다. else if는 if가 '거짓'일 경우에 실행되는 코드로 if가 '참'이라면 실행되지 않는 코드입니다.

ex)

if(a > 2){
	코드(a가 2이상인 경우)
}
else if(a == 2){
	코드(a가 2인 경우)
}
else{
	코드(a가 2이상도 같지도 않은 경우)
}

비교 연산자( <, > , == ) 정리 http://www.tcpschool.com/cpp/cpp_operator_comparison

 

조건에 ture나 1을 넣으면 '항상'실행됩니다.

 

switch문

 

switch문은 사용자가 비교할 값에 대해 맞는 값을 찾아 실행됩니다. 마지막엔 default를 사용하여 모든 값이 거짓일 경우에 실행할 코드를 작성합니다. (else와 같음)

switch( (비교할 값) ){
	case (비교 되는 값1):
    	(코드1)
        break;
    case (비교 되는 값2):
    	(코드2)
        break;
    case (비교 되는 값3):
    	(코드3)
        break;
    case (비교 되는 값4):
    	(코드4)
        break;
    default:
    	(코드5)
        break;
}

switch문은 if문과 다르게 break를 사용하지 않으면 그 아래에 있는 case들을 지나치지 않고 계속 검사하게 되고, 만약 default가 있다면 default블록의 코드를 무조건 실행시키게 됩니다.

 

여기서 사용된 break는 무엇일까요?

break 는 말 그대로 제어문을 마치고 블록밖으로 나가겠다는 뜻입니다. 나중에도 나오겠지만 반복되는 제어문의 경우 반복을 멈추기위해 사용하기도 합니다.

 

 

반복 제어문

 

반복제어문은 우리가 원하는 코드(동작)를 조건에 맞게 반복해야 하거나 배열의 특정 인덱스에 접근할 때 사용하게 됩니다.

 

우리가 1부터 10까지의 숫자를 더하는 프로그램을 작성한다고 생각해 봅시다.

int sum = 1+2+3+···+10

이렇게 작성해도 상관은 없습니다. 하지만 1부터 1000까지 10000까지 값을 더해야 한다면 이 코드는 실용성 없는 코드가 될 것입니다.

 

while문

 

while문에 대해서 알아보겠습니다.

while(조건){
	실행될 코드
}

반복문은 조건문과 마찬가지로 조건이 '참'일때 블록에 있는 코드를 실행하고 '거짓'일 때 반복문을 빠져나옵니다. 

 

❌주의사항❌

만약 조건이 항상 참이면 

더보기

코드

#include<iostream>

using namespace std;

int main(){
    while(true){
        cout << "Loop" << endl;
    }
}

다음과 같이 끝도 없이 while문을 반복하게 됩니다.

더보기
조건이 항상 '참'일때

 

다시 본론으로 들어와서

1부터 10까지의 값을 while문을 사용해 더하면

int sum = 0;
int num = 1;

while(num <= 10){
	sum += num; // 여기에 num++해도 상관없음!
    num++; // num = 1, 2, 3, 4 ···, 10
}

이런 결과가 나오게 됩니다.

 

do while문

 

do while문은 무조건 한번은 코드를 실행하고 조건을 검사해 반복문을 실행하겠다는 것 입니다. 문법은 다음과 같습니다. 

do{
	(코드)
}while(조건);

 

ex)

더보기

다음의 결과는 어떻게 될까요?

int i = 1;
do{
	i++;
}while(i<0);

cout << i;

 

for문

 

for문은 for(변수; 조건; 증감식) 다음과 같은 문법으로 사용됩니다.

for문 내부적으로 정의해 둔 변수가 조건에 적합할 때 증감하며 반복문을 실행시킵니다. 

 

예를 들어 'i'라는 변수를 1에서 10까지 증가시키는 코드를 짠다고 생각해봅시다.

while문 이였다면 while문 밖에 int i를 선언하고 코드에서 i+1을 실행해야 합니다.

int i = 1;
while(i<=10){
	cout << i++ << endl;
}

 

하지만 for문을 사용하면 

for(int i = 1; i <= 10; i++){
	cout << i << endl;
}

위와 같이 사용할 수 있습니다.

 

지금은 코드가 단순해서 큰 차이가 없어보이지만 나중에 배열에 접근하거나 반복횟수를 명확히 해야할 때 사용할 수 있습니다.

 

범위기반 for문

 

범위기반(range-based) for문은 배열의 원소에 접근할 때 사용하면 유용한 반복문입니다.

문법은 for((타입) (변수) : (배열)) 이고 이때 변수가 배열의 원소에 하나하나 접근하며 값을 가져옵니다.

 

int arr[5] = {1,2,3,4,5};
for(int value : arr){
	cout << value << " ";
}

다음 코드를 실행시키면 1 2 3 4 5가 차례대로 나옵니다.

 

 

마치며

앞으로 코딩을 하다보면 제어문을 어떻게 사용하냐에 따라 코드의 효율성이 좌지우지 됩니다. 그래서 상황에 맞는 제어문을 사용하고 조건을 효율적으로 짜는것이 중요합니다. 

 

만약 이렇다할 오류없이 코드가 실행됬을때 프로그램이 진행되지 않으면 반복문이 무한루프를 돌고 있을 수 있답니다.

 

프로젝트

2022.07.07 - [C++ 독학/[C++ 독학] 프로젝트] - [C++ 독학] 평균과 등급 구하기 <프로젝트 03>

 

[C++ 독학] 평균과 등급 구하기 <프로젝트 03>

평균과 등급 구하기 3명의 학생의 수학,국어,영어 성적을 입력받아 평균을 구한 뒤 등급과 평균을출력해 봅시다. 평균 90점 이상 A 평균 80점 이상 B 평균 70점 이상 C 나머지 F 입력 예시 97 93 90 50 6

npscause.tistory.com

 

댓글