Переключательная инструкция в C: Путеводитель для начинающих

Здравствуйте, будущие программисты! Сегодня мы погрузимся в одну из самых полезных управляющих структур в программировании на языке C: переключатель (switch statement). Не волнуйтесь, если вы новички; я проведу вас через это шаг за шагом, как я делал это для countless студентов на протяжении многих лет преподавания. Так что возьмите кружку вашего любимого напитка и отправляйтесь в это кодирование приключение вместе со мной!

C - switch statement

Что такое оператор switch-case?

Представьте, что вы на冰淇淋ной станции и должны выбрать flavor. У вас есть ваниль, шоколад, клубника и мята. Каждый выбор приводит к разному шару в вашей вазочке. Именно так работает оператор switch в программировании!

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

Синтаксис оператора switch-case

Давайте посмотрим на базовую структуру оператора switch:

switch (expression) {
case constant1:
// код для выполнения, если expression равен constant1
break;
case constant2:
// код для выполнения, если expression равен constant2
break;
...
default:
// код для выполнения, если expression не соответствует ни одному из constant
}

Не волнуйтесь, если это сначала выглядит немного пугающе. Мы разберем это по частям.

Основные компоненты:

  1. switch: Этот ключевой слова инициирует оператор switch.
  2. expression: Это значение, которое оценивается.
  3. case: Each case представляет собой возможное значение выражения.
  4. break: Это ключевое слово заканчивает каждый блок case.
  5. default: Это可选 блок, который выполняется, если ни один из случаев не совпадает.

Как работает оператор switch-case

Теперь давайте посмотрим, как это работает на практике. Представьте, что мы создаем простую программу, которая выдает сообщение на основе оценки студента:

#include <stdio.h>

int main() {
char grade = 'B';

switch(grade) {
case 'A':
printf("Отлично!");
break;
case 'B':
printf("Хорошо сделано!");
break;
case 'C':
printf("Хорошая работа!");
break;
case 'D':
printf("Вы сдали.");
break;
case 'F':
printf("Удачи в следующий раз.");
break;
default:
printf("Неправильная оценка");
}

return 0;
}

В этом примере:

  1. У нас есть переменная grade, которая установлена в 'B'.
  2. Оператор switch оценивает grade.
  3. Он проверяет каждый случай до тех пор, пока не найдет совпадение ('B' в этом случае).
  4. Когда он находит совпадение, он выполняет код в этом случае ("Хорошо сделано!").
  5. Ключевое слово break затем выходит из блока switch.

Если grade не соответствовал бы ни одному из случаев, был бы выполнен блок default.

Диаграмма оператора switch-case

Чтобы visualize, как работает оператор switch, давайте посмотрим на блок-схему:

+-------------+
|   Start     |
+-------------+
|
v
+-------------------+
| Evaluate expression|
+-------------------+
|
v
+----------------------+
| Compare with case 1  |
+----------------------+
|
v
+-------------+
|    Match?   |
+-------------+
Yes |     | No
|     |
v     v
+-----------------+    +----------------------+
| Execute case 1  |    | Compare with case 2  |
+-----------------+    +----------------------+
|                     |
v                     v
+-----------+         +-------------+
|   Break   |         |    Match?   |
+-----------+         +-------------+
|               Yes |     | No
|                   |     |
|                   v     v
|         +-----------------+    +------------+
|         | Execute case 2  |    |   ...      |
|         +-----------------+    +------------+
|                   |
|                   v
|            +-----------+
|            |   Break   |
|            +-----------+
|                   |
v                   v
+-----------+        +-----------+
|    End    | <------|   Default  |
+-----------+        +-----------+

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

Правила использования оператора switch-case

Чтобы эффективно использовать операторы switch, держите в голове следующие правила:

Rule Описание
Тип выражения Выражение switch должно быть целого типа (int, char и т.д.) или перечислимого типа.
Постоянные случаи Метки case должны быть постоянными или литеральными значениями, а не переменными.
Уникальные случаи Каждый случайное значение должно быть уникальным в операторе switch.
Оператор break Используйте break, чтобы выйти из блока switch после выполнения случая.
Случай по умолчанию Случай default является optional и может出现在 anywhere в блоке switch.

Больше примеров оператора switch-case

Давайте рассмотрим несколько примеров, чтобы巩固ить наши знания.

Пример 1: Дни недели

#include <stdio.h>

int main() {
int day = 4;

switch(day) {
case 1:
printf("Понедельник");
break;
case 2:
printf("Вторник");
break;
case 3:
printf("Среда");
break;
case 4:
printf("Четверг");
break;
case 5:
printf("Пятница");
break;
case 6:
printf("Суббота");
break;
case 7:
printf("Воскресенье");
break;
default:
printf("Неправильный номер дня");
}

return 0;
}

Эта программа выведет "Четверг", так как day установлен в 4.

Пример 2: Калькулятор

#include <stdio.h>

int main() {
char operator;
double n1, n2;

printf("Введите оператор (+, -, *, /): ");
scanf("%c", &operator);
printf("Введите два операнда: ");
scanf("%lf %lf",&n1, &n2);

switch(operator)
{
case '+':
printf("%.1lf + %.1lf = %.1lf", n1, n2, n1+n2);
break;
case '-':
printf("%.1lf - %.1lf = %.1lf", n1, n2, n1-n2);
break;
case '*':
printf("%.1lf * %.1lf = %.1lf", n1, n2, n1*n2);
break;
case '/':
printf("%.1lf / %.1lf = %.1lf", n1, n2, n1/n2);
break;
default:
printf("Ошибка! Оператор неправильный");
}

return 0;
}

Эта программа создает простой калькулятор с помощью оператора switch.

Комбинация нескольких случаев в операторе switch

Иногда вы можете хотите, чтобы несколько случаев выполняли один и тот же код. Вы можете сделать это, перечислив случаи вместе:

#include <stdio.h>

int main() {
char grade = 'B';

switch(grade) {
case 'A':
case 'B':
case 'C':
printf("Вы сдали!");
break;
case 'D':
case 'F':
printf("Вам нужно улучшить.");
break;
default:
printf("Неправильная оценка");
}

return 0;
}

В этом примере, оценки A, B и C все приводят к "Вы сдали!", в то время как D и F приводят к "Вам нужно улучшить."

И вот и все! Вы только что узнали о операторе switch в C. Помните, что практика делает perfect. Попробуйте написать свои собственные операторы switch и поэкспериментируйте с разными сценариями. Before you know it, вы будете switch как профи!

Счастливого кодирования, и пусть ваши switch всегда находят свои правильные случаи!

Credits: Image by storyset