C++. Оператор вибору switch




Оператор вибору switch


Зміст


Пошук на інших ресурсах:

1. Призначення оператора вибору switch

Оператор вибору switch дозволяє вибрати один варіант ходу розв’язку задачі з декількох в залежності від значення виразу. Таким чином забезпечується багатонаправлене розгалуження.

Оператор switch може бути замінений оператором оператором if. Однак, у деяких випадках використання оператора switch може бути більш ефективним, ніж використання оператора оператора if.

2. Загальна форма опису оператора вибору switch. Ключові слова switch, case, break, default

Загальна форма запису оператора switch наступна

switch (вираз)
{
    case константа1:
        послідовність_операторів1;
    break;
    case константа2:
        послідовність_операторів2;
    break;

    ...

    case константаN:
        послідовність_операторівN;
    break;
    default
        послідовність_операторів;
}

де

  • вираз – деякий вираз цілочисельного (int) або символьного типу (char);
  • константа1, константа2, …, константаN – константні значення, з якими порівнюється значення виразу. Константні значення мають бути цілочисельного або символьного типу;
  • послідовність_операторів1, послідовність_операторів2, …, послідовність_операторівN – відповідна послідовність операторів (інструкцій), що зв’язані з відповідною умовою;
  • послідовність_операторів – послідовність операторів, яка виконується у випадку, коли не знайдено жодного співпадіння значення виразу зі значенням констант.

Оператор switch працює наступним чином. Спочатку обчислюється значення вираз. Потім це значення послідовно порівнюється з константами з заданого списку. Як тільки знайдене співпадіння для однієї з умов порівняння (гілка case), виконується послідовність інструкцій, що зв’язані з цим порівнянням. Якщо не знайдено жодного співпадіння, то виконуються оператори, що слідують після ключового слова default.

Ключове слово case використовується для того, щоб вказати значення константи, при співпадінні з якою значення виразу, буде виконуватись відповідна послідовність операторів.

Операція break перериває (закінчує) виконання коду, що визначений інструкцією switch.

Операції, що розміщені після ключового слова default, виконуються в тому випадку, якщо жодна з case-констант не співпадає з результатом обчислення switch-виразу.

Ключове слово default та відповідна послідовніть операторів можуть бути опущені. У цьому випадку, якщо не виконується жодна з гілок після слова case, виконання передається наступному оператору, що слідує за оператором switch.

3. Приклади використання оператору вибору switch

Приклад 1. Дано значення n = 1..7, що є номером дня тижня. За значенням n визначити, вихідний цей день чи робочий. Результат записати в змінну fDayOff типу bool.

Фрагмент коду, що розв’язує дану задачу.

int day;
bool fDayOff;

day = 3;

switch (day)
{
    case 1:
        fDayOff = false;
    break;
    case 2:
        fDayOff = false;
    break;
    case 3:
        fDayOff = false;
    break;
    case 4:
        fDayOff = false;
    break;
    case 5:
        fDayOff = false;
    break;
    case 6:
        fDayOff = true;
    break;
    case 7:
        fDayOff = true;
    break;
}

Інший, більш компактний варіант розв’язку даної задачі.

int day;
bool fDayOff;
day = 7;

switch (day)
{
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        fDayOff = false;
    break;
    case 6:
    case 7:
        fDayOff = true;
    break;
}

Ще один варіант розв’язку даної задачі

int day;
bool fDayOff;

day = 7;

switch (day)
{
    case 6:
    case 7:
        fDayOff = true;
    break;
    default:
        fDayOff = false;
}

Приклад 2. Дано ціле число n = 1..3, яке є номером функції. За значенням змінної n обчислити значення відповідної функції:

1) -2x2-4;    2) 5x+2;    3) 15-3x.

Фрагмент коду, що розв’язує дану задачу з допомогою скороченої форми оператора switch.

int n;
float f, x;

n = 3;
x = 3;

switch (n)
{
    case 1:
        f = -2*x*x-4;
    break;
    case 2:
        f = 5*x+2;
    break;
    case 3:
        f = 15-3*x;
    break;
}

4. Особливості використання операції break в операторі switch

В операторі switch операція break не є обов’язковою.

Якщо операція break є присутньою, то відбувається вихід з оператору switch і виконання наступного за ним оператору. Якщо операція break у case-гілці відсутня, тоді виконуються усі оператори, що зв’язані з даною case-гілкою а також усі оператори, що слідують одразу після неї до тих пір, поки не зустрінеться інша інструкція break або не буде досягнуто кінець switch-оператора.






5. Вкладені інструкції switch. Загальна форма опису

Оператор switch може бути вкладеним в інший управляючий оператор, яким може бути:

  • оператор умовного переходу if;
  • оператор вибору switch;
  • оператор циклу for;
  • оператор циклу while;
  • оператор циклу do..while;
  • оператор циклу foreach.

Кількість рівнів вкладення може бути довільною. Отже, і оператор switch може розміщуватись на довільному рівні вкладення.

Загальна форма опису вкладеної інструкції switch в іншій інструкції switch:

switch (вираз)
{
    case константа1:
        послідовність_операторів1;
    break;
    case константа2:
        послідовність_операторів2;
    break;

    ...

    case константаK;
        switch (вираз)
        {
            ...
        }
    break;

    ...

    case константаN:
        послідовність_операторівN;
    break;
    default
        послідовність_операторів;
}

 


Зв’язані теми