Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные по программированию.doc
Скачиваний:
37
Добавлен:
29.02.2016
Размер:
1.78 Mб
Скачать

Лабораторная работа № 4

Тема «Программирование с использованием оператора switch»

  1. Цель работы

Получение практических навыков в работе c перечислениями и оператором принятия решения switch.

  1. Техническое обеспечение

    1. Персональная ЭВМ

    2. Клавиатура.

    3. Дисплей.

    4. Печатающее устройство.

  1. Программное обеспечение

    1. Операционная система Window

    2. Система программирования Visual C++ версия 6.0 или Borland C++ версия 3.1 и более поздние версии.

  1. Постановка задачи

В старояпонском календаре принят 60-летний цикл, состоящий из пяти 12-летних подциклов. Подциклы обозначаются названиями цвета: зеленый, красный, желтый, белый и черный. Внутри каждого подцикла годы носят названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. (1924 год – год зеленой крысы – был началом очередного цикла).

Написать программу, которая вводит номер некоторого года и печатает его название по старояпонскому календарю.

  1. Содержание отчета

    1. Постановка задачи.

    2. Блок-схема алгоритма.

    3. Текст программы.

    4. Результаты выполнения программы.

  1. Общие сведения

Оператор switch

Для выполнения многочисленных проверок в программах можно использовать конструкцию if-else-if, но она очень трудна для восприятия и в нем легко запутаться. С этой целью в языке С есть оператор принятия решений switch , выполняющий действия, основываясь на сравнении значения со списком констант символов или целых чисел. При обнаружении совпадения выполняется оператор или операторы, ассоциированные с данным значением. Оператор switch имеет следующий вид:

switch (выражение) {

case константа1 :

последовательность операторов

break;

case константа2 :

последовательность операторов

break;

. . .

case константаN :

последовательность операторов

default :

последовательность операторов

}

Оператор default выполняется, если не найдено соответствий. default не обязателен и, его нет, то в случае отсутствия совпадений ничего не происходит. Когда обнаруживается совпадение, операторы, ассоциированные с соответствующим case, выполняются до тех пор, пока не встретится оператор break . В случае default (или последнего case, если отсутствует default), оператор switch заканчивает работу при обнаружении конца.

Следует знать о трех важных моментах оператора switch:

  1. Оператор switch отличается от оператора if тем, что он может выполнять только операции проверки строгого равенства, в то время как if может вычислять логические выражения и отношения.

  2. Не может быть двух констант в одном операторе switch, имеющих одинаковое значение. Конечно, оператор switch, включающий в себя другой оператор switch, может содержать аналогичные константы.

  3. Если в операторе switch используются символьные константы, они автоматически преобразуются к целочисленным значениям.

Пример.

char sign;

int x, y, z;

switch (sign) {

case ‘‘ : z = x-y;

break;

case ‘+’ : z = x+y;

break;

case ‘*’ : z = x*y;

break;

case ‘/’ : z = x/y;

case ‘%’ : z = x%y;

break;

default : printf(“Неизвестная операция\n”);

}

С технической точки зрения операторы break являются необязательными в операторе switch. Они используются для окончания работы последовательности операторов, ассоциированных с данной константой. Если оператор break отсутствует, продолжают выполняться операторы следующего раздела case, пока не будет достигнут оператор break или конец оператора switch. О константах выбора можно думать как о метках. Выполнение начинается с метки, соответствующей искомому значению и будет продолжаться, пока не будет достигнут break или конец оператора switch. Можно использовать пустые условия. Перепишем предыдущий пример в виде:

Пример.

char sign;

int x, y, z;

switch (sign) {

case ‘%’ :

case ‘‘ : z = x-y;

case ‘+’ : z = x+y;

case ‘*’ : z = x*y;

case ‘/’ : z = x/y;

default : printf(“Неизвестная операция\n”);

}

При работе с этим фрагментом будет происходить следующее:

1) при вводе символа sign = ‘%’ , будут выполняться операторы: z = x-y; z = x+y; z = x*y; z=x/y и выводится сообщение “Неизвестная операция”;

2) при вводе символа sign = ‘+’ будут выполняться операторы: z = x+y; z = x*y; z = x/y и выводится сообщение “Неизвестная операция”;

3) при вводе символа sign =’*’ будут выполняться операторы: z = x*y; z = x/y и выводится сообщение “Неизвестная операция” и т. д.

В блоке кода оператора switch можно делать объявления переменных как сразу после ключевого слова switch, так и после слова case. Например:

switch (c) {

int t;

case 1:

. . .

}

или

switch (c) {

case 1:

int t;

. . .

}

6.3 Вложенные операторы switch

Оператор switch может иметь среди последовательности операторов другой оператор switch. Даже если константы case внутреннего и внешнего операторов имеют одинаковые значения, не возникнет никакого конфликта. Например:

switch (x) {

case 1 :

switch (y) {

case 0 : printf(“Ошибка! Деление на ноль.”);

Break;

case 1 : process(x, y);

}

break;

case 2 :

. . .