조건
C++에서는 여러 상황을 나타내기 위해서 조건(condition)이라는 개념을 사용한다. 참(true)과 거짓(false)이라는 2개의 값 중 어느 것을 나타내기 위한 것을 C++에서는 [조건]이라고 부른다.
간단하게 조건을 C++의 식으로 나타내 5보다 7이 크다는 것을
7 > 5
라는 부등식으로 나타낼 수 있다. 확실하게 7은 5보다 큰 수치이므로 이 부등식은 [올바르다]고 한다.
한편 다음 부등식의 경우
7 < 5
이 식은 [올바르지 않다]라고 할 수 있다. C++에서도 >와 같은 기호를 사용할 수 있고 위의 식은 true, 아래의 식은 false로 평가된다. 즉, 7 > 5와 7 < 5라는 식은 C++의 조건이라고 할 수 있다.
조건을 만들기 위해 사용하는 > 기호 등을 관계 연산자(relational operator)라고 부른다.
관계 연산자
연산자 | 식이 true로 되는 경우 |
== | 오른쪽과 왼쪽이 같다. |
!= | 오른쪽이 왼쪽과 같지 않다. |
> | 오른쪽보다 왼쪽이 크다. |
>= | 오른쪽보다 왼쪽이 크거나 같다. |
< | 오른쪽보다 왼쪽이 작다. |
<= | 오른쪽보다 왼쪽이 작거나 같다. |
true와 false는 bool형의 값이고, 논리 리터럴이라고 한다. bool형의 값은 비교적 새롭게 C++에 도입된 것이다. 그래서 true와 false는 정수형의 값으로 변환되는 경우도 있다. 이 경우는
true -> 1
false -> 0
로 된다.
또한 역으로 정수형의 값이 bool형의 값으로 변환되는 경우도 있다.
0이외의 정수 -> true
0 -> false
로 변환되는 것이다.
표의 관계 연산자를 사용해서 몇 개의 조건을 기술해 보면 다음과 같다.
7 > 5 | 이 조건의 평가는 true이다. |
7 < 5 | 이 조건의 평가는 false이다. |
a == 6 | 이 조건의 평가는 변수 a의 값에 따라 다르다. |
a != 6 | 이 조건의 평가는 변수 a의 값에 따라 다르다. |
if 문
if문은 식을 평가해서 실행하는 문장을 결정하는 문장을 말한다. C++에서는 상황에 따른 처리를 수행하는 경우
[조건]의 값(true 또는 false)에 따라 처리를 수행한다.
라는 형식의 문장을 기술한다. 이와 같은 문장을 조건문(conditional statement)이라 한다. if문은 조건이 true인 경우에 지정한 문장을 처리하는 구문이다.
[구문 : if문]
if (조건)
문장;
예제) if문의 사용
키보드로부터 입력한 값이 1이면 실행 결과와 같이 "1이 입력되었습니다. if문 처리를 종료합니다"를 출력하는 코드를 작성해 보도록 한다.
#include <iostream>
using namespace std;
int main()
{
int res;
cout << "정수를 입력하세요=> ";
cin >> res; //①변수 res에 키보드로부터 입력을 받는다.
if (res == 1) //②...
cout << res << "이 입력되었습니다.\n"; //③...
cout << "if문 처리를 종료합니다.\n";
return 0;
}
②에서 1이 입력된 경우 이 조건이 참(res == 1)이 된 경우 ③의 부분이 처리된다. false인 경우는 ③의 부분은 처리되지 않는다. 여기서 사용자가 코드를 실행해서 1을 입력한 경우는 조건 res == 1이 true가 되므로 ③의 부분이 처리된다.
만약 사용자가 1 이외의 문자를 입력했을 경우 실행 결과는 아래와 같다.
이번은 res == 1이라는 조건이 false로 되기 때문에, ③의 부분은 처리되지 않는다. 따라서 실행했을 때의 화면은 위와 같게 된다. 이와 같이 if문을 사용하면 조건이 true일 때만 처리를 수행할 수 있다.
if문으로 여러 개의 문장을 처리
if문에서는 조건이 true일 때, 여러 개의 문장을 처리할 수도 있다.
이 때문에 {}로 블록을 만들고, 여러 개의 문장을 묶는다. 그러면 블록 내에는 원칙과 같이 한 문장씩 처리된다.
[구문 : 여러 개의 문장을 처리하는 if문]
if(조건){
문장1;
문장2; 조건이 true일 때, 순서대로 처리된다.
...
}
예제) 여러 개의 문장을 처리하는 if문의 사용
#include <iostream>
using namespace std;
int main()
{
int res;
cout << "정수를 입력하세요=> ";
cin >> res;
if (res == 1) { //①...
cout << res << "이 입력되었습니다.\n";
cout << res << "은 if문의 조건이 true입니다.\n";
}
cout << "if문 처리를 종료합니다.\n";
return 0;
}
①에서 사용자가 1을 입력한 경우는 조건이 true로 되기 때문에 블록 내의 처리가 순서대로 수행되고, 2개의 문장의 문자열이 출력된다. 만약 1 이외의 수치를 입력한 경우는 블록 내의 처리는 실행되지 않고, 다음과 같이 된다.
블록으로 하지 않으면?
#include <iostream>
using namespace std;
int main()
{
int res;
cout << "정수를 입력하세요=> ";
cin >> res;
if (res == 1)
cout << res << "이 입력되었습니다.\n";
cout << res << "은 if문의 조건이 아닙니다.\n"; //②...
cout << "if문 처리를 종료합니다.\n";
return 0;
}
1이 아닌 경우는 블록이 없기 때문에 if문의 내용은 ②뿐인 것으로 되어 버린다.
이와 같은 것을 방지하기 위해서는 어느 곳이 if문인가 알기 쉽도록 인덴트를 수행하거나 한 문장이라도 블록으로 표시하여 읽기 쉬운 코드를 작성해야 한다.
if문에서는 세미콜론의 위치에 주의하도록 한다. 통상 if문의 1행째에 조건을 기술하여 개행하지만, 이 행에는 세미콜론은 필요 없다.
if (res == 1) //이 행에서는 세미콜론을 붙이지 않는다.
cout << "1이 입력되었다.\n";
if ~ else문
if문에서는 조건이 true인 경우만 특정 처리를 한다. 더욱이 if문의 변경으로 조건이 false인 경우에 지시한 문장을 실행시키는 구문이 if~else문이다. 즉, 조건이 true일 때 수행할 문장과 false일 때 수행할 문장 2가지를 기술한다.
[구문 : if~else문]
if(조건)
문장1;
else
문장2;
이 구문에서는 조건이 true인 경우에 문장 1을 처리하고, false인 경우에 문장 2를 처리한다.
[구문 : 여러 개의 문장을 처리하는 if~else문]
if (조건) {
문장1;
문장2; //조건이 true일 때 순서대로 처리된다.
...
}
else {
문장3;
문장4; //조건이 false일 때 순서대로 처리된다.
...
}
이 구문에서는 조건이 true인 경우에 문장1, 문장2, ...의 순서대로 처리하고, false인 경우에 문장3, 문장4, ...의 순서대로 처리한다.
예제) if ~ else문의 사용
키보드로부터 입력한 값이 짝수인지 홀수인지를 판별하는 코드를 작성해 보도록 한다.
#include <iostream>
using namespace std;
int main()
{
int res;
cout << "정수를 입력하세요=> ";
cin >> res;
if ((res % 2) == 0) { //...①
cout << res << "은 짝수입니다.\n"; //...②
}
else {
cout << res << "은 홀수입니다.\n"; //...③
}
return 0;
}
[if ((res % 2) == 0)]은 키보드로 입력한 값(res)을 2로 나눈 나머지가 0이면 짝수이므로 ②를 수행하고, 아니면 홀수이므로 ③을 수행한다. 짝수를 입력한 경우는 지금까지 똑같이 ②가 처리되지만, 홀수를 입력한 경우는 ③이 처리된다.
다중 if문
다양한 조건에 따라 서로 다른 처리를 할 경우에는 조건에 맞는 문장들을 지정해야 한다. 이와 같이 2개 이상의 조건을 판단하여 처리할 경우에는 다중 if문 즉, if~else if~else문을 사용한다.
[구문 : if~else if~else]
if (조건1) {
문장1;
문장2; //조건1이 true일 때에 처리된다.
...
}
else if (조건2) {
문장3;
문장4; //조건1이 false이고, 조건2가 true일 때 처리된다.
...
}
else if (조건3) {
... //똑같이 항상 조건을 조사할 수 있다.
}
else {
... //모든 조건이 false일 때 처리된다.
}
이 구문에서는 조건1을 판단하고 true인 경우는 문장1, 문장2 ...의 처리를 수행한다. 만약 false인 경우는 조건2를 판단하고, 문장3, 문장4 ...의 처리를 수행한다. 이와 같이 차례대로 조건을 판단해가며 어느 조건도 false인 경우는 최후의 else 이하의 문장이 처리된다.
else if문의 조건은 몇 개라도 설정할 수 있고, 최후의 else는 생략 가능하다. 최후의 else를 생략하고, 또 어느 조건에도 맞지 않는 경우 이 코드 내에 실행되는 문장은 존재하지 않는 것으로 된다.
이 구조를 사용하면 여러 조건에 대응한 처리를 할 수 있다.
예제) 다중 if의 사용
신장[cm]와 몸무게[kg]를 키보드로 입력받아 BMI(체질량 지수)를 계산해서 아래와 같이 분류하는 코드를 작성하시오.
18.5 미만 : [체중 미달]으로 표시
18.5 이상 25 미만 : [적정 체중]으로 표시
25 이상 30 미만 : [제 1도 비만]으로 표시
30 이상 35 미만 : [제 2도 비만]으로 표시
35 이상 40 미만 : [제 3도 비만]으로 표시
40 이상 : [제 4도 비만]으로 표시
#include <iostream>
using namespace std;
int main()
{
double height, weight, result;
cout << "신장(cm)을 입력하세요=> ";
cin >> height;
cout << "몸무게(kg)를 입력하세요=> ";
cin >> weight;
result = (weight / ((height / 100.0) * (height / 100.0)));
cout << "BMI = " << result << "입니다.\n";
if (result >= 40)
cout << "제 4도 비만입니다.\n";
else if (result >= 35)
cout << "제 3도 비만입니다.\n";
else if (result >= 30)
cout << "제 2도 비만입니다.\n";
else if (result >= 25)
cout << "제 1도 비만입니다.\n";
else if (result >= 18.5)
cout << "적정 체중입니다.\n";
else
cout << "체중 미달입니다.\n";
return 0;
}
이와 같이 if~else if~else를 사용하면 몇 개의 조건을 판단해가며, 복잡한 처리를 수행할 수 있다.
출처: 박흥복, 서정희. 2015. C++ 프로그래밍 (초보자를 위한). 문운당
'개발 > C++' 카테고리의 다른 글
C++ 반복문 (0) | 2022.03.11 |
---|---|
C++ 제어문2 (0) | 2022.03.10 |
C++ 식과 연산자2 (0) | 2022.03.06 |
C++ 식과 연산자 (0) | 2022.02.25 |
C++ 변수2 (0) | 2022.02.20 |