Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
A.doc
Скачиваний:
36
Добавлен:
09.04.2015
Размер:
5.6 Mб
Скачать

123 Глава 3

такого проверочного условия может породить монстроподобную конструкцию опе- раторов if.

Простое и четкое решение обеспечивают логические операции. Применяя ло- гические операции, вы можете комбинировать серии сравнений в одно логическое выражение, так что в конечном итоге понадобится всего один оператор if — почти независимо от сложности набора условий, до тех пор, пока он сводится в конечном итоге к выбору из двух альтернатив (true или false).

Существуют всего три логических операции.

Логическое И

Операция логического И (&&) применяется тогда, когда есть два условия, и оба должны вернуть результат true, чтобы общий результат был равен true. Вы хотите быть богатым и здоровым. Например, вы можете использовать операцию && при про- верке принадлежности символа к буквам верхнего регистра; проверяемое значение должно быть больше или равно ' А' И меньше или равно ' Z '. Оба условия должны вернуть true, чтобы значение относилось к заглавным буквам.

Как и ранее, условия, комбинируемые логическими операциями, могут возвращать числовые значения. Помните, что ненулевые значения приводятся к true, а нулевые— к false.

Если вернуться к примеру, в котором проверяется значение типа char, сохранен- ное в переменной letter, то можно было бы заменить проверку с двумя оператора- ми i f на одну, использующую операцию:

Скобки внутри проверочного выражения условия i f гарантируют, что операции сравнения, вне всяких сомнений, будут выполнены первыми, и это делает весь опера- тор яснее. Здесь вывод сообщения произойдет только в том случае, если оба условия, объединенные операцией &&, окажутся истинными.

Как и в случае с бинарными операциями, о которых мы говорили в предыдущей главе, эффект применения каждой логической операции можно представить табли- цей истинности. Упомянутая таблица для && представлена в табл. 3.1.

Заголовки строк слева и заголовки столбцов сверху представляют значения ло- гических выражений, комбинируемых операцией &&. Таким образом, чтобы опреде- лить результат комбинации условия true с условием false, выберите строку с true слева, и столбец с false сверху, а на пересечении строки и столбца ищите результат (false). В действительности вам даже не нужна таблица истинности, поскольку все достаточно просто: операция && возвращает true, только если оба операнда равны true.

Решения и циклы 124

Логическое ИЛИ

Операция логического ИЛИ (| |) применяется тогда, когда имеются два условия и нужно получить результат true, если любое из них или оба возвращают true. Напри- мер, банк может положительно оценить вашу кредитоспособность для получения за- йма, если ваш доход составляет не менее $100 ООО в год или же у вас есть $1 ООО ООО наличными. Это может быть проверено с помощью следующего оператора if:

Банковский клерк проявит любезность, когда любое из двух условий выполнено либо оба сразу. (Более подходящим вопросом был бы: "Почему вы хотите занять де- нег?". Вообще-то странно, что банки готовы одалживать деньги только тогда, когда вы в них совершенно не нуждаетесь.)

Таблица истинности для операции | | представлена в табл. 3.2.

Здесь также результат может быть выражен очень просто: результат false получа- ется только тогда, когда оба операнда операции | | равны false.

Логическое НЕ

Третья логическая операция — НЕ (!) — принимает один операнд типа bool и ин- вертирует его значение. Поэтому если значением переменной test является true, то ! test получит значение false. Если же test равно false, то 'test будет равно true. В качестве примера простого выражения, если х имеет значение 10, то выра- жение:

будет false, поскольку х > 5 соответствует true.

Можно применить операцию ! к любимому выражению Чарльза Диккенса:

Если это выражение возвращает true, то в результате вы получите нищету, по крайней мере, как только банк перестанет оплачивать подписанные вами чеки.

И, наконец, вы можете применять операцию ! к другим базовым типам данных. Предположим, что имеется переменная rate типа float, содержащая значение 3,2. По некоторой причине вы можете пожелать убедиться, что значение rate отличает- ся от нуля, в этом случае можно использовать следующее выражение:

Значение 3,2 отличается от нуля, а потому преобразуется в значение true типа bool, и результат всего выражения будет false.