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

Условный оператор if используется для разветвления процесса вычислений на два направления. Структурная схема оператора приведена на рисунке 3.1. Формат оператора:

if ( выражение) оператор_1; [else оператор_2]

Сначала вычисляется выражение, которое может иметь арифметический тип или тип указателя. Если оно не равно нулю (имеет значение true), выполняется первый оператор, иначе второй. После этого управление передается на оператор, следующий за условным.

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

Рис. 3.1. Структурная схема оператора if


 

Примеры:

if (а<0) b = 1; // 1

if (a<b && (a>d || a==0)) b++; else {b *= a; a = 0;} // 2

if (a<b) {if (a<c) m = a; else m = c;} else {if (b<c) m = b; else m = c;} // 3

if (a++) b++; // 4

if (b>a) max = b; else max = a; //5

В примере 1 отсутствует ветвь else. Подобная конструкция называется «пропуск оператора», поскольку присваивание либо выполняется, либо пропускается в за­висимости от выполнения условия.

Если требуется проверить несколько условий, их объединяют знаками логиче­ских операций. Например, выражение в примере 2 будет истинно в том случае, если выполнится одновременно условие а<b и одно из условий в скобках. Если опустить внутренние скобки, будет выполнено сначала логическое И, а потом — ИЛИ.

Оператор в примере 3 вычисляет наименьшее значение из трех переменных. Фи­гурные скобки в данном случае не обязательны, так как компилятор относит часть else к ближайшему if.

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

Конструкции, подобные оператору в примере 5, проще и нагляднее записывать в виде условной операции (в данном случае:
max = (b > а) ? b : а;).

Рис. 1.4. Мишень.

Пример. Производится выстрел по мишени, изображенной на рис. 1.4. Опреде­лить количество очков.

#include <iostream.h>

int main()

{

float x, у; int kol;

cout << "Введите координаты выстрела\n";

cin >> х >> у;

if ( х*х + у*у < 1 ) kol = 2;

else

if( x*x + y*y < 4 ) kol = 1;

else kol =0;

cout << "\n Очков: " << kol;

return 0;

}

Распространенная ошибка при записи условных операторов – использование в выражени­ях вместо проверки на равенство (==) простого присваивания (=), например, if (a=l) b=0;. Синтаксической ошибки нет, так как операция присваивания формирует результат, кото­рый и оценивается на равенство/неравенство нулю. В данном примере присваивание пере­менной b будет выполнено независимо от значения переменной а. Поэтому в выражениях проверки переменной на равенство константе константу рекомендуется записывать слева от операции сравнения: if (l==a) b=0;.

Вторая ошибка — неверная запись проверки на принадлежность диапазону. Например, что­бы проверить условие 0<х<1, нельзя записать его в условном операторе непосредственно, так как будет выполнено сначала сравнение 0<x, а его результат (true или fal se, преобразо­ванное в int) будет сравниваться с 1.Правильный способ записи: if(0<x && х<1).

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

#include <iostream.h>

int main(){

float x, у, temp; int kol;

cout << "Введите координаты выстрела\n";

cin >> x >> у;

temp = x*x + y*y;

kol = 0;

if (temp < 4 ) kol = 1;

if (temp < 1 ) kol = 2;

cout << "\n Очков: " << kol;

return 0;

}

Если какая-либо переменная используется только внутри условного оператора, рекомендуется объявить ее внутри скобок, например:

if (int i = fun(t)) a -= i; else a += i;

Объявление переменной в тот момент, когда она требуется, то есть когда ей необ­ходимо присвоить значение, является признаком хорошего стиля и позволяет из­бежать случайного использования переменной до ее инициализации. Объявлять внутри оператора if можно только одну переменную. Область ее видимости на­чинается в точке объявления и включает обе ветви оператора.








Дата добавления: 2015-10-09; просмотров: 1852;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.