본문 바로가기

개발/C&C++

(C/C++ 속성 정리) 4일 차 : 분기문 (숙제 있어요)

안녕하세요 넬다이입니다

 

오늘은 속성 정리 4일 차가 되었습니다

오늘 주제는 분기문입니다.

 


분기문

기본 문법 중에 분기문이라는 것이 있다.
분기 - 나눈다는 뜻.
어떤 조건이 참 , 거짓 , 혹은 특정 값을 만족시키는 경우에 따라서
다른 결과를 출력할 수 있도록 하는 게 바로 분기문이다.

분기문의 종류에는 if문, switch, goto 문이 있다.
이러한 분기문을 사용하여 조건에 따라 원하는 결괏값을 도출해 낼 수 있게 된다.


if문

if문은 소괄호 내의 조건에 따라(true, false)에 따라서
2가지 경우의 혹 2가지 이상의 결과물을 출력할 수 있게 한다.
앞서 배웠던 연산자들과 함께 사용하게 된다.
매우 다양한 조건 처리에 자주 사용하는 굉장히 빈도 높은 문법이라고 할 수 있습니다.

 

int 	iAAA = 10;
int 	iBBB = 20;

cout << (iAAA < iBBB) << endl;


if(iAAA > iBBB){
	// iAAA > iBBB가 true라면은
	// 이 중괄호 구문이 실행된다.
	cout << "iAAA < iBBB 결과는 true" << endl;
}

iAAA > iBBB가 false 이므로 중괄호 구문이 실행이 되지 않아서

출력 결과에는 아무것도 뜨지 않게 된다.

 

int 	iAAA = 10;
int 	iBBB = 20;
    
if(iAAA < iBBB)
{
	//iAAA < iBBB가 트루라면은
	//해당 중괄호를 실행한다
	cout << "iAAA < iBBB 결과는 true" << endl;
}

 

iAAA < iBBB가 true 이므로 중괄호 구문이 실행이 되기 때문에

출력결과에는 iAAA < iBBB 결과는 true라는 결과 문이 출력된다.

 

또 한 if문에서 명령문이 하나일 때는 중괄호를 생략할 수 있다.

int 	iAAA = 10;
int 	iBBB = 20;
    
    //실행할 구문이 1줄이라면은 중괄호를 생략해도 된다.
if(iAAA < iBBB)
	cout << "iAAA < iBBB 결과는 true" << endl;

이런 식으로 실행할 명령이 하나라면은 중괄호를 생략해도 된다.

중괄호는 실행 구문을 하나의 영역으로 잡아주는 역할을 하기때문에 if문은 얼래 다음 오는 명령 하나를 묶어주는 역활을 해주고 있어서 중괄호를 하나의 명령으로 인식하여 중괄호 안에 있는 명령들을 전부 실행할 수 있다.

 

이 코드에서는 


if ~ esle 문

조건이 true 또는 false 일 때
각각 수행할 명령을 명시하여 사용할 수 있다.

if~else 문 또한 실행되어야 할 라인의 수에 따라서 1줄이면 중괄호로 묶지 않아도 되고
2줄 이상이라면 중괄호로 영역을 정해 주어야 한다.

else 문은 if문의 값에서 거짓이라는 값이 나왔을 때,
결과가 출력이 되며, else 문은 단독으로 사용이 불가능하다.
if 문이 선언되었을 때만 else 문을 사용할 수 있다.

 

한 개의 if 문과 한 개의 else 문!!!

 

int	iA = 10;
int	iB = 20;

if(iA > iB)
{
	//iA > iB 의 값이 true라면은 이 구문을 실행한다
	cout << "iAAA > iBBB 결과는 true" << endl;
}
else
{
	//위에 if문이 틀리면 이 구문을 실행한다.
	cout << "iAAA > iBBB 결과는 false" << endl;
}

 그렇기에 출력물에서는 

iA > iB가 false이므로 if문에는 못 들어가고 else문에 들어가게 된다.

그렇기 때문에 iAAA > iBBB 결과는 false라는 출력물을 확인할 수 있다.

 


else if 문

else if 조건을 다양하게 혹은 세부적으로 사용하고 싶을 때 사용한다.

아래로 내려가면서 중간에 true인 조건을 하나라도 만나게 되면 아래의 else if는 실행이 되지 않는다.

else if 도 else와 마찬가지로 if문이 선행되었을 때 선언 및 사용이 가능하다.
else if 문을 단독으로 사용하는 것은 불가능하다.
else if 문 뒤에는 else 문이 반드시 와야 하는 것은 아니다. 없어도 된다.

 

int iA = 10;
int iB = 20;
int iC = 0;

//아래로 내려 가면서
//중간에 true인 조건을 하나라도 만나게 되면
//아래의 else if 는 실행이 되지 않는다.
if(iA > iB)
{
	cout << "iA 가 iB 보다 크다." << endl;
}
else if(iA < iC)
{
	cout << "iA 가 iC 보다 작다." << endl;
}
else if(iA != iB) 
	cout << "iA 와 iB 가 같지 않다." << endl;
else if(iC == iB)
{
	cout << "iC 와 iB 가 같다." << endl;
}
else
	cout << "위의 라인에 해당되는 true 가 없었다." << endl;
	//실행되어야 할 라인이 1줄 이라면 중괄호 생략 가능.

 

위에 결과에서는 첫 번째로

if(iA > iB)를 확인하고 false 이기 때문에

else if(iA < iC) 구문을 다음으로 확인을 하고 값이 false 이기 때문에

else if(iA!= iB) 구문을 다음으로 확인하는데 값이 true이기 때문에

iA와 iB가 같지 않다.라는 출력문과 함께 구문이 끝이 나게 된다.

 


상수 조건문 switch ~ case

상수 조건문 이란 무엇인가?

int iA = 0;

cout << "iA 에 값 입력 : ";
cin >> iA;

if(iA == 0)
	cout << "iA == 0" << endl;
else if(iA == 1)
	cout << "iA == 1" << endl;
else if(iA == 2)
	cout << "iA == 2" << endl;
else if(iA == 3)
	cout << "iA == 3" << endl;
else
	cout << "위의 조건을 만족하지 않았다." << endl;

 

이 구문 같은 경우는 사용자가 iA을 입력하고,

그 입력한 값의 따라서 조건문을 타다가 맞는 구문이 있다면은 그 구문에 들어가서 출력해주는 구문입니다.

모든 조건문이 다르다면은 else문에 들어가서 "위의 조건을 만족하지 않았다." 출력문을 출력해줄 것이다.

 

하지만 이 구문을 switch ~ case 구문으로 만들게 된다면은

int iA = 0;

cout << "iA 에 값 입력 : ";
cin >> iA;

switch(iA)
{
case 0:
	cout << "iA == 0" << endl;
case 1:
	cout << "iA == 1" << endl;
case 2:
	cout << "iA == 2" << endl;
case 3:
	cout << "iA == 3" << endl;
	cout << "iA == 3" << endl;
	cout << "iA == 3" << endl;
default:
	cout << "case 를 만족하는 값이 없다." << endl;
}

 

이런 식의 구문이 된다.

이 구문의 경우에는 switch(iA) 그니깐 iA의 값이 0 이면은 case 0:의 구문을 실행해주고

iA의 값이 1이라면은 case 1: 의 구문을 실행시켜주고 0,1,2,3이 전부 아니라면은 default:의 값을 실행해준다.

 

그런데 이 switch 구문의 큰 특징 및 조심해야 할 점이 있는데 그것은 case에서 시작을 한 후 break 구문이 없다면은 

그다음 출력문도 출력을 시켜주는 조심해야 할 점이 있다 한마디로 

 

iA의 값이 0이라면은 출력문은

iA == 0

iA == 1

iA == 2

iA == 3

iA == 3

iA == 3

case를 만족하는 값이 없다.

 

라는 결과가 나올 것이고

 

iA의 값이 3이라면은

iA == 3

iA == 3

iA == 3

case를 만족하는 값이 없다.

 

라는 결과가 나올 것이다.

 

그렇기 때문에 case 후에는 break를 넣어주어서 어디 부분에서 끊을지를 명시해줘야 한다.

 

위에 코드에서 break를 넣는다면은 이런 코드가 될 것이다.

int iA = 0;

cout << "iA 에 값 입력 : ";
cin >> iA;

switch(iA)
{
case 0:
	cout << "iA == 0" << endl;
	break;
case 1:
	cout << "iA == 1" << endl;
	break;
case 2:
	cout << "iA == 2" << endl;
	break;
case 3:
	cout << "iA == 3" << endl;
	cout << "iA == 3" << endl;
	cout << "iA == 3" << endl;
	break;
default:
	cout << "case 를 만족하는 값이 없다." << endl;
	break;
}

 

이런 식으로 코드를 짜게 된다면은 

iA가 0이라면은 iA == 0이라는 출력 결과만 얻게 될 것이다.


goto문

금지된 문법 goto에 대해서 알아보자.
goto 는 지정된 곳으로 이동하는 제어문입니다.

레이블 이름 : 
goto 레이블 이름;
금지된 문법이니까 알고만 있고 쓰지는 마세요.

 

Test:
cout << "dlaksjdlfaksdjlfaksdj" << endl;
cout << "dlaksjdlfaksdjlfaksdj" << endl;
cout << "dlaksjfaksdj" << endl;
    
    
goto Test;
cout << "여기는 실행 안들어 올것이다" << endl;
    

 

 

이 구문에서는 Test: 와 goto Test: 구문이 두 개가 존재한다.

설명을 하자면은 goto Test;는 Test: 일로 가라는 명령을 하고 있는 것이다.

 

한마디로 cout << "여기는 실행 안 들어올 것이다" << endl

이 구문을 가지 않고 goto Test인 Test로 다시 올라가서 무한 반복을 하게 되는 코드이다.


 

오늘은 이 정리를 보고 계신 분이 있을지는 모르겠지만

숙제를 드리겠습니다.!!!!

 

댓글로 달아주시면은 제가 언제든지 확인하면 바로바로 답글 달 아드 릴 테니깐 혹시라도 보고 공부하시는 분이 계시다면은 꼭 한번 해보시기를 권장해요 ㅎㅎㅎㅎ.

 

문제.

성적 도출 프로그램을 만들어 보자.
국어, 영어, 수학 점수를 입력을 받아서 총합과 평균이 나오는데

평균 점수가
90~100점은 a학점 출력
80~90점은 b학점을 출력
70~80점은 c학점
60~70점은 d학점
나머지는 F
if문과 else if 문을 써서 만들어 보고 switch 문을 사용해서도 만들어 보자.

 

기본사항.

 

#include<iostream>

using namespace std;

void main()
{
	int iKor = 0; 
	int iEng = 0; 
	int iMath = 0; 

	cin >> iKor; 
	cin >> iEng; 
	cin >> iMath;

	//여러분들의 코드를 넣어주세요.
	//이 부분을 댓글로 남겨주시면 성심성의껏 답글 남겨드리겠습니다
}

 

[개발/C&C++] - (C/C++ 속성 정리) 3일 차 : 연산자

[개발/C&C++] - (C/C++ 속성 정리) 2일 차 : 자료형 타입과 표현 범위 및 변수 선언

[개발/C&C++] - (C/C++ 속성 정리) 1일 차 : 주석, cout,cin은 무엇인가?