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

Оператор-выражение

Составной оператор

Синтаксис:

{

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

.

.

.

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

}

Действие:

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

В начале составного оператора могут содержаться объявления (см. разделы 3.6, 3.6.2). Они служат для определения переменных, локальных для данного блока, либо для распространения на данный блок области действия глобальных объектов.

Пример:

if(i> 0) {

line[i] = х;

х++;

}

Типично использование составного оператора в качестве тела другого оператора, например оператора if. В приведенном примере, если i больше нуля, будут последовательно выполнены операторы, содержащиеся в составном операторе.

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

Можно поставить метку и на сам составной оператор, если только это не оператор, составляющий тело функции.

Синтаксис:

<выражение>;

Действие:

<Выражение> вычисляется в соответствии с правилами, изложенными в разделе 4 "Выражения". Отличие оператора-выражения состоит в том, что значение содержащегося в нем выражения никак не используется. Кроме того, он может быть записан лишь там, где по синтаксису допустим оператор.

Примеры:

х = у+3; /*пример 1*/

х++; /*пример 2*/

f(x); /*пример 3*/

В первом примерех присваивается значение у+3. Во втором примерех инкрементируется.

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

Синтаксис:

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

<оператор1>

[else

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

Действие:

Тело условного оператора if выполняется в зависимости от значения <выражения>.

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

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

Пример:

if(i> 0)

У = х/i;

else {

х = 1;

у= f(x);

}

В примере, если i больше нуля, выполняется оператор у=x/i;. Если i меньше или равно нулю, то значение i присваивается переменной х, а значение, возвращаемое функцией f(x), присваивается переменной у.

Вложенность

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

Если же фигурные скобки отсутствуют, то компилятор ассоциирует каждое ключевое слово else с ближайшим оператором if, у которого отсутствует конструкция else.

На ключевое слово if можно поставить метку, а на ключевое слово else — нельзя (однако можно поставить метку на <оператор2>, следующий за else).

Примеры.

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

if(i> 0)

if(j> i)

x= j;

else x= i;

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

if(i> 0) {

if(j> i)

x = j;

}

else

x = i;

В первом примере ключевое слово else ассоциируется с внутренним условным оператором if. Если i меньше или равно нулю, то переменной х ничего не присваивается.

Во втором примере фигурные скобки ограничивают внутренний условный оператор if и тем самым делают конструкцию else частью внешнего условного оператора if. Если i меньше или равно нулю, то переменной х присваивается значение i.