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 может иметь разные типы вложения. В этом случае вложенный оператор (нижнего уровня) switch используется как часть case-последовательности внешнего (верхнего уровня) оператора switch.

Общая форма описания вложенной инструкции switch:

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

    ...

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

    ...

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


Связанные темы