В этом языке данная структура может применяться ТОЛЬКО для проверки на совпадение с константным целым выражением, т.е. это может быть любая комбинация символов и целых чисел, лишь бы они были постоянными. Следует отметить, что использование целого константного выражения является существенным недостатком, присущим рассмотренному оператору. ПОЭТОМУ: не пытайтесь лепить в switch проверку переменной или вызов функции, даже если она однозначно целая или символьная.
Число, указанное для каждого конкретного случая НЕ МОЖЕТ ИЗМЕНЯТЬСЯ! Константы в вариантах case должны быть различными. После ключевого слова switch может стоять и выражение в круглых скобках, может быть там любое выражение, допустимое в языке СИ, значение которого должно быть целым. Отметим, что можно использовать явное приведение к целому типу, однако необходимо помнить о тех ограничениях и рекомендациях, о которых говорилось в предыдущих уроках.
Символы должны заключаться в одиночные кавычки. Например: 'F'.
Если есть несколько случаев, для которых должны выполняться одни и те же действия, после case перечисляются все константы, а после идут общие для этих случаев операторы, описывающие действие. Выглядит так, например:
Код: (C)
сase D:
case d:
//блок операторов
Еще некоторые детали данной структуры: список операторов может быть пустым, либо содержать один или более операторов. Причем в операторе switch не требуется заключать последовательность операторов в фигурные скобки. Однако наличие фигурных скобок - не ошибка.
В операторе switch можно использовать свои локальные переменные, объявления которых находятся перед первым ключевым словом case, однако в объявлениях не должна использоваться инициализация.
Схема выполнения оператора switch следующая:
- вычисляется выражение в круглых скобках;
- вычисленные значения последовательно сравниваются с константными выражениями, следующими за ключевыми словами case;
- если одно из константных выражений совпадает со значением выражения, то управление передается на оператор, помеченный соответствующим ключевым словом case;
- если ни одно из константных выражений не равно выражению, то управление передается на оператор, помеченный ключевым словом default, а в случае его отсутствия управление передается на следующий после switch оператор.
В теле оператора switch можно использовать вложенные операторы switch, (или другие вложенные структуры) при этом в ключевых словах case можно использовать одинаковые константные выражения.
Пример:
Код: (C)
switch (a)
{
case 1: b=c; break;
case 2:
switch (d)
{
case 0: f=s; break;
case 1: f=9; break;
case 2: f-=9; break;
}
case 3: b-=c; break;
:
Упражнения
1. Составить программу упорядочения по возрастанию значений в трех переменных.
2. Составить программу, которая выводит на экран меню:
1. Первое
2. Второе
3. Третье
и в зависимости от выбранного пункта выдает одну из надписей: «Получите суп», «Получите картошку», «Получите компот», «Оставайтесь голодным». Написать два варианта программы: с использованием условного оператора if и с использованием переключателя.
Операторgoto.
Оператор безусловного перехода goto существует в языке Си, как и во всех других языках программирования высокого уровня. Однако с точки зрения структурного подхода к программированию его использование рекомендуется ограничить. Формат оператора:
gotoметка;
Метка представляет собой идентификатор с последующим двоеточием, ставится перед помечаемым оператором.
Одна из ситуаций, в которых использование goto является оправданным — это необходимость «досрочного» выхода из вложенного цикла. Вот пример такой ситуации:
for(...)
{ while (...)
{ for(...)
{... gotoexit ...}
}
}
exit: cout<<”выход из цикла”;
При использовании оператора безусловного перехода необходимо учитывать следующие ограничения:
• нельзя входить внутрь блока извне;
• нельзя входить внутрь условного оператора (if ...else...);
• нельзя входить внутрь переключателя;
• нельзя входить внутрь цикла.
Задание
Задача №1
Турист за день прошел А км. До обеда он шел t часов и прошел 20 км. Еще t2 часа он шел после обеда. Когда скорость туриста была выше: до обеда или после обеда?