Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






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

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

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

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

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

Примеры:

if (a< 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: a;).

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

#include < iostream.h>

int main(){

float x, у; int kol;

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

cin > > x > > у:

if (x*x + y*y < 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< х. а его результат (true или false, преобразованное в int) будет сравниваться с 1. Правильный способ записи: if(0< x & & х< 1)…

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

#iinclude < iostream.h>

int main(){

float x, y, 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 можно только одну переменную. Область ее видимости начинается в точке объявления и включает обе ветви оператора.


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

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал