티스토리 뷰

이번 글에서는 저번글과 이어지는 선택문 고급활용에 대해 알아볼것이다.


3강을 안읽은 사람은 3강부터 읽고 오면 이해하는데 어렵지 않을 것이다.


먼저, 본문을 들어가기 전에 알고있으면 고생안하는 몇가지 표현을 알려주겠다.


1. 부울변수 대입 간소화.

부울변수에 조건을 대입하는 코드를 간소화하는 것이다. 말이 어려울 땐 예제 코드보고 이해하는거다.


1
2
3
4
5
6
if (number % 2 ==0)
    even = true;
else
    even = false;
// 위나 아래가 같은 표현이지만 아래쪽이 더 간결하고 좋은 코드
bool even = number % 2 == 0;
cs


1~4행을 보자. number를 2로 나눈 나머지가 0일때와 아닐때로 구분하는데 if-else문으로 처리하였다.

반면 6행을 보자. even의 타입을 bool로 선언해주면서 초기화했다. 이 문장은 한줄로 변수 even이 true또는 false 두 값만 가지게 했다. 훨씬 깔끔하고 효율적이다.


2. 서로 다른 경우에 코드중복 피하기.

선택문을 사용하면서 보게될텐데, if문의 조건이 참이든 거짓이든 둘다 처리해줘야 하는 작업이 있을때 처리하는 경우이다.

3강에서도 누누히 언급했듯 코드는 간결하면서 알아보기 쉬운게 잘 쓴 코드라고 말했다. 예제로 확인하자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (inState) {
    tuition = 5000;
    cout << "the tuition is " << tuition << endl;
}
else {
    tuition = 15000;
    cout << "the tuuition is " << tuition << endl;
}
// 이것보단 아래표현
if (inState) {
    tuition = 5000;
}
else {
    tuition = 15000;
}
cout << "the tuition is " << tuition << endl;
cs


3행과 7행을 보자. 같은 문장, 같은 출력문인데 if문에 한번, else문에 한번, 총 두번이 쓰였다.


반면 10~16행을 보자. tuition의 값만 처리해주고 출력문은 if-else문 밖에 써서 같은 문장 중복을 피했다. 훨씬 짧고 간결하면서 알아보기 쉽다.


여기까지가 개꿀팁 표현들이다. 본문 가즈아


난수 생성  


난수라는 말이 어려울 수 있다. 쉽게말하면 랜덤한 수다. 무작위 수. 그걸 만들어주는 함수에 대해 잠깐 볼것이다.


난수를 만들기 위해서는 전처리기로 <cstdlib>를 불러주고, 이 라이브러리에 포함된 rand() 함수를 사용하여 난수를 만들어준다.


이 함수는 0부터 RAND_MAX 사이의 임의의 정수를 반환한다. RAND_MAX가 뭐냐고? 쉽게말하면 랜덤으로 생성할 수있는 제일 큰 수다. 상수임.


근데 되게 웃기는 것이 있다. 이 함수의 작동원리에서 수를 만들어내는걸 초기값으로 제어하는데 이 초기값이 달라지면 내놓는 수도 달라지는데,

이 초기값을 안바꿔주면 출력할때마다 계속 같은 수만 돌아가면서 출력함. 예를들면 333, 574, 825 가 돌아가면서 계속 나오는거임.


이걸 바꿔주려면 srand(seed) 함수를 사용하는데, 만약 여기서 프로그램을 실행할 때마다 초기값을 바꾸려고한다면 time(0) 함수를 사용한다.

사실 이 time(0) 함수는 1970년 1월 1일 00시 00분 00초 부터 지금까지의 시간을 초로 계산해서 내놓는 함수다. 매 초마다 내놓는 수가 달라진다고 생각하면 됨. 그러니까 이 함수를 이용해서 srand(seed) 함수로 초기값을 계속 바꿔주면 실행할때마다 계속 다른 함수만 내놓겠지.


실행할때마다 새로운 수를 내놓는 코드는 다음과 같다.

1
2
srand(time(0));
cout << rand() << endl;
cs


다시 돌아와서 rand() 함수를 사용하여 0부터 9까지의 난수를 발생시키려면 다음과 같이 쓰면 된다.

1
rand() % 10
cs


다음은 난수를 사용하는 예제이다. 한번 읽고 해석해봐라. 이제 해석 안해줄거임.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <ctime> // time()를 쓰기위해 필요한 라이브러리
#include <cstdlib> // rand() 와 srand()를 쓰기위해 필요한 라이브러리
using namespace std;
 
int main()
{
    // 1. 두 임의의 일의자리 정수 만들기
    srand(time(0));
    int num1 = rand() % 10;
    int num2 = rand() % 10;
 
    // 2. num1 < num2 라면 num1과 num2를 교환
    if (num1 < num2)
    {
        int temp = num1;
        num1 = num2;
        num2 = temp;
    }
 
    // 3. 학생에게 "what is num1 - num2?"의 답을 입력하도록 요청
    cout << "What is " << num1 << " - " << num2 << "?";
    int answer;
    cin >> answer;
 
    // 4. 답을 확인하고, 결과를 화면에 출력
    if (num1 - num2 == answer)
        cout << "You're correct";
    else
        cout << "Your answer is wrong " << num1 << " - " << num2 << " should be " << (num1 - num2) << endl;
cs


논리연산자 


가끔은 여러 조건을 동시에 부합해야하는 if문도 있다. 그럴 때 쓰는 도구가 논리연산자이다. 얘를 쓰면 다중 조건처리가 가능해진다.

1
2
3
! NOT //논리 부정
&& AND // 논리곱
|| OR // 논리합
cs


논리 부정은 참은 거짓으로 만들고 거짓은 참으로 만든다.

논리 곱은 두가지가 모두 거짓이면 거짓, 두가지 모두 참이면 참, 한쪽만 참이거나 거짓이면 거짓이다.

논리 합은 두가지 중 하나가 참이어도 참이고 두가지 모두 거짓일때만 거짓이다.


설명하기 귀찮은데 이정도만 알아도 충분할거같아서 생략함.


switch문  


스위치문은 변수나 수식의 값에 따라 문장을 실행하는 선택문이다.


if문과 다른점은 if문은 값이 참 또는 거짓만 구별해서 두가지옵션만 선택할 수 있다.


그러나 switch문은 내가 원하는 만큼 선택지를 만들어줄수있다.

1
2
3
4
5
6
7
8
9
10
switch (switch-수식)
{
    case 값1: 문장1;
        break;
    case 값2: 문장2;
        break;
.
.
.
default: case가 부합되지 않을때 실행할 문장;
cs

switch문에는 규칙이 있다.

1. switch-수식의 결과는 정수 상수형식이어야 한다.

2. 값1, 2, 3, ...N은 정수상수 형식이어야하며 변수가 포함되면 안된다(ex. 1 + x).

3. case에 해당하면 해당 case문을 실행하고 break를 만날때까지 또는 switch 문 끝까지 실행된다.

4. default 는 생략할 수 있으며 default는 어느 case에도 부합하지 않을때 처리된다.

5. break문은 생략 가능하며, 즉시 switch문을 탈출하는 기능을 가진다.


조건식 


조건식은 일정한 조건에 따라 변수에 값을 대입하고자 할때 유용하게 쓸 수 있다. 예제를 보자.

1
2
3
4
5
6
if (x > 0)
    y = 1;
else
    y = -1;
// 위는 if-else문 아래는 조건식
= x > 0 ? 1 : -1;
cs

4행까지의 if문을 보면 조건에 따라 변수 y에 참이면 1을, 거짓이면 -1을 대입하고있다. 이럴때 조건식은


1
부울 식 ? 수식1 : 수식2;
cs

의 문법으로 같은 표현을 쓸 수 있다.


부울 식의 조건이 참이면 수식1이 되고, 거짓이면 수식2가 된다.


이로써 선택문이 끝났다. 이제 switch문을 비롯한 선택문을 사용하여 코딩을 할 수 있다.


다음 시간에는 우리가 다루지 않았던 문자와 문자열을 배울 것이다

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함