Меню

Программирование теория и практика

BestProg

Оператор выбора switch

Содержание

  • 1. Назначение оператора выбора switch
  • 2. Общая форма описания оператора выбора switch . Ключевые слова switch , case , break , default
  • 3. Примеры использования оператора выбора switch
  • 4. Особенности использования операции break в операторе switch
  • 5. Вложенные инструкции switch . Общая форма описания
  • Связанные темы

Поиск на других ресурсах:

1. Назначение оператора выбора switch

Оператор выбора switch позволяет выбрать один вариант хода решения задачи из нескольких в зависимости от значения выражения. Таким образом, обеспечивается многонаправленное разветвление в программе.

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

2. Общая форма описания оператора выбора switch . Ключевые слова switch , case , break , default

Общая форма записи оператора switch следующая

  • выражение – некоторое выражение целочисленного ( 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 .

Фрагмент кода, который решает данную задачу.

Другой, более компактный вариант решения данной задачи.

Еще один вариант решения данной задачи

Пример 2. Дано целое число n = 1..3, которое есть номером функции. По значению переменной n вычислить значение соответствующей функции:

Фрагмент кода, который решает данную задачу с помощью сокращенной формы оператора switch .

4. Особенности использования операции break в операторе switch

В операторе switch операция break не является обязательной.

Если операция break присутствует, то происходит выход из оператору switch и выполнение следующего за ним оператора. Если операция break в case -ветви отсутствует, тогда выполняются все операторы, которые связаны с данной case -ветвью, а также все операторы, которые следуют сразу после нее до тех пор, пока не встретится другая инструкция break или не будет достигнут конец switch -оператора.

5. Вложенные инструкции switch . Общая форма описания

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

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

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

Программирование: теория и практика

Рубрики

  • C# (147)
    • Практика (42)
      • MS Visual Studio 2010 (34)
      • MS Visual Studio 2017 (7)
      • MS Visual Studio 2019 (10)
    • Теория (105)
  • C++ (124)
    • Практика (31)
      • Borland C++ Builder 2007 (16)
      • MS Visual Studio 2010 (18)
    • Теория (94)
      • Visual C++ (90)
  • Delphi (29)
    • Практика (19)
      • Delphi-7 (3)
      • Embarcadero RAD Studio 2010 (17)
    • Теория (10)
  • Java (87)
    • Практика (5)
    • Теория (82)
  • Python (78)
    • Практика (4)
    • Теория (74)
  • Базы данных (42)
  • Компьютерная графика (3)
  • Курсовые работы (7)
  • Математическое ПО (9)
  • Паттерны (16)
Читайте также:  Аппарат для электроанальгезии Мирабель

Свежие записи

  • Python. Аргументы по умолчанию в лямбда-выражениях
  • Python. Лямбда-выражения. Анонимные функции. Ключевое слово lambda
  • C#. Встроенные атрибуты .NET
  • C# .NET. Конструкторы в классах атрибутов
  • C# .NET. Атрибуты. Роль атрибутов
  • Patterns. Паттерн Iterator. Реализация на Java

При использовании материалов сайта, ссылка на сайт обязательна.

Источник

Инструкция switch

Курсы Веб-вёрстка
Акция! -30%

Курс Фронтенд-разработчик -30%

Курсы Python-разработчик -40%

Разработчик игр на UNITY
Акция! -40%

Курс JavaScript/jQuery с нуля -30%

Курс Linux/GIT/Hosting -40%

Курс: Основы HTML и CSS

Курс: Разработка на C#

Курс: Python-разработчик с нуля

Осваивайте профессию, начните зарабатывать, а платите через год!

Курсы Python Ак­ция! Бес­плат­но!

Станьте хакером на Python за 3 дня

Веб-вёрстка. CSS, HTML и JavaScript

Курс Bootstrap 4

Станьте веб-разработчиком с нуля

Иногда вместо множества вложенных операторов if можно использовать инструкцию switch . Switch позволяет сравнить выражение с множеством значений, что позволяет избавиться от серии операторов if и сделать код более компактным.

Инструкция switch

Инструкция switch (англ. переключатель) позволяет выбрать, какой из нескольких блоков кода должен быть выполнен, исходя из возможных значений заданного выражения. Каждое из таких значений называется вариантом (case). Инструкция switch заменяет собой сразу несколько if . Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.

Синтаксис оператора switch выглядит следующим образом:

  • Выполнение инструкции начинается с вычисления выражения n. Его иногда называют тестовым.
  • Выполняется проверка на строгое равенство значения тестового выражения n и значений меток в предложениях case (первому значению value1, затем второму value2 и так далее) в порядке их следования в теле инструкции switch.
  • Если соответствие установлено – switch начинает выполняться от соответствующей директивы case и далее, до ближайшего break (или до конца switch, если break отсутствует).
  • Если совпадения не произошло, то выполняются инструкции default-ветви. Ветвь default не является обязательной, поэтому при ее отсутствии управление передается следующей за инструкцией switch, т.е. тело ее просто пропускается.

Инструкция break выполняет немедленный выход из инструкции switch. Она может располагаться в каждом варианте case, но не является обязательной. Если её нет, то выполняется следующая инструкция из блока switch.

Пример работы инструкции switch:

При отсутствии инструкции break в каком-либо варианте, управление будет передано инструкциям, относящимся к следующим вариантам. При этом остальные проверки на соответствие выражению не будут выполняться. Интерпретатор JavaScript выйдет из инструкции switch, только когда дойдет до её конца или встретит break. Очевидно, это не то, что обычно нужно для решения задачи выбора. Поэтому каждый блок case, как правило, необходимо заканчивать инструкцией Ьreak или return.

Пример без break:

На заметку: Для выхода из инструкции switch может использоваться не только break, но также и инструкции return или continue, если switch находится внутри функции или цикла соответственно.

Группировка case

Если вы хотите использовать один набор инструкций сразу к нескольким случаям case, можно воспользоваться одним из двух способов. Первый способ основывается на том, что выполнение инструкции switch продолжится до её окончания, либо пока не встретится инструкция break.

В примере ниже case 1, case 2 и case 3 выполняют один и тот же код:

Второй способ группировки case, менее стандартный – во второй строке, где вы ожидали увидеть switch(x), расположено постоянное булево значение true , а в значении case используется выражение вместо константы:

Читайте также:  Аппарат ультразвуковой терапевтический Дельта Комби

Примечание: Несмотря на то, что инструкция switch позаимствована из других языков, в JavaScгipt она имеет свои особенности. Во-первых, она работает со всеми типами данных, так что ее можно использовать с числами, строками и даже с объектами. Во-вторых, значения (case) для сравнения с выражением инструкции switch могут быть не только константами, но и переменными и даже выражениями.

  • Задача1
  • Задача2
  • Задача3
  • Задача4

Определите время года

Пользователь вводит значение переменной num. Переменная num может принимать 4 числовых значения: 1, 2, 3 или 4. Если она имеет значение 1, то в переменную result запишите ‘весна’, если имеет значение 2 – ‘лето’ и так далее. Решите задачу через switch-case.

Как известно prompt возвращает строку, например ‘3’, а не число 3. Т.к. оператор switch предполагает строгое равенство ===, так что совпадения не будет. Для преобразования строки, введенной пользователем, в число необходимо перед prompt поставить унарный +.

Источник

Конструкция «switch»

Конструкция switch заменяет собой сразу несколько if .

Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.

Синтаксис

Конструкция switch имеет один или более блок case и необязательный блок default .

Выглядит она так:

  • Переменная x проверяется на строгое равенство первому значению value1 , затем второму value2 и так далее.
  • Если соответствие установлено – switch начинает выполняться от соответствующей директивы case и далее, до ближайшего break (или до конца switch ).
  • Если ни один case не совпал – выполняется (если есть) вариант default .

Пример работы

Пример использования switch (сработавший код выделен):

Здесь оператор switch последовательно сравнит a со всеми вариантами из case .

Сначала 3 , затем – так как нет совпадения – 4 . Совпадение найдено, будет выполнен этот вариант, со строки alert( ‘В точку!’ ) и далее, до ближайшего break , который прервёт выполнение.

Если break нет, то выполнение пойдёт ниже по следующим case , при этом остальные проверки игнорируются.

Пример без break :

В примере выше последовательно выполнятся три alert :

И switch и case допускают любое выражение в качестве аргумента.

В этом примере выражение +a вычисляется в 1 , что совпадает с выражением b + 1 в case , и следовательно, код в этом блоке будет выполнен.

Группировка «case»

Несколько вариантов case , использующих один код, можно группировать.

Для примера, выполним один и тот же код для case 3 и case 5 , сгруппировав их:

Теперь оба варианта 3 и 5 выводят одно сообщение.

Возможность группировать case – это побочный эффект того, как switch/case работает без break . Здесь выполнение case 3 начинается со строки (*) и продолжается в case 5 , потому что отсутствует break .

Тип имеет значение

Нужно отметить, что проверка на равенство всегда строгая. Значения должны быть одного типа, чтобы выполнялось равенство.

Для примера, давайте рассмотрим следующий код:

  1. Для ‘0’ и ‘1’ выполнится первый alert .
  2. Для ‘2’ – второй alert .
  3. Но для 3 , результат выполнения prompt будет строка «3» , которая не соответствует строгому равенству === с числом 3 . Таким образом, мы имеем «мёртвый код» в case 3 ! Выполнится вариант default .

Задачи

Напишите «if», аналогичный «switch»

Напишите if..else , соответствующий следующему switch :

Если совсем точно следовать работе switch , то if должен выполнять строгое сравнение ‘===’ .

Впрочем, для таких строк, подойдёт и обычное сравнение ‘==’ .

Обратите внимание: конструкция browser == ‘Chrome’ || browser == ‘Firefox’ . разбита на несколько строк для лучшей читаемости.

Но всё равно запись через switch нагляднее.

Источник



Оператор switch (C)

Операторы switch и case помогают управлять сложными условными операциями и операциями ветвления. Оператор switch передает управление в оператор внутри своего тела.

Синтаксис

selection-statement :
switch ( expression ) statement

labeled-statement :
case constant-expression : statement
default : statement

Примечания

Оператор switch передает управление одному из labeled-statement в своем теле в зависимости от значения expression .

Значения expression и значение каждого constant-expression должны иметь целочисленный тип. Выражение constant-expression должно иметь однозначное константное целочисленное значение во время компиляции.

Читайте также:  Электронный термометр Microlife MT 3001

Управление передается оператору case , значение constant-expression которого соответствует значению выражения expression . Оператор switch может содержать неограниченное число экземпляров case . Однако значения ни одной из пар выражений constant-expression в одном операторе switch не должны совпадать. Выполнение тела оператора switch начинается с первого соответствующего оператора labeled-statement или после него. Выполнение продолжается до конца тела оператора или пока оператор break не передаст управление за пределы тела.

Оператор switch обычно используется следующим образом:

Оператор break можно использовать для завершения обработки определенного оператора с меткой в операторе switch . Он выполняет ветвление до конца оператора switch . Без оператора break выполнение программы продолжается до следующего оператора с меткой. Операторы будут выполняться до достижения оператора break или конца всего оператора. В некоторых случаях может требоваться именно такое поведение.

Оператор default выполняется, если ни одно из значений case constant-expression не равно значению expression . Если оператор default не указан и соответствующий вариант case не найден, ни один из операторов в теле оператора switch не выполняется. Допускается не более одного оператора default . Оператор default не обязательно должен находиться в конце. Он может располагаться в любом месте тела оператора switch . Метка case или default может располагаться только внутри оператора switch .

Выражения switch expression и case constant-expression должны быть целочисленного типа. Значение каждого case constant-expression в теле оператора должно быть уникальным.

Метки case и default тела оператора switch имеют значения только при начальной проверке, которая определяет, с какого места тела оператора начинается выполнение. Операторы switch могут быть вложенными. Любые статические переменные инициализируются до выполнения любых операторов switch .

Объявления могут располагаться в начале составного оператора, образующего тело оператора switch , но инициализации, включенные в объявления, не выполняются. Оператор switch передает управление непосредственно в выполняемый оператор в теле, минуя все строки, содержащие инициализации.

В следующих примерах кода показаны операторы switch :

В этом примере, если переменная c равна ‘A’ , выполняются все три оператора тела switch , так как оператор break перед следующим оператором case отсутствует. Управления передается первому оператору ( capital_a++; ) и продолжается по-порядку во всей остальной части тела. Если переменная c равна ‘a’ , увеличиваются значения переменных letter_a и total . Если переменная c не равна ‘A’ или ‘a’ , увеличивается только значение переменной total .

В этом примере оператор break указан после каждого оператора тела switch . Оператор break вызывает принудительный выход из тела оператора после выполнения одного оператора. Если переменная i равна –1, увеличивается только значение переменной n . Оператор break после оператора n++; передает управление за пределы тела оператора, минуя оставшиеся операторы. Аналогично, если переменная i равна 0, увеличивается только значение переменной z ; если переменная i равна 1, увеличивается только значение переменной p . Заключительный оператор break , строго говоря, не требуется, так как управление передается из тела в конце составного оператора. Он добавлен для единообразия.

Один оператор может содержать несколько меток case , как показано в следующем примере:

В этом примере, если константное выражение равно любой букве в диапазоне от ‘a’ до ‘f’ , вызывается функция convert_hex .

Специально для систем Майкрософт

Microsoft C не ограничивает количество значений case в операторе switch . Это число ограничивается только объемом доступной памяти. ANSI C требует, чтобы в операторе switch можно было использовать не менее 257 меток case .

В Microsoft C расширения Майкрософт по умолчанию (default) включены. Используйте параметр компилятора /Za для отключения этих расширений.

Источник