Лекция № 2
Тема: «Логические операции и операторы ветвления»
План
1. Выражения сравнения
2. Оператор IF … ELSE
3. Оператор ?:
4. Оператор SWITCH
1. Выражения сравнения
Компьютеры представляют собой нечто большее, чем средства для беспрерывного «перемалывания» чисел. Они обладают способностью сравнивать значения, и именно эта особенность служит компьютеру основанием для принятия необходимых решений. Указанная возможность воплощена в C++ в операторах сравнения. Для сравнения чисел в C++ существует шесть операторов сравнения. Каждое выражение сравнения сводится к значению true, если результат сравнения оказывается истинным, и к значению false, если результат сравнения оказывается ложным. Все операторы сравнения представлены в таблице.
Оператор |
Значение |
< |
меньше |
<= |
меньше или равно |
= = |
равно |
> |
больше |
>= |
больше или равно |
!= |
не равно |
Операторы сравненья обладают более низким приоритетом, чем арифметические операторы. Это означает, что выражение
х + 3 > у - 2 //выражение 1
соответствует выражению
(x + 3) > (у - 2) //выражение 2
а не следующему выражению:
х + (3 > у) - 2 //выражение 3
Логические выражения
Часто приходится проверять более одного условия. В целях удовлетворения подобной необходимости язык C++ предоставляет три логические операции для объединения или изменения существующих выражений. Этими операциями являются логическое ИЛИ. записываемое как ||; логическое И, записываемое как &&; и логическое НЕ, записываемое как !
Операция логического ИЛИ: ||
В разговорном языке слово или может указывать на то, что одно или оба условия удовлетворяют предъявляемому требованию. Операция логического ИЛИ.записываемая как ||, объединяет два выражения в одно. Если любое или оба исходных выражения имеют значение true, результирующее выражение также имеет значение true. В противном случае выражение имеет значение false. Ниже приведено несколько примеров:
5 = =5 || 5 = = 9 //истинно, поскольку первое выражение истинно
5 > 3 || 5 > 10 //истинно, поскольку первое выражение истинно
5 > 8 || 5 < 10 //истинно, поскольку второе выражение истинно
5 < 8 || 5 > 2 //истинно, поскольку оба выражения истинны
5 > 8 || 5 < 2 //ложно, поскольку оба выражения ложны
Поскольку операция || имеет более низкий приоритет, чем операции сравнения, в этих выражениях не требуется использовать скобки.
В соответствии с правилами C++ оператор || является точкой последовательности, т.е. любые изменения значения, указанные в левой части, происходят до вычисления правой части. Например, давайте рассмотрим следующее выражение:
i++ < 6 || i == j
Предположим, что первоначально i имеет значение, равное 10. К моменту сравнения с j переменная i получает значение, равнее 11. Кроме того, C++ не станет утруждать себя вычислением выражения в правой части, если выражение в левой части истинно, поскольку для того, чтобы все логическое выражение было истинным, достаточно истинности одной части выражения.
Операция логического И: &&
Операция логического И, записываемая как &&, также объединяет два выражения в одно. Результирующее выражение имеет значение true только в том случае, если оба исходные выражения имеют значения true. Вот несколько примеров:
5 = = 5 && 4 = = 4 //истинно, поскольку оба выражения истинны
5 < 3 && 4 => 4 //ложно, поскольку первое выражение ложно
5 > 3 && 5 > 10 //ложно, поскольку второе выражение ложно
5 > 8 && 5 < 10 //ложно, поскольку первое выражение ложно
5 < 8 && 5 > 2 //истинно, поскольку оба выражения истинны
5 > 8 && 5 < 2 //ложно, поскольку оба выражения ложны
Поскольку операция && имеет более низкий приоритет, чем операторы сравнения, в этих выражениях скобки не используются. Подобно операции ||, операция &&действует в качестве точки последовательности, и поэтому левая часть выражения вычисляется, оказывая всяческие воздействия на программу, до вычисления правой части выражения. Если левая часть ложна, то ложно и все выражение, поэтому в таком случае C++ не утруждает себя вычислением правой части. Операция && позволяет в условиях диапазоны значений.
Операция логического НЕ:!
Операция ! отрицает или инвертирует следующее за ним выражение сравнения. Таким образом, если выражение имеет значение true, то выражение имеет значение false и наоборот.
Как правило, отношение можно выразить понятнее, не прибегая к этому оператору:
!(х > 5) то же самое, что и х <= 5
Немного о логических операциях
Как уже говорилось, операции логического И и логического ИЛИ в C++ имеют более низкий приоритет, чем операции сравнения. Это означает, что выражение типа
x > 5 && х < 10
читается следующим образом:
(х > 5)&& (х < 10)
С другой стороны, операция ! имеет более высокий приоритет, чем любые операции сравнения или арифметические операции. Следовательно, чтобы выполнить отрицание выражения, его нужно заключить в скобки;
!(х > 5)
Операция логического И имеет более высокий приоритет, чем операция логического ИЛИ. Следовательно, выражение
x > 30 && x < 45 | | y > 300
означает следующее:
(x > 30 && x < 45) | | y > 300
Таким образом, одно условие состоит в проверке принадлежности переменной x диапазону от 31 до 44, а второе в том, чтобы y было больше 300.
Для указания программе требуемого порядка действий можно использовать скобки. Например, предположим, что нужно использовать операцию && для объединения условия «x больше 50 или y больше 300» с условием «z больше 1000». Для этого часть ИЛИ необходимо заключить в скобки:
(x > 50 || y >300) && z > 1000
В противном случае компилятор объединит условие y с условием z, а не с условием x. Для группирования условий проще всего использовать скобки, независимо от того, нужны они или нет. Это облегчает чтение текста программы. (начало)