Оператор передачи управления (оператор-переключатель) switch
Этот оператор обеспечивает выбор возможного направления хода вычислений. Он используется тогда, когда в программе необходимо произвести выбор одного из нескольких вариантов.
Общая синтаксическая форма записи:
switch (выражение)
{
case константа_1: оператор(ы) ;
case константа_2: оператор(ы) ;
…
default: операторы (ы) ;
{
Правило выполнения: Сначала вычисляется значение выражения. Это значение сравнивается с константами во всех вариантах case. Управление передается оператору или группе операторов, константа которого совпадает со значением выражения. Если ни одна из констант не совпала со значением выражения, то выполняются операторы, связанные с меткой default. Если же конструкция default отсутствует, то ни один оператор не будет выполнен, а управление передастся следующему оператору программы.
Примечание: default – не обязательно последний; default – не обязательная конструкция.
Если будет выполнятся какой-либо оператор, то будут выполнятся операторы всех последующих вариантов (case и default) до тех пор, пока не встретится оператор break.
Область действия меток case – тело оператора switch. Никакие две константы не могут иметь одинакового значения.
Константы могут иметь только типы int, char, enum. Объект сравнения с меткой может быть константой, переменной, указателем функции, выражением упомянутых типов.
Меток может быть несколько, например:
case ‘1’: case ‘3’: case ‘5’: оператор;
case ‘2’: case ‘4’: case ‘6’: оператор;
Пример 3.7: Использования оператора switch.
# include <math.h> // Подключение математической библиотеки
# include <stdio.h>
void main (void)
{
float x;
puts(“Введите значение x: “);
scanf (“%f”, &x);
puts (“Введите первую букву имени функции: \n”
“S- Sin \n”
“C-Cos \n”
“A-Atan ”);
flushall () ;
switch (getchar( ) )
{
case ‘S’ : case’s’ :
printf (“Синус X= %f \n”, sin(x) ) ; break;
case ‘C’: case ‘c‘:
printf (“Косинус X= %f \n”, cos(x) ); break;
case ‘A’: case’a’:
printf(“Арктангенс X= %f \n”, atan(x)); break;
default;
puts (“Ошибка \a\n”);
}
}
Замечание: Одна из распространенных ошибок состоит в том, что часто забывают разделять альтернативные операторы в теле переключателя операторами break.
3.6. Оператор разрыва break
Оператор разрыва break прерывает выполнение операторов for, while, do…while и switch. Он может присутствовать только в теле этих операторов. Появление этого оператора в другом месте программы рассматривается как ошибка.
Синтаксис:
break;
Действие:
Если оператор разрыва находится внутри вложенных операторов, то прерывается только непосредственно охватывающий его оператор. Если же требуется прерывание более чем одного уровня вложенности, то следует использовать операторы возврата return и перехода go to.
Замечание: С помощью оператора go to нельзя передать управление на конструкции case и default в теле переключателя.
Пример 3.8. Использование оператора break.
# include <stdio.h>
// Применение ключа switch c использованием оператора break.
main( )
{
char ch;
printf(“Введите заглавную букву русского алфавита”);
ch = getchar();
if (ch >= ’А’ && ch <= ’Я’)
switch(ch)
{
case ‘A’:
printf(“Алексеев \n”);
case ‘Б’:
printf(“Булгаков \n”);
case ‘В’:
printf(“ Волошин \n”);
break;
case ‘Г’:
printf(“Гоголь \n”);
break;
default;
printf(“Достоевский, Зощенко и др. \n);
break;
}
else
printf(“Надо было ввести заглавную букву \n”);
}
3.7. Операция условия ?:
Операция условие – единственная операция языка Си, имеющая три операнда.
Синтаксическая форма:
Выражение_1? выражение_2: выражение_3;
Правило выполнения:
Если выражение_1 истинно (т.е. ! = 0), то результатом операции является значение выражения_2, в противном случае – значение выражения_3.
Примеры использования:
1. Нахождения max из двух чисел:
max = (a>b)? a: b;
2. Нахождение абсолютной величины числа x:
abs = (x >0)? x: -x;
Дата добавления: 2017-06-02; просмотров: 323;