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
        последовательность_операторов;
}

⇑


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

⇑