본문 바로가기
School Study/2021-2

[week 03] C++ 복습_3장 선택문 (1)

by 전전긍긍 2021. 10. 7.

202109016_C++_공부기록

 

선택문에는 (1) if문(2) switch case문이 있다.

이번 장에서는 (1) if문을 다룬다.

 

  • 단순 if문
  • if - else문
  • 다중 if - else문
  • 중첩 if문

1. bool 데이터 유형과 연산자

 

C++ 변수타입 유형에는 정수형, 실수형, bool형, 문자 char형이 있다.

그 중 bool형을 이번 장에서 다룬다.

 

bool변수 : 부울값(참 또는 거짓)을 갖는 변수

참과 거짓밖에 가지지 않기 때문에 2가지 값을 가진다.

 

그리고 참과 거짓의 부울값을 리턴하는 수식부울식(조건식)이라고 한다.

 

 

2. 관계 연산자

 

연산자 수학 기호 이름
< < 보다 작다
<= 작거나 같다
> > 보다 크다
>= 크거나 같다
== = 같다
!= 같지 않다

 

 

* 예제 : bool식 사용

#include <iostream>
using namespace std;

int main()
{
	double radius;
	cout << "반지름을 입력해주세요 : ";
	cin >> radius;

	if (radius < 0) //부울식을 사용한 선택문
		cout << "음수 입력 불가" << endl;

	else
	{
		double area = radius * radius * 3.14159;
		cout << "원의 면적은 : " << area << endl;
	}

	return 0;
}
//반지름을 입력해주세요 : -3
//음수 입력 불가

 

3. 단순 if 문

- 단순 if문은 조건이 일 때만 실행된다.

- 부울식은 괄호로 둘러싸여져야 하며, 실행문장이 하나일 때만 중괄호를 생략할 수 있다.

 

 

* 단순 if문 실습1

#include <iostream>
using namespace stdl;

int main()
{
	int number;
	cout << "정수를 입력하세요 : ";
	cin >> number;

	if (number % 5 == 0)
		cout << "HiFive" << endl;
	if (number % 5 != 0)
		cout << "HiEven" << endl;

	return 0;
}
//정수를 입력하세요 : 98
//HiEven

 

 

4. 다중 if - else 문

복수의 조건이 있을 때 if else if else if ··· else 이렇게 쓸 수 있음.

 

* 다중 if-else 문 (BMI 계산 프로그램) 실습2

#include <iostream>
using namespace std;

int main()
{
	cout << "몸무게를 kg으로 입력하세요 : ";
	double weight;
	cin >> weight;

	cout << "키를 m로 입력하세요 : ";
	double height;
	cin >> height;

	double bmi = weight / (height * height);

	cout << "당신의 bmi는 " << bmi << endl;
	if (bmi < 18.5)
		cout << "체중미달입니다" << endl;
	else if (bmi < 25)
		cout << "정상체중입니다" << endl;
	else if (bmi < 30)
		cout << "과체중입니다" << endl;
	else
		cout << "비만입니다" << endl;

	return 0;
}
//몸무게를 kg으로 입력하세요 : 52
//키를 m로 입력하세요 : 1.6
//당신의 bmi는 20.3125
//정상체중입니다

 

 

5. 중첩 if 문

 

- if문이나 if - else문은 다른 if문의 내부에 올 수 있으며 이를 중접 if문이라 한다.

- 중첩의 깊이에는 제한이 없다.

//중첩 if문 예시

if (i > k)
{
	if (j > k)
		cout << "i and j are greater than k";
}
else
	cout << "i is less than or equal to k";

 

6. 선택문에서의 일반적인 오류

 

  • 필요한 괄호의 생략 ex. if 뒤에 연산이 여러개 나오면 전체를 하나로 묶어줘야 함
  • 필요한 중괄호({})의 생략 ex. if문 뒤에 한문장이면 괄호 생략 가능인데 아니면 꼭 필수 중괄호
  • 잘못된 세미콜론 사용 ex. if문 조건식 뒤에 세미콜론 넣으면 그 사이에 빈 블럭이 있는 것으로 오해
  • == 대신 = 사용 ex. ==은 관계연산자 =은 대입연산자

 

7. 선택문에서 더 나은 표현

 

 

조건식 자체가 만약 (조건식)이 참이라면 그 밑에 식을 실행한다 라는 의미이기 때문에 ==true는 안해줘도 됨

==false대신 조건식 앞에 ! 붙여주면 false

쓸데없이 길게 쓰지 말고 한문장으로 표현 가능

bool even = ((number % 2) == 0) -> even이 참일려면 (number % 2) == 0 이여야 한다.

자연스럽게 결과값을 even이 가져감

else는 바로 앞 if를 짝이라고 생각함. 노란색 칠해져 있는 애들끼리 짝임.

만약 노란색으로 칠해져있지 않은 if와 else를 맺고 싶으면 중괄호를 써라.

 

 

8.논리 연산자

 

연산자 이름 설명
! NOT 논리 부정
&& AND 논리곱
|| OR 논리합

 

 

논리연산자 진리표

 

9. 단축 논리 연산

 

- p1&&p2 를 계산할 때, p1이 거짓이면 p2는 계산하지 않고 False로 결과를 출력

p1이 참이라면 p2까지 계산

 

- p1 || p2 를 계산할 때, p1이 참이라면 p2를 계산하지 않고 True를 출력

p1이 거짓이라면 p2까지 계산

 

 

* 논리 연산자 실습3

#include <iostream>
using namespace std;

int main()
{
	int number;
	cout << "정수를 입력하세요: ";
	cin >> number;

	if (number % 2 == 0 && number % 3 == 0)
		cout << "2와 3으로 나누어짐" << endl;
	
	if (number % 2 == 0 || number % 3 == 0)
		cout << "2 또는 3으로 나누어짐" << endl;

	if ((number % 2 == 0 || number % 3 == 0) && !(number % 2 == 0 && number % 3 == 0))
		cout << "2 또는 3으로 나누어지지만 2와 3 둘 다 나누어지지는 않는다" << endl;

	return 0;
}
//정수를 입력하세요: 100
//2 또는 3으로 나누어짐
//2 또는 3으로 나누어지지만 2와 3 둘 다 나누어지지는 않는다

 

* 윤년 계산 (실습4)

include <iostream>
using namespace std;

int main()
{
	cout << "년도를 입력하세요: ";
	int year;
	cin >> year;

	bool isLeapyear = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);

	if (isLeapyear)
		cout << year << "년은 윤년입니다." << endl;
	else
		cout << year << "년은 윤년이 아닙니다." << endl;

	return 0;
}

//년도를 입력하세요: 2021
//2021년은 윤년이 아닙니다.