Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Условный оператор 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 можно только одну переменную. Область ее видимости начинается в точке объявления и включает обе ветви оператора.
|