Основные сведения об условных операторах
Во многих случаях последовательность выполнения операторов программы не может быть однозначно определена до начала расчетов. Часто выбор следующего действия зависит от значения некоторого промежуточного результата. Подобный вычислительный процесс называется разветвляющимся. Простейшим примером разветвляющегося процесса может служить,например, вычисление такой функции: 0 если x <= 0 y = x если x > 0 В структурную схему алгоритма вычислений включается логический блок, обеспечивающий разветвление по двум возможным направлениям: да нет
В тексте программы такому алгоритму соответствует условный оператор:
if(условие) оператор_1; else оператор_2;
Если условие (или выражение, записанное вместо него) истинно, то выполняется оператор_1, в противном случае выполняется оператор_2. В качестве любого оператора может быть записан составной оператор, т.е. блок. Конкретно для нашего случая, оператор запишется так: if(x <= 0) y = 0; else y = x; Часто, но не всегда, условие представляет собой два арифметических выражения, соединенных одним из знаков операции отношения: a == b - a тождественно равно b; a!= b - a не равно b; a > b - a больше b; a >= b - a больше или равно b; a < b - a меньше b; a <= b - a меньше или равно b.
Такие условия позволяют сравнивать два операнда. Результат проверки истинности условия – это логическая переменная, которая может принимать одно из двух значений (true – false, т.е. истина - ложь). В языке СИ эти значения адекватны целым числам: истина – единица, ложь - нуль. Поэтому язык СИ разрешает использовать в качестве условий одиночные арифметические выражения(АВ) и даже константы. При этом нулевое значение АВ, независимо от типа – целое или вещественное, трактуется как логическая «ложь», а любое ненулевое – как «истина». Например, вычисление значения функции y = sin(x)/x может быть записано так:
x =...; if(x) y = sin(x)/x; else y = 1.0; Полезно подумать, почему для вычисления использован условный оператор, а не простое присваивание вида y = sin(x)/x. Допустимо записывать короткий вариант условного оператора - без ветви else. Такой оператор при ложности условия не выполняет никаких действий. Запишем фрагмент реализации разветвления с помощью короткого условного оператора. Это вполне возможно, несмотря на отсутствие у него ветви «else»: y = 0; if(x > 0) y = x; Обратите внимание на характерный прием: сначала переменной y произвольно присваивается конкретное значение, а потом проверяется, угадали мы или нет. Если отношение x > 0 окажется истинным, то значение «y» перевычисляется. Условия могут быть достаточно сложными логическими выражениями. В языке СИ есть три стандартные логические операции, обозначаемые следующими символами:
&& - операция И (AND); || - операция ИЛИ (OR); ! - операция НЕ (NOT);
Предупреждение. Логические операции И, ИЛИ не следует путать с одноименными побитовыми операциями, которые обозначаются одиночными символами & и | соответственно.
Приведем два примера их использования:
a>b && a<c a>0 || b >0 ||!(a==b)
Выполнение логической операции "И"(&&) производится так. Последовательно слева направо вычисляются значения всех операндов. Как только будет найден нулевой операнд, дальнейшие вычисления прекращаются, и все логическое выражение получает значение нуль (т.е."ложь"). Если ни один из операндов не оказался нулевым, логическое выражение получает значение “единица”, которое трактуется как "истина". Похожим образом выполняется логическая операция "ИЛИ"(||). Последовательное вычисление операндов досрочно прекращается, как только будет найден ненулевой операнд, в результате чего все логическое выражение считается истинным и получает значение “единица”. Нулевым оно будет лишь тогда, когда все операнды также будут иметь нулевое значение.
Вычисление выражений, содержащих только логические операции, прекращается, как только удается однозначно определить результат.
Операция логического отрицания "!" может стоять перед целой (или булевой) переменной, изменяя тем самым ее логическое значение на противоположное, т.е. ненулевое значение - на нуль, а нуль - на единицу. Результат выполнения операции имеет тип int. Например: int k = 0; if(!k) { ........ /* Выполняемые действия */ }
Наиболее часто логические выражения играют роль условий, проверяемых при разветвлении вычислительного процесса или его прекращении:
if(a>b || c>d || e>f).....
Читайте также: I уровень. Теоретические сведения Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|