ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [컴프실] 3일차
    공부/cpp 2023. 2. 18. 18:57

    switch 문

    switch(number){

    case 0:

                    문장;

                    break;

    case 1:

                   문장;

                   break;

    case 2:

                   문장;

                   break;

    default:

                   문장;

                   break;

     

    일반 생활에서 스위치를 생각해보자.

    어떤 스위치를 누르면, 거실의 전등이 켜지고, 또 다른 스위치를 누르면 부엌의 전등이 커진다.

    어떤 스위치를 누를 때, 거실과 부엌의 전등이 동시에 켜지진 않는다. 물론 그렇게 배선을 커스터마이징 하면 되겠지만,

    일반적으로는 각 스위치 당 하나의 전등이 배선이 되어있다.

     

    cpp의 스위치도 마찬가지다.

    A라는 경우도 만났다. 그럼 1 번이라는 행동을 한다.

    B라는 경우도 만났다. 그러면 2번이라는 행동을 한다.

    A도 B가 아닌 경우면 3번이라는 행동을 한다.

    이렇게 각각 경우(case)에 따라서 해야할 일을 분배해준 것을 스위치 문이라고 한다.

     

    number을 정수라고 하자.

    number에는 사용자가 입력한 값이 들어간다.

    case 옆에 숫자가 있는데, 그 숫자는 number에 들어가는 숫자의 집합 중에 하나이다.

    default는 case에 없는 숫자가 발생하는 모든 경우에 실행된다.

     

    switch문에 들어오는 자료형은

    정수혹은 char형이 들어올 수 있다. char형은 내부적으로 숫자 취급을 할 수 있기 때문이다. (예 ASCII코드)

     

    case 에 여러 문장을 집어넣어도 상관없다.

     

    swich 문에는 break문이 꼭 필요한데, case 0 문장을 수행한 다음에, case 1 문장으로 또 넘어가지 않고, 바로 switch 문에서 빠져나도록 하는 것이 break문이다.

     

    switch 문도 업계에서 많이 쓰인다.

    if문은 조건문에서 오타 등 실수가 발생하는 것을 switch문은 방지 할 수 있다.

     

    예를들어

    if(num==0)

    else if(num1 ==0)

    이런경우

     

    또, 인덴테이션 잘못해서

    if()

    else

    if()

    이런 경우가 있다.

     

    else와 if 사이에 엔터를 잘못 눌러서 일어나는 현상이다.

     

     

    while문

    while(조건식){

    문장

    }

    조건식이 만족하는 동안 문장을 계속해서 수행한다.

    만족 하지 못하면 while문을 빠져나온다.

     

    while(1) = while(true)

    이면 break문을 만날 때까지 무한반복한다.

     

    무한 루프를 사용할 때는

    조건식에다가 무한 루프 종류 문구를 넣어도 된다.

     

    예)

    while(str != "종료")

    종료 이외의 단어를 입력하면 참이 되어 무한루프를 돌고

    종료를 입력하면 무한 루프에서 빠져나온다. 

    굳이 break문 사용 안해도 된다.

    do while문

    do{

    문장

    } while(조건식);

    조건식이 맨 처음에는 만족하지 못할 수도 있다. 보통의 while문은 그냥 아무문장도 수행하지 않고, 지나가지만

    do while문은 조건식을 만족하든 안하든 적어도 한번은 문장이 수행을 된다.

    반드시 문장이 실행이 되어야한다. 그러면, do-while문을 쓰는 것이 좋다.

     

    카운트 다운 예제

    int n = 10;

    while(n>0) {

                cout << n << " ";

                n--; // n = n-1;

                }

                cout << "발사!\n";

    --n과 n-- 차이점

    둘다 하나씩 감소시킨다는 기능을 하는 연산자이지만, 미묘하게 차이가 있다.

    문장을 수행하다보면, 결과를 다르게 낼 때가 있다.

    이 연산자의 위치가 어디이냐에 따라서 결과를 다르게 낸다.

     

    n--는 n을 수행을 하고 하나를 감소시킨다.

    --n은 먼저 감소시킨다.

    for문

    for(초기식(초기화); 조건식; 증감식;){

    문장

    }

    조건식은 조건 체크하는 문장

    증감식은 연산자가 들어와도 되지만, 함수가 들어와도 된다.

    예를 들어서 1+2+3+...+10 간다고 하면

    i = 1로 초기화를 해줘야한다.

    여기서 i가 하나씩 증가해야하므로

    증감식에서 i++

    언제까지 증가하냐 i <11을 조건식에 써준다.

     

    더하는 식은 문장에 써준다.

     

    초기식은 한번만 거치고, 조건식-증감식-문장-조건식-증감식-문장 .... 을 조건식이 만족하지 않을 때까지 계속 반복한다.

     

    주의할 점

    for문 안에 변수를 선언하면, for문 밖에 있는 변수가 인식하지 못한다.

    예를 들어

    1~10까지 더하는 for문이면

    for(int = 1; i<=10; i++){

    int sum;

    sum += i;

    }

    cout << sum;

    하면 cout << sum에서 for문 안에 sum을 인식하지 못하고 에러가 난다.

    따라서

    int sum;

    for(int = 1; i<=10; i++){

    sum += i;

    }

     

    getline 함수

    getline(cin, 변수명)

    cin 키보드에서 입력을 받겠다는 명령어

    입력받은 것을 변수에 저장

     

    continue

    int i = 0;

    do {

            i++;

            cout << "continue 문장 전에 있는 문장" << endl;

            continue;

            cout << "continue 문장 후에 있는 문장" << endl;

    } while (i < 3);

    return 0;

     

    continue 문장 전에 있는 문장

    continue 문장 전에 있는 문장

    continue 문장 전에 있는 문장

     

    종료

     

    continue 뒤에 있는 문장은 모조리 스킵해버리고, 바로 조건식으로 넘어간다.

     

    ctrl + z가

    cpp은

    end of file

    완전히 종료를 시켜주는 명령어인데...

    뭔가 좀 문제가 있다.

     

    ctrl + z, enter ctrl + z enter해야지 종료가 되더라

     

    배열

    배열을 쓰는 이유는 정수 100개를 저장을 하고 싶을 때, 정수 자료형의 변수 100개를 선언하는 것은 굉장히 비효율적이다.

    그래서 한꺼번에 저장할 수 있지 않을까? 정수 100개 각각에 id를 부여해서 쉽게 접근할 수 있지 않을까라는 아이디어에서 시작되어서 나온 것이 배열구조이다.

     

    예를 들어 100명의 학생이 수학여행을 가는데, 한 사람 앞에 하나의 방을 배정(assign)한다고 생각을 해보자

    A라는 주택의 방의 1번에 또순이 들어가, B라는 주택의 방 2번에 삼식이 들어가 하면 굉장히 비효율적이다.

    그래서 아예 호텔 하나를 잡는다.

    L이라고 하는 호텔에 100명이 들어갈 수 있는 room이 있다.

    1번방에 또순이, 2번 방에 삼식이, 3번 방에 삼순이 이런 식으로 하면 훨씬 접근하기 편하다.

    그래서 이런 구조를 그대로 따온 것이 배열이다.

     

    배열은

    이 호텔 명에 해당하는 것이 배열 명이 되고, 

    호텔 안에는 학생들이 들어가는데, 어느어느 고등학교의 학생들이라는 동질의 사람들이 들어간다.

    배열에도 동일한 자료형(data type)이 들어가야 한다. 어떤데는 정수형, 어떤데는 실수형이 들어가서는 안된다.

     

    정수 10개를 저장을 하겠다 가정을 해보자

    정수니까 int type이다.

    int array[10] = {1,2,3,4,5,6,7,8,9,10};

    자료형 배열명[size]

    이게 배열을 선언과 동시에 초기화하는 방법이다. 

     

    조심해야하는 것은 배열은 0부터 시작한다.

    1호실 부터 시작하는 것이 아니라, 1부터 시작한다.

    이렇게 방의 호실을 인덱스라고 표현한다.

     

    10개가 되는 사이즈에 맨 마지막 방에 9를 집어넣으면, 

    그럼 10번방이 아니라, 9번방에 들어가는 것이다.

    왜냐하면 시작이 0부터 시작이 되었기 때문에

    0,1,2,3,4,5,6,7,8,9

    로 10번째 방은 9이다.

     

    이를 조심해야한다.

     

    1차원 배열은

    선이고,

    2차원 배열은

    면이고,

    3차원 배열은

    입체이다.

     

    물론 논리적인 저장구조가 면이나, 입체로 저장되는 것은 아니다.

    그래서 15차원 배열도 있다는데, 그건 어떻게 상상하기가 힘들다.

     

    배열의 초기화

    int sales[5] = {100, 200, 300, 400, 500}; 이상적인 경우

    int sales[5] = {100, 200, 300}; 2개의 방이 빈다. 이럴 경우에는 자동적으로 0이 채워진다. 쓰레기값 아님...

    int sales[] = {100, 200, 300, 400, 500, 600, 700}; 이렇게 사이즈를 공란으로 채워놓으면 cpp에서 자동으로 인덱스 개수에 맞게 채워 넣는다. 이 경우 7을 채워넣는다.

     

    보편적 초기화

    int scores[] {10,20,30};

    걍 =을 안써주고, 값을 {}로 감싸주면 된다.

     

    범위- 기반 for 문

    int list[] = {1,2,3,4,5,6,7,8,9,10};

    for (int i: list){

        cout << i << " ";

    }

    cout << endl;

     

    이렇게 하면, i에 자동으로 인덱스 0부터 끝까지 자동적으로 들어간다.

     

    굉장히 편리할 듯.

     

     

    주의 할점

    int n = 0;을 선언한 후

     

    for(int n; n < 10; n++)

    을 하면

     

    for문에 에러가 날 수 있다. 왠지는 모르겄다...

    '공부 > cpp' 카테고리의 다른 글

    [컴프실] 5일차 -클래스  (0) 2023.02.23
    [컴프실] 5일차  (0) 2023.02.22
    [컴프실] 4일차  (1) 2023.02.21
    [컴프실] 2일차  (0) 2023.02.01
    [컴프실] 1일차  (1) 2023.01.09
Designed by Tistory.