Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы программирования на языке C_4.docx
Скачиваний:
47
Добавлен:
25.03.2016
Размер:
300 Кб
Скачать
☆

Расширение оператора if

Простейшей формой оператора if является

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

оператор

Под выражением здесь понимаем условное выражение. С его помощью сравниваются значения двух величин. Если такое выражение истинно, то оператор выполняется. В противном случае он пропускается. В общем случае в качестве условия может быть использовано любое выражение, и если его значение равно 0, то оно считается ложным.

Оператор может быть простым или составным, т. е. блоком.

Пример:

/* пример одиночного оператора и блока */

#include <stdio.h>

int main( )

{

int i;

i=getchar( );

if (i > 5)

/* одиночный оператор*/

printf("Значение больше 5.\n");

if (i < 5) {

/* составной оператор*/

printf("Значение\n");

printf(" меньше 5.\n");

}

return 0;

}

Простая форма оператора if позволяет выбрать оператор, возможно, составной, или пропустить его. Язык Си предоставляет также возможность выбрать любой из двух операторов путем использования конструкции if-else.

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

Пример:

/* код_1*/

#include <stdio.h>

int main( )

{

int ch;

while ((ch=getchar( )) != EOF) {

/* оставить символ "новая строка неизменным" */

if (ch == '\n')

putchar(ch);

else

/* заменить остальные символы*/

putchar(ch + 1);

}

}

Общий вид оператора if-else выглядит следующим образом:

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

оператор

else

оператор

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

!

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

Простая конструкция if позволяет нам выбрать, выполнить или нет некоторое действие; конструкция же if-else дает возможность выбрать одно из двух действий.

Подведем итоги.

Оператор if имеет две формы:

if(выражение) оператор;

и

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

оператор1;

else

оператор2;

Если в результате вычисления значения выражения получено значение " истина " (ненулевое значение), то в обеих формах оператора if выполняется оператор1. Если вычисленное значение выражения равно значению " ложь " (нулевое), тогда выполнение оператора if, представленного в первой форме, заканчивается, а в операторе, имеющем вторую форму, выполняется оператор 2.

Совместное использование обеих форм оператора if приводит к неоднозначности, называемой " проблемой висящего else ".

Например, вложенный оператор if

if(e1) if( e2) оператор1; else оператор2;

может быть интерпретирован так

if (e1)

if(e2)

оператор1;

else

оператор2;

или так

if(e1)

if(e2) оператор1;

else

оператор2;

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

!

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

if(e1)

if(e2) оператор1;

else

; /* точка с запятой здесь обозначает пустой

оператор*/

else оператор2;

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

if(e1) {

if(e2)

оператор1;

else

оператор2

}

и

if(e1) {

if(e2) оператор1;

}

else

оператор2;