Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по С Живицкая (Мет пособие).doc
Скачиваний:
112
Добавлен:
15.06.2014
Размер:
2.11 Mб
Скачать

2.2.2.2. Оператор ?

Оператор ? может использоваться для замены стандартной конструкции if else там, где входящие в нее операторы являются простыми выражениями.

Формат оператора

Выражение 1? выражение 2: выражение 3;

Работа оператора: вычислятся выражение 1, если оно истинно, вычисляется выражение 2 и вся конструкция получает вычисленное выражение, если выражение 1 ложно, вычисляется выражение 3 и вся конструкция получает вычисленное выражение.

Пример:

x = 10;

y = x>9? 100 : 200;

В данном случае y применяет значение 100, если бы x<9, то y приняло бы значение 200.

Аналогично if else

x = 10

if (x>9) y = 100;

else y = 200;

2.2.2.3. Оператор switch (переключатель)

Оператор switch заменяет разветвленный многократный оператор else и позволяет выбрать одну из нескольких альтернатив.

Формат оператора:

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

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

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

break;

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

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

break;

default:

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

}

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

Для прекращения последующих проверок после успешного выбора некоторого варианта используется оператор Break обеспечивающий немедленный выход из оператора Switch.

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

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

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

4) Целесообразно даже в конце последней ветви помещать инструкцию Break, хотя с точки зрения логики в ней нет необходимости.

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

Пример:

|switch (y)

{ case '1':

print f ("ветвь 1 \ n");

break;

case '2':

case '3':

print f ("ветвь 2 или 3 \ n");

break;

default:

print f ("ветви 1, 2, 3, не работают \ n");

}

2.2.2.4. Оператор безусловного перехода goto.

Оператор goto используется для безусловной передачи управления внутри функции от одного оператора к другому.

Формат оператора:

goto индентификатор;

Управление передается на оператор в теле той же функции помеченный указанным индентификатором (метка).

Пример:

# include < stdio.h >

void main (void)

{ int a;

scanf (" % d", & a);

if (a > = 0) goto М1;

a = 0;

M1: print f ("a = % d \ n", a);

}

Хотя в языке C и разрешена передача управления на любой оператор в теле функции, опыт показывает, что следует пользоваться этой возможностью, как можно реже или вовсе от нее отказаться. В соответствии с теорией структурного и объектно-ориентированного программирования использование оператора goto нежелательно, т.к. может затруднить возможности и свести на нет усилия компелятора по активизации программы. Если все же применяется оператор goto целесообразно придерживаться следующих инструкций:

1) Не входить внутрь блока из вне.

2) Не входить внутрь оператора if или else, конструкции if else или оператора switch.

3) Не входить внутрь итерационной структуры оператора цикла из вне этой структуры.