Перейти к содержимому

Для чего может применяться оператор case

  • автор:

Оператор Case в Си

Изучая операторы в Си, нужно учитывать, что их очень много. Все они имеют одну цель – управление операндами (объектами, которыми можно управлять в процессе обработки имеющегося кода). При работе с потоками и крупными приложениями нужно использовать конструкцию типа case. Чаще встречается связка «switch-case». Именно о ней зайдет речь далее. Информация будет одинаково полезна и новичкам, и опытным разработчикам.

Определение

Оператор switch case в C работает подобно if…else. Это – своеобразная конструкция выбора. Используется как механизм потока управления, определяющий дальнейшее исполнение кода, отталкиваясь от значений переменных или выражений.

Switch дает возможность организации тестирования нескольких прописанных условий. Тот или иной блок будет выполняться, если значение, полученное на «выходе» является истиной. Работает как if…else, хотя имеет более простой синтаксис. Switch Case – конструкция, которая обладает более простой системой управления. Используется в СИ-семействе достаточно часто.

Инструкция – общий вид

If else и switch c – операторы, схожие между собой по действию. Это – своеобразный цикл, который будет проверять достоверность условия, выполняя заданную операцию. Структура Switch Case в Си будет такой:

Switch (желаемое выражение)

case 1 контекст: операторы

case 2 контекст: операторы

case 3 контекст: операторы

Структура состоит из двух элементов:

  • заголовка switch;
  • тела инструкции, которое записано в составном операторе (после фигурных скобок, внутри).

В зависимости от значения соответствующего выражения будет меняться выполняемая ветка кода. Выражение должно содержать только целочисленные параметры (число) или символьные данные. Это – единственное ограничение, накладываемое на оператор switch case c.

Принцип работы

Рассматриваемое выражение базируется на простой логике оценки каждого блока case. Начинается процесс с вычисления выражения, прописанного внутри блока переключателя. Далее сравнивается значение из имеющегося блока с каждым case.

При обнаружении совпадений происходит реализация кода, написанного в «кейсе». Происходит это до тех пор, пока система не встретит ключевое слово. Это – оператор break.

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

Чтобы использование «множественного выбора» (рассматриваемой конструкции) функционировало нормально, внутри каждого case прописывают break. Это поможет избежать выполнения всех инструкций после соответствующего «истинного» блока.

Примеры заголовков и ветки case

Далее – примеры записи switch case default c, которые являются правильными и неправильными. Эта информация поможет избежать ошибок, when новичок осваивает соответствующий функционал языка:

switch (c) – правильно;

switch (g) – неправильно, речь идет о вещественной переменной;

switch (s) – неправильно, символьная переменная;

switch ((a+c)+2) – правильно, выражение целочисленного характера.

В фигурных скобках можно записывать несколько блоков. Там может быть далеко не одна функция (или две), а значительно больше. Каждая такая команда – это определенный выбор. Из-за этого соответствующая запись носит название «множественного».

При составлении case существует одно ограничение – константы ветки должны отличаться. When в коде встречаются сходства, он выдает ошибку. Поэтому перед запуском программы проводят проверку значений case.

Вложенность

In Switch выражении структура предусматривает вложенность. Это – переключение внутри конструкции. Функция работает, если switch-запись будет привязываться к значениям of внешнего переключателя.

Вот – example of множественного выбора, где можно использовать вложенность:

Оператор Case в Си

  1. Реализовываются конструкторы. Интересующий «множественный» цикл нужно использовать два раза.
  2. Предложенный синтаксис первой записью в functions проводит проверку равенства dept 1.
  3. Если выражение имеет «истину», следуют переходы ко второму блоку. Там происходит проверка of действительности кода доступа.
  4. When dept имеет значение false, код будет пользоваться function default (условием по умолчанию).

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

Пример с отделами доступа

Ниже – examples использования рассмотренного ранее примера с правильным и неправильным кодом отдела доступа:

Оператор Case в Си

Первый цикл – в нем верен и отдел, и код доступа. Выполнение приложение никогда не достигнет cases по умолчанию. Всегда будет обрабатываться команда. Применение ключа Break здесь помогает остановить приложение при необходимости.

Второй пример – ситуация, при которых и код доступа, и отдел неверные. Цикл switch case break c перейдет к первому блоку по умолчанию.

Рекомендации – как лучше использовать

Для того, чтобы не запутаться в записи оператора, рекомендуется:

  1. Разобраться in syntax конструкции switch c. Он прост.
  2. Присваивать «кейсам» уникальные значения. Иначе цикл не будет обработан in codes.
  3. Каждый блок заканчивать ключевым словом break. Этот прием позволит избежать образования петель.
  4. Использовать int и иные целочисленные параметры (включая zero) в процессе. Также допускаются символы. Остальные типы данных не поддерживаются.

Для сокращения объема кода подходит оператор switch в Си с вложениями. Поддерживается многоуровневая вложенность. Образцом послужит пример выше.

А еще программист должен подумать, что делать, если ни одно условие цикла не истинно. В данном случае рекомендуется предусмотреть оператор по умолчанию.

Быстрое изучение

Switch Case d c – запись, которая известна не всем новичкам. Чтобы лучше разобраться в ней, можно посмотреть туториалы. Пример – тут .

Быстро разобраться в switch case int и иных операторах помогут специализированные компьютерные курсы. Организовываются дистанционно. Подойдут новичкам и опытным программистам. В конце программы выдается электронный сертификат.

Интересует разработка на C? Обратите внимание на курс «Программист C» в Otus.

Условная агрегация CASE — Продвинутые SQL-запросы

Условная агрегация – выполнение агрегирующей функции при определенных условиях (на определенных данных).

Оператор CASE

Оператор CASE служит для обработки и выполнения определенных условий

CASE [ expression] WHEN condition_1 THEN result_1 WHEN condition_2 THEN result_2 . WHEN condition_n THEN result_n ELSE result END

Принцип работы оператора CASE заключается в условном выполнении операций на основе заданных условий. Он позволяет проверять значение выражения и выполнять различные действия в зависимости от соответствия условиям.

Основные операторы, используемые в операторе CASE , включают:

  • WHEN : определяет условие, которое должно быть выполнено.
  • THEN : указывает действие, которое будет выполнено, если условие в операторе WHEN истинно.
  • ELSE : опциональный оператор, который указывает действие, которое будет выполнено, если ни одно из условий в операторах WHEN не истинно.
  • END : обозначает конец оператора CASE .

Особенности использования CASE

  • Условия WHEN – THEN выполняются в порядке приоритета написания. После первого совпадения остальные ветки уже не выполняются.
  • Если условие не примет TRUE , то оператор CASE вернет значение предложения ELSE .
  • Если предложение ELSE опущено и условие не примет TRUE , то оператор CASE вернет NULL .
  • Оператор CASE может иметь до 255 сравнений. Каждое предложение WHEN …​ THEN рассматривает 2 сравнения.

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Рекомендуемые программы
• от 5 025 ₽ в месяц
Сбор, анализ и интерпретация данных
Старт 11 января

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Для перемещения по курсу нужно зарегистрироваться
1. Введение ↳ теория
2. Вспомним JOIN ↳ теория / тесты / упражнение
3. Подзапрос ↳ теория / тесты / упражнение
4. Объединение подзапросов ↳ теория / тесты / упражнение
5. Common Table Expression и Конструкция WITH ↳ теория / тесты / упражнение
6. Условная агрегация CASE ↳ теория / тесты / упражнение

Поможем, если трудно

Порой обучение продвигается с трудом. Сложная теория, непонятные задания… Хочется бросить. Не сдавайтесь, все сложности можно преодолеть. Рассказываем, как

Не понятна формулировка, нашли опечатку?

Выделите текст, нажмите ctrl + enter и опишите проблему, затем отправьте нам. В течение нескольких дней мы улучшим формулировку или исправим опечатку

Что-то не получается в уроке?

Загляните в раздел «Обсуждение»:

  1. Изучите вопросы, которые задавали по уроку другие студенты — возможно, ответ на ваш уже есть
  2. Если вопросы остались, задайте свой. Расскажите, что непонятно или сложно, дайте ссылку на ваше решение. Обратите внимание — команда поддержки не отвечает на вопросы по коду, но поможет разобраться с заданием или выводом тестов
  3. Мы отвечаем на сообщения в течение 2-3 дней. К «Обсуждениям» могут подключаться и другие студенты. Возможно, получится решить вопрос быстрее!

Подробнее о том, как задавать вопросы по уроку

Оператор CASE стр. 1

Пусть требуется вывести список всех моделей ПК с указанием их цены. При этом если модель отсутствует в продаже (ее нет в таблице РС), то вместо цены вывести текст «Нет в наличии».

Список всех моделей ПК с ценами можно получить с помощью запроса:

Консоль

Выполнить

В результирующем наборе отсутствующая цена будет заменена NULL -значением:

Чтобы заменить NULL -значения нужным текстом, можно воспользоваться оператором CASE :

Консоль

Выполнить

Оператор CASE в зависимости от указанных условий возвращает одно из множества возможных значений. В нашем примере условием является проверка на NULL . Если это условие выполняется, то возвращается текст «Нет в наличии», в противном случае (ELSE) возвращается значение цены.

Здесь есть один принципиальный момент. Поскольку результатом оператора SELECT всегда является таблица, то все значения любого столбца должны иметь один и тот же тип данных (с учетом неявного приведения типов). Поэтому мы не можем наряду с ценой (числовой тип) выводить символьную константу. Вот почему к полю price применяется преобразование типов, чтобы привести его значения к символьному представлению. В результате получим:

Условный оператор

Проверьте истинность второго отношения при подстановке следующих значений:

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

Примечание. Название “булевы” произошло от имени математика Джорджа Буля, разработавшего в XIX веке булеву логику и алгебру логики.

Определение. Переменная, которая может принимать одно из двух значений: True (правда) или False (ложь), называется булевой (логической) переменной. Например,

К:=True;
Flag:=False;
Second:=a+sqr(x)>t

Задача. Вычислить значение модуля и квадратного корня из выражения (х-у).

Для решения этой задачи нужны уже знакомые нам стандартные функции нахождения квадратного корня — Sqr и модуля — Abs. Поэтому Вы уже можете записать следующие операторы присваивания:

Koren:=Sqrt(x-y);
Modul:=Abs(x-y)

В этом случае программа будет иметь вид:

Program Znachenia;
Uses
Crt;
Var
x, y : integer;
Koren, Modul : real;
Begin
ClrScr;
write (‘Введите значения переменных х и у через пробел ‘);
readln (x, y);
Koren:=Sqrt(x-y);
Modul:=Abs(x-y);
write (‘Значение квадратного корня из выражения (х-у) равно ‘, Koren);
write (‘Значение модуля выражения (х-у) равно ‘, Modul);
readln;
End.

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

Поэтому наша программа имеет свою допустимую область исходных данных. Найдем эту область. Для этого запишем неравенство х-у>=0, то есть х>=у. Значит, если пользователем нашей программы будут введены такие числа, что при подстановке значение этого неравенства будет равно True, то квадратный корень из выражения (х-у) извлечь можно. А если значение неравенства будет равно False, то выполнение программы закончится аварийно.

Задание. Наберите текст программы. Протестируйте программу со следующими значениями переменных и сделайте вывод.

  1. х=23, у=5;
  2. х=-5, у=15;
  3. х=8, у=8.

Каждая программа, насколько это возможно, должна осуществлять контроль за допустимостью величин, участвующих в вычислениях. Здесь мы сталкиваемся с разветвлением нашего алгоритма в зависимости от условия. Для реализации таких условных переходов в языке Паскаль используют операторы If и Case, а также оператор безусловного перехода Goto.

Рассмотрим оператор If.

Для нашей задачи нужно выполнить следующий алгоритм:

если х>=у,
то вычислить значение квадратного корня,
иначе выдать на экран сообщение об ошибочном введении данных.

Запишем его с помощью оператора If. Это будет выглядеть так.

if x>=y
then
Koren:=Sqr(x-y)
else
write (‘Введены недопустимые значения переменных’);

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

В общем случае полная форма конструкции условного оператора имеет вид:

Условный оператор работает по следующему алгоритму.

Сначала вычисляется значение логического выражения, расположенного за служебным словом IF. Если его результат истина, выполняется , расположенный после слова THEN, а действия после ELSE пропускаются; если результат ложь, то, наоборот, действия после слова THEN пропускаются, а после ELSE выполняется .

Управляющая структура if может показаться негибкой, так как выполняемые действия могут быть описаны только одним оператором. Иногда может потребоваться выполнение последовательности операторов. В этом случае хотелось бы заключить всю последовательность в воображаемые скобки. В Паскале предусмотрен этот случай.

Если в качестве оператора должна выполниться серия операторов, то они заключаются в операторные скобки begin-end. Конструкция Begin . End называется составным оператором.

if
then
begin
оператор 1;
оператор 2;
.
end
else
begin
оператор 1;
оператор 2;
.
end;

Определение. Составной оператор — объединение нескольких операторов в одну группу. Группа операторов внутри составного оператора заключается в операторные скобки (begin-end).

begin
оператор 1;
оператор 2;
end;

С учетом полученных знаний преобразуем нашу программу.

Program Znachenia;
Uses
Crt;
Var
x, y : integer;
Koren, Modul : real;
Begin
ClrScr;
write (‘Введите значения переменных х и у через пробел ‘);
read (x, y);
if x>=y
then
begin
Koren:=Sqr(x-y);
Modul:=Abs(x-y);
write (‘Значение квадратного корня из выражения (х-у) равно ‘, Koren);
write (‘Значение модуля выражения (х-у) равно ‘, Modul);
end
else
write (‘Введены недопустимые значения переменных’);
readln;
End.

Составным оператором является и такой оператор

begin
S:=0;
end.

Cимвол “;” в данном случае разделяет оператор присваивания S:=0 и пустой оператор.

Пустой оператор не влечет никаких действий и в записи программы никак не обозначается.

Например, составной оператор

включает лишь один пустой оператор.

Если Вы обратили внимание, программа на языке Паскаль всегда содержит один составной оператор — раздел операторов программы.

Внимание! Перед служебным словом Else разделитель (точка с запятой) не ставится.

Отметим, что большинство операторов в программах на языке Паскаль заканчиваются точкой с запятой, но после некоторых операторов точка с запятой не ставится. Сформулируем общие правила употребления точки с запятой:

    Каждое описание переменной и определение константы заканчиваются точкой с запятой.

Рассмотрим еще один пример.

Задача. Вывести на экран большее из двух данных чисел.

Program Example1;
Var
x, y : integer;
Begin
writeln(‘Введите 2 числа ‘);
readln(x,y);
if x>y
then
writeln (x)
else
writeln (y);
readln;
End.

Можно также использовать и сокращенную (неполную) форму записи условного оператора. Эта форма используется тогда, когда в случае невыполнения условия ничего делать не надо.

Неполная форма условного оператора имеет следующий вид.

Тогда если выражение, расположенное за служебным словом IF. в результате дает истину, выполняются действия после слова THEN, в противном случае эти действия пропускаются.

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

Program Chisla;
Var
x : integer;
Begin
writeln(‘Введите число ‘);
readln(x);
if x then
x:=-x;
writeln (x);
readln;
End.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *