Тема: Условные операторы в языке С. Преобразование типов.
Цель работы: Ознакомиться с логической конструкцией языка: switch.
Теоретическая часть
Хотя любые комбинации условий можно выразить с помощью оператора if, довольно часто запись становится неудобной и запутанной. Оператор выбора switch используется, когда для каждого из нескольких возможных значений выражения нужно выполнить определенные действия. Например, предположим, что в переменной code хранится целое число от 0 до 2, и нам нужно выполнить различные действия в зависимости от ее значения:
switch (code) {case 0: printf("код ноль"); x = x + 1; break;case 1 : printf("код один"); y = y + 1; break;case 2: printf("код два"); z = z + 1; break;default: printf("Необрабатываемое значение");}
В зависимости от значения code управление передается на одну из меток case. Выполнение оператора заканчивается по достижении либо оператора break, либо конца оператора switch. Таким образом, если code равно 1, выводится " код один ", а затем переменная y увеличивается на единицу. Если бы после этого не стоял оператор break, то управление "провалилось" бы дальше, была бы выведена фраза " код два ", и переменная z тоже увеличилась бы на единицу.
Если значение переключателя не совпадает ни с одним из значений меток case, то выполняются операторы, записанные после метки default. Метка default может быть опущена, что эквивалентно записи:
default: ; // пустой оператор, не выполняющий // никаких действий
Очевидно, что приведенный пример можно переписать с помощью оператора if:
if (code == 0) { printf("код ноль"); x = x + 1;} else if (code == 1) { printf("код один"); y = y + 1;} else if (code == 2) { printf("код два"); z = z + 1;} else { printf("Необрабатываемое значение");}
Пожалуй, запись с помощью оператора переключения switch более наглядна. Особенно часто переключатель используется, когда значение выражения имеет тип набора.
Общая форма записи оператора switch:
switch (expression) {
case value1:
program statement;
...
break;
case value2:
program statement;
...
break;
...
case valuen:
program statement;
...
break;
default:
program statement;
...
break;
},
где
expression - целое выражение (или выражение, которое может быть преобразовано в целое выражение);
value1, value2,..., valuen - целое выражение с постоянным значением (или выражение, которое может быть преобразовано к такому выражению);
program statement – обозначает операторы, число которых может быть больше или равно нулю.
Метки value1, value2,..., valuen, обозначающие альтернативы case, должны быть уникальными; двух одинаковых меток быть не может. Только одна альтернатива может получить префикс default.
Выражение заключенного в круглые скобки оператора последовательно сравнивается со значениями value1, value2,..., valuen, которые должны быть простыми константами или константными выражениями. В том случае, когда одно из этих значений равно значению, выполняются утверждения, которые следуют за данным значением.
Утверждение break сигнализирует об окончании выполнения утверждений и приводит к выходу из оператора switch. Утверждение break ставится в конце каждого варианта выбора. Если этого не сделать, то выполнение последовательности утверждений перейдет в следующий вариант выбора и будет выполняться до тех пор, пока не встретится утверждение break.
Специальный дополнительный вариант default будет выполнен в том случае, когда не будет найдено ни одного совпадения.
Операторы if и switch той или иной синтаксической конструкции существуют практически во всех языках программирования (в первую очередь языках высокого уровня), и их часто называют операторами ветвления.
Пример:
/* Реализация работы калькулятора. Сначала задается число - сколько раз нужно подсчитать. Вводятся левый операнд, операция, правый операнд. Оператор выбора определяет, какой оператор должен работать. Результат выводится на экран. */#include <stdio.h>#include <conio.h>#include <process.h>main(){ float a,b; char opr; float result=0; int i=0; clrscr(); printf("Введите операнд, операцию, операнд:\n"); scanf("%f%c%f",&a,&opr,&b); switch(opr) { case '+': result=a+b; break; case '-': result=a-b; break; case '*': result=a*b; break; case '/': result=a/b; break; default: printf("Ошибка. Неверен знак операции "); exit(1); /* функция берется из заголовочного файла process.h*/ } textcolor (15); /* функция берется из заголовочного файла conio.h*/ cprintf("Результат равен %g\n",result); textcolor(12); /* функция берется из заголовочного файла conio.h */ cprintf("Конец работы\n"); /* текст печатается красным цветом*/ getchar () ; exit(0); /* функция берется из заголовочного файла process.h */