Применение переключателей (оператор switch)наиболее целесообразно в том случае, когда ветвления нужно выполнить на основе сравнения значения некоторого выражения (например, переменной) с фиксированным набором значений. Часто это удобно при программировании меню.
Отметим, что в теле оператора-переключателя switch можно использовать вложенные операторы switch, при этом в ключевых словах case можно использовать одинаковые метки.
Например:
switch (w)
{
case 1: b=c; break; /* если переменная w=1, то b=c */
case 2:
switch (d) {
case 0: f=s; break; /* если w=2 и d=0 */
case 1: f=9; break; /* если w=2 и d=1 */
case 2: f-=9; break; /* если w=2 и d=2 */
}
break;
case 3: b-=c; break; /* если переменная w=3, то b=b-c */
}
Чтобы использовать переключатель для ветвления по условию с проверкой попадания некоторой величины в тот или иной интервал, можно воспользоваться условным выражением, формирующим целочисленный номер соответствующего интервала.
Пример 1. Составьте программу для печати приветствия на английском языке.
1 вариант
Часы суток
Номер интервала
Приветствие
22 – 3
интервал 1
Good Night!
4 – 10
интервал2
Good Morning!
11 – 14
интервал 3
Good Day!
15 – 16
интервал 4
Good Afternoon!
17 – 21
интервал 5
Good Evening!
#include <stdio.h>
void main () {
int time;
printf("Введите время (от 0 до 24): ");
scanf("%d",&time);
switch(time < 0 ? 0:
time < 4 ? 1:
time < 11 ? 2:
time < 15 ? 3:
time < 17 ? 4:
time < 22 ? 5:
time < 24 ? 1 : 0){
case 1: printf("Good Night!"); break;
case 2: printf("Good Morning!"); break;
case 3: printf("Good Day!"); break;
case 4: printf("Good Afternoon!"); break;
case 5: printf("Good Evening!"); break;
default: printf("Error!");
}
}
В соответствии со смыслом задачи и целочисленностью переменной time (используются только часы, минуты не учитываются) каждому интервалу соответствует конечное и не слишком большое количество значений. Их можно явно использовать в виде констант, входящих в case.Таким образом, решить данную задачу можно, используя несколько меток ветви переключателя.
Пример 2: Составьте программу для печати приветствия на английском языке. 2 вариант.
#include <stdio.h>
void main () {
int time;
printf("Введите время (от 0 до 24): ");
scanf("%d",&time);
switch(time){
case 22: case 23: case 24: case 0: case 1: case 2: case 3:
printf("Good Night!"); break;
case 4: case 5: case 6: case 7: case 8: case 9: case 10: