Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual_C_console.pdf
Скачиваний:
34
Добавлен:
16.05.2015
Размер:
954.14 Кб
Скачать

44

Для иллюстрации использования операторов управления if ниже приведен фрагмент программы, определяющий функцию y = f(x), заданную следующими условиями:

y = 2 * x, если x <= 20 y = 30, если x > 20

Фрагмент программы может иметь вид

int x,y;

. . .

y = 2 * x;

if (x > 20) y = 30;

В этом фрагменте программы сначала переменной y присваивается значение 2 * x, которое действительно при x <= 20, если же х окажется больше 20, то значение y будет заменено.

Этот же фрагмент программы можно записать и в таком виде:

int x, y;

. . .

If (x > 20) y = 30; else y = 2 * x;

Оператор выбора варианта

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

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

case <константа_1>: <группа операторов 1>; case <константа_2>: <группа операторов 2>;

...

default: <группа операторов n +1>;

}

45

Оператор switch обеспечивает выбор оператора (или группы операторов), записанного в группе case, значение <константы_n> которой совпадает со значением <выражения>, т.е., если <выражение> состоит из имени переменной, то при выполнении этого оператора будет выбрана та группа операторов, <константа_n> которой после слова case совпадает со значением переменной.

В качестве <константы_n> можно использовать арифметическое выражение, но такое, которое может быть вычислено на фазе компиляции, т.е. в него не могут входить переменные.

Записанное после ключевого слова switch <выражение>, задающее выбор выполняемого оператора, должно содержать имя переменной (обычно <выражение> состоит только из имени переменной).

Если значением <константы_n> является символ (например, буква в кодах ASCII), то его значение записывается в апострофах, если константа является целым числом, то записывается без апострофов.

Если группу операторов в лексеме case замыкает оператор break,то после выполнения операторов этой группы выполняется выход за пределы оператора switch. Если оператор break не записан, то выполняются операторы следующей группы case. Когда оператор switch размещен внутри цикла, то вместо него можно использовать оператор continue;

После лексемы "case <константа_n>:" может быть записан пустой оператор (;), либо вообще ничего не записано, тогда несколько лексем "case <константа_n>:" могут быть записаны перед одним общим выполняемым оператором (или группой операторов). В этом случае выполнение оператора осуществляется при совпадении значения выражения с любой из констант в предшествующих лексемах "case <константа_n>:", т.е. такая ситуация позволяет для нескольких лексем "case <константа_n>:" задать одинаковые действия, т.е. реализовать для этих вариантов логическую операцию ИЛИ.

Примеры записи оператора switch приведены в примерах далее.

46

Перечисляемый тип данных

В программах можно использовать перечисляемый тип данных. Этот тип данных позволяет поставить в соответствие целым числам (не обязательно последовательным) обозначения, записанные буквами латинского алфавита для представления числовых констант в виде осмысленных текстов. В соответствие с международными стандартами обозначения констант рекомендуется записывать заглавными буквами латинского алфавита. Перечисляемый тип данных позволяет заменять директиву препроцессора #define. Но если директива препроцессора позволяет записать в одной строке только одну константу, то при инициализации перечисляемого типа данных в одной строке можно записать несколько констант. С другой стороны директива препроцессора #define обеспечивает назначение текстовых обозначений для любых типов данных, включая строки текста, а перечисляемый тип данных позволяет для констант задавать только целые числа/.

При объявлении перечисляемого типа данных сначала указывается имя типа и перечень констант, относящихся к этому типу. После этого может быть объявлено сколько угодно переменных этого перечисляемого типа данных. По аналогии с обычными типами данных: пусть объявлено:

int a;

В этом объявлении int это имя типа данных, "a" это имя переменной типа int. Переменная "а" может принимать любое значение из допустимых для этого типа данных.

Для объявления названия перечисляемого типа данных (т.е. списка чисел и относящихся к ним обозначений) используется ключевое слово enum. Константы, входящие в конкретный перечисляемый тип данных, могут получать значения по умолчанию. Первой константе по умолчанию присваивается значение 0, а значение каждой последующей в списке константы увеличивается на 1.

47

В этом примере константа ZERO обозначает 0, ONE соответствует 1 и т. д.

Константам в списке можно присваивать значения явно. Например, enum keys {UР = 0x48, LEFT = 0x4B, RIGHT = 0x4D, DOWN = 0x50};

Последовательность записи констант в этом случае может быть любая. Можно также задать значение только для первой константы. В этом случае каждая последующая константа, которой никакого значения не присвоено, будет увеличиваться на единицу.

Если в программе используется только один список констант перечисляемого типа данных (либо списки различны по числовым значениям констант), то переменные этого типа данных можно не объявлять. Если же списков констант несколько, и в них содержатся одинаковые значения, то объявление переменных перечисляемого типа данных обязательно. В объявлении участвует ключевое слово и имя перечисляемого типа данных. Для приведенного выше примера с кодами клавиш объявление переменной key_codes перечисляемого типа данных имеет вид:

enum keys key_codes;

Константы и переменные перечисляемого типа данных можно использовать в арифметических и логических выражениях. Обработка констант перечисляемого типа данных выполняется аналогично обработке директив препроцессора #define. В скомпилированной программе имен таких констант нет. Значение, присвоенное константе перечисляемого типа данных, можно изменить, например, с ввода. См. параграф «Преобразование типов».

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]