본문 바로가기

교육 노트/C++ 기초강의

[C++ 때려 잡기] C++ 기초강의 1-5 기본문법-분기문

2018/08/23 - [교육 노트/C++] - C++ 기초 강의 OT

2018/08/23 - [교육 노트/C++] - C++ 기초강의 1-1 기본문법-Hello World

2018/08/23 - [교육 노트/C++] - C++ 기초강의 1-2 기본문법-변수

2018/08/23 - [교육 노트/C++] - C++ 기초강의 1-3 기본문법-배열기초

2018/08/23 - [교육 노트/C++] - C++ 기초강의 1-4 기본문법-연산자와 사용자 입력


지금까지는 아주기본적인 c++문법을 배워

화면 출력과 입력을 할 수 있게 되었다

그러나 이것만으로는 아직 어떠한 기능을 하는 프로그램을 제작 할 수 없다.

좀더 기능을 가진 프로그램을 제작하기위해 필요한 두가지 기능이 분기문과 반복문인다

이번강의에서는 그중 분기문을 학습하도록 하겠다.


분기문이란 어느 조건에 따라 프로그램의 실행 내용이 분기되는것을 의미한다.

c++에서의 대표적인 분기문중 하나가 if문이다.



1. if문



if문은 statement의 내용이 참인가 거짓인가에 따라 참이면 내용을 실행하고 그렇지않으면 해당 내용을 스킵하고 넘어간다


예를 들어서 숫자를 입력하면 해당 숫자가 짝수인지 확인하는 프로그램을 작성해보자


일단 숫자를 입력받을것이다


int number;

cin >> number;


해당 숫자가 짝수인지 확인하는 방법은 무엇일까


number%2 == 0 가 true 이면 number는 짝수이다.


그럼

해당 숫자가 짝수이면 짝수라고 알려주는 프로그램을 작성해보자


#include <iostream>
using namespace std;

int main()
{
    int number;
    cin >> number;
    if (number % 2 == 0)
    {
        cout << "짝수입니다!" << endl;
    }

    return 0;
}


이해가 되는가? if문의 statement에 number가 짝수이면 number%2 == 0 의 값은 true가 되고 따라서 if문의 내용이 실행된다.


그럼 해당 프로그램을 확장하여

홀수일때는 홀수입니다! 까지 출력할수 있도록 해보자 


#include <iostream>
using namespace std;

int main()
{
    int number;
    cin >> number;
    if (number % 2 == 0)
    {
        cout << "짝수입니다!" << endl;
    }

    if (number % 2 == 1)
    {
        cout << "홀수입니다!" << endl;

    }

    return 0;
}



위에서 했던대로 if문을 추가하여 해결할수있다.



그런데 생각해보니 숫자를 입력받으면 짝수가 아니면 당연히 홀수일텐데 if문과 조건들을 다 입력하는거는 조금 귀찬은 일인거 같다.


그래서 만든것이 else문이다.


else문의경우 위에 if문이 거짓일때 들어가도록 하는것이다


따라서 위의 프로그램을 다음과 같이 고칠수있다.


#include <iostream>
using namespace std;

int main()
{
    int number;
    cin >> number;
    if (number % 2 == 0)
    {
        cout << "짝수입니다!" << endl;
    }

    else
    {
        cout << "홀수입니다!" << endl;
    }
    return 0;
}



이렇게 if-else문을 통하여 한가지 조건으로 2가지 상황의 분기를 만들수 있게 되었다.


그런데 만약 분기를 더 늘리고 싶으면 어떻게 할까


그럴떄 사용하는것이 if-else if- else 문이다.



else는 선택이므로 위의 조건이 모두 거짓일때 실행할 내용이 없으면  생략해도 된다


즉 if - else if - else if ... 으로 수많을 조건과 분기를 만들수있다.



#include <iostream>
using namespace std;

int main()
{
    int number;
    cout << "숫자를 입력하세요 :";
    cin >> number;
    if (number <10)
    {
        cout << "10보다 작습니다." << endl;
    }
    else if (number < 20)
    {
        cout << "20보다 작습니다." << endl;
    }
    else if (number < 30)
    {
        cout << "30보다 작습니다." << endl;
    }
    else
    {
        cout << "30이상입니다!." << endl;
    }
    return 0;
}



여기서 if-if-if 와 if-else if- else if의 차이점이 생기는데


if문은 뒤에 else if나 else가 없으면 그냥 하나의 if문으로 여러 if문은 각각 독립적이다.

따라서 위의 예시를 if if if 문으로만든

#include <iostream>
using namespace std;

int main()
{
    int number;
    cout << "숫자를 입력하세요 :";
    cin >> number;
    if (number <10)
    {
        cout << "10보다 작습니다." << endl;
    }
    if (number < 20)
    {
        cout << "20보다 작습니다." << endl;
    }
    if (number < 30)
    {
        cout << "30보다 작습니다." << endl;
    }
    else
    {
        cout << "30이상입니다!." << endl;
    }
    return 0;
}


을 돌려보면


다음과 같이 아래 if문에도 들어가게된다




2. switch 문

분기문중 다른 하나는 switch문이다 switch문은 변수를 하나 입력받고 해당 변수의 case부터 실행되는 특수한 문장으로

다음과 같은 문법을 가진다




여기서 중요한점은 해당 case 만 실행되는것이 아니라 해당 case 부터 break를 만날때까지 실해되는것이다.



걍 if문 여러개 쓰는것과 차이점은 돌아가는 구조상을 제외하고 딱히 없지만 switch 로 만들었을때 좀더 심플하게작성할수있는 경우가 있다.


switch문의 특징은 조건이 아닌 정수형 number를 입력받고 (char, int) 해당 number와 동일한 case로 가기때문에 문자열 과같은 경우는 사용할수없다.



예제 파일 (OT 페이지 참조) 의 계산기 프로그램 if문과 switch로 구현해보면서 if문과 switch문을 실습하자




ps 논리 연산자


만약 조건에 5보다 크거나 같고 10보다 작다 라는 조건을 사용하려면 어떻게 해야할까

아마 처음 배우는 대부분의 학생은 

if(5 <= x <10 ) 이런식으로 작성할것인데

c++ 에서는 이런식으로작성하지 않는다.


따라서 이런 내용을 작성하기위한 방법이 따로 존재하는데 그것이 앞선 연산자에서 배웠던 논리 연산자이다

논리 연산자에서 && 이 "그리고" || 이 "또는" 이라고 말했는데


5보다 크거나 같고 10보다 작다는 5보다 크거나 같다, 그리고 10보다 작다 라는 의미이다

따라서

if(5 <= x && x < 10) 과 같이 쓰면된다.


(A)&&(B) 는 A,B가 둘다 참이여야 참이고

(A)||(B) 는 A,B둘중 하나가 참이면 참이다


논리연산자의 검사 순서도 존재하지만 아직 세부적으로 알 필요가 없으므로 생략하도록 하겠다.









728x90