Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР2 - Алгоритмы линейн, ветвящ и циклы в С.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
157.7 Кб
Скачать

Условный оператор

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

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

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

<оператор 1>

[else

<оператор 2> ]

Тело условного оператора if выполняется в зависимости от значения <выражения>. Сначала вычисляется <выражение>. Если его значение истинно (не равно нулю), то выполняется <оператор 1>. Если же это значение ложно, то выполняется <оператор 2>, непосредственно следующий за ключевым словом else. Если значение <выражения> ложно, но конструкция else опущена, то управление передается на оператор, следующий в программе за оператором if. В этом случае условный оператор является сокращенным.

Оператор if может быть вложен в <оператор 1> или < оператор 2> другого оператора if. При вложении операторов if рекомендуется для ясности группирования операторов использовать фигурные скобки, ограничивающие <оператор 1> и <оператор 2>. Если фигурные скобки отсутствуют, то компилятор ассоциирует каждое ключевое слово else с ближайшим оператором if .

Примеры:

/* пример со скобками */

/* пример без скобок */

if (i >0)

{

if ( j > i )

x = j;

}

else

x = i;

if ( i >0 )

if ( j > i )

x = j;

else

x = i;

В первом случае при i <=0 переменной х присвоится значение i, во втором случае ей ничего не присваивается.

Имеется одна тернарная операция – условная. Она имеет следующий синтаксис:

<операнд 1> ? <операнд 2> : <операнд 3>

Выражение <операнд 1> вычисляется и сравнивается с нулем. Оно может иметь целый, действительнозначный тип, либо быть указателем. Если <операнд 1> имеет ненулевое значение, то вычисляется <операнд 2> и результатом условной операции является его значение. Если же <операнд 1> равен нулю, то вычисляется <операнд > и результатом является его значение.

В любом случае вычисляется только один из операндов, <операнд 2> или <операнд 3>, но не оба.

Пример:

j = ( i < 0 ) ? ( -i ) : ( i );

В примере j присваивается абсолютное значение i. Если i меньше нуля, то j присваивается –i. Если i больше или равно нулю, то j присваивается i .

Оператор переключатель

В некоторых случаях вместо условного оператора if более удобно использовать оператор-переключатель switch , предназначенный для выбора одного из нескольких альтернативных путей выполнения программы. Его формат имеет следующий вид:

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

{

[ <объявление> ]

...

[case <константное выражение>:]

[ <оператор> ]

...

[case <константное выражение>:]

[ <оператор> ]

...

...

[default:

< оператор> ]

}

В теле переключателя содержатся конструкции case < константное выражение>:, которые синтаксически представляют собой метки операторов. Выполнение оператора начинается с вычисления значения <выражения>. Управление передается тому оператору, значение константного выражения (константы варианта ) которого совпадает со значением выражения константы оператора .Если ни одна из констант варианта не равна значению выражения переключателя, то выполняется оператор, следующий за ключевым словом default. Когда данное слово опущено, ни один оператор в теле переключателя не выполняется, и управление передается на оператор, следующий за переключателем в программе.

Такие компоненты оператора switch, как case и default существенны только при начальной проверке, когда выбирается оператор для выполнения в теле переключателя. Все операторы, следующие за выбранным выполняются последовательно, пока какой-либо из них не передаст управление за пределы оператора switch. Для выхода из тела переключателя обычно используют оператор разрыва break.

Пример:

switch ( i )

{

case -1:

n++;

break;

case 0:

z++;

break;

case 1:

p++;

}

В примере при i , равном -1, переменная n инкрементируется. Оператор break, следующий за оператором n++, вызывает передачу управления за пределы тела переключателя, минуя остающиеся операторы. Аналогично, при i=0 инкрементируется только переменная z.