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

[week 04] C++ 복습_3장 선택문 (2)

by 전전긍긍 2021. 10. 16.

202109023_C++_공부기록

 

  • switch 문 작성 규칙
  • 조건 연산자 (삼항연산자)
  • 연산자 우선순위 / 결합성

1. switch 문 작성 규칙

 

switch (switch - 수식)
{
	case 값1: 문장1; break;
    case 값2: 문장2; break;
    
    ...
    case 값n: 문장n; break;
    
    default: case가 부합되지 않을 때, 실행되는 문장;
}

switch - 수식결과정수형식이어야 하며, 괄호 안에 작성한다.

▶ 값1, 값2,... 값n은 정수형식이어야 하며, 변수를 포함할 수 없다.

case문이 실행되면 break문까지 혹은 switch 문의 끝까지 실행된다. (break가 생락되어있다면 끝까지 실행)

break문은 즉시 switch문을 빠져나가게 하며, 생략이 가능하다.

default문은 생락가능하며, 어느 값과도 부합되지 않을 때 실행된다.

 

switch문 (실습1)

#include <iostream>
using namespace std;

int main() {
	int score;
	cout << "점수를 입력하세요: ";
	cin >> score;
	
	switch ( score / 10 )
		{
			case 10:
			case 9: cout << " Grade is A" << endl; break;
			case 8: cout << " Grade is B" << endl; break;
			case 7: cout << " Grade is C" << endl; break;
			case 6: cout << " Grade is D" << endl; break;
			default: cout << "Grade is F" << endl;
		}
}
//점수를 입력하세요: 99
// Grade is A

2. 조건 연산자 (삼항연산자)

: 변수의 조건에 따라 값을 대입하고 싶을 때, 조건식을 사용하여 작성할 수 있다.

if (x > 0)
	y = 1
else
	y = -1;

if - else문을 조건식으로 바꾸면, 간단히 작성할 수 있다.

y = (x > 0) ? 1 : -1;

//조건식의 문법
부울식 ? 수식1 : 수식2 ;

 

 

조건연산자 (실습2)

#include <iostream>
using namespace std;


int main() 
{
	int num1, num2, max;
	cout << " 두 수를 입력하시오: ";
	cin >> num1 >> num2;

	max = num1 > num2 ? num1 : num2;

	cout << "max는 " << max << " 입니다." << endl;
	return 0;
}
// 두 수를 입력하시오: 12 10
//max는 12 입니다.

3. 연산자 우선순위/결합성

 

연산자 우선순위와 결합성을 연산자의 실행순서를 결정한다

 

▶ 괄호 의 내용이 가장 먼저 실행된다. (가장 안쪽부터)

▶ 괄호가 없는 수식이 계산될 때는 우선순위 규칙에 따른다.

▶ 같은 우선순위 연산자가 나란히 있는 경우에는 결합성이 순서를 정한다.

(대입연산자를 제외한 모든 이항 연산자는 왼쪽 결합성을 가짐)

* 결합성은 왼쪽부터 실행되는지 오른쪽부터 실행되는지

 

1순위. 단항연산자

var++ var-- (후위) ▶ 왼쪽부터

+,- (단항 양과 음), ++var --var (전위)▶ 전위는 오른쪽부터 (변수를 먼저 +하고 또 +)

static_cast<type>(v),(type) (형변환) ▶ 형변환을 해야지 계산을 하니까 우선순위가 높음

!(NOT) 

 

2순위. 산술연산자

곱하기, 나누기, 나머지 

더하기 빼기

 

3순위. 관계연산자

> >= < <=  (비교) ▶ 비교 먼저하고 계산을 할 수 없음. 산술을 해야지 비교가 가능

== != (동등비교)

 

4순위. 논리연산자 ▶비교를 해야지 같이 묶든 말든 함

&& (AND)

|| (OR)

 

5순위. 대입연산자

= += -= *= /= &= ▶ 대입연산자는 오른쪽부터 / 대입은 마지막에


예제 : 세금계산 (실습3)

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
	cout << "**********" << endl;
	cout << "(0 : 1인과세, 1 : 부부합산, 2 : 부부별도, 3 : 가장과세) " << endl;
	cout << "납세의무자 타입을 입력하시오: ";
	int status;
	cin >> status;
	cout << "과세소득을 입력하시오: ";
	double income;
	cin >> income;
	double tax = 0;
	switch (status)
	{
		case 1:
		{
			if (income <= 16700) tax = income * 0.10;
			else if (income <= 67900) tax = 16700 * 0.10 + (income - 16700) * 0.15;
			else if (income <= 137050)
				tax = 16700 * 0.10 + (67900 - 16700) * 0.15 + (income - 67900) * 0.25;
			else if (income <= 208850)
				tax = 16700 * 0.10 + (67900 - 16700) * 0.15 + (137050 - 67900) * 0.25 
					+ (income - 137050) * 0.28;
			else if (income <= 372950)
				tax = 16700 * 0.10 + (67900 - 16700) * 0.15 + (137050 - 67900) * 0.25 
					+ (208850 - 137050) * 0.28 + (income - 208850) * 0.33;
			else
				tax = 16700 * 0.10 + (67900 - 16700) * 0.15 + (137050 - 67900) * 0.25 
					+ (208850 - 137050) * 0.28 + (372950 - 2088550) * 0.33 + (income - 372950) * 0.35;

			break;
		}
	}
	cout << "당신의 부부합산 과세는 " << fixed << setprecision(2) << tax << endl;
	return 0;
	
}
/*
**********
(0 : 1인과세, 1 : 부부합산, 2 : 부부별도, 3 : 가장과세)
납세의무자 타입을 입력하시오: 1
과세소득을 입력하시오: 350000
당신의 부부합산 과세는 93321.00
*/