Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОНСПЕКТ 2.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
241.66 Кб
Скачать

Логические выражения

До сих пор мы выполняли в условных операторах только проверку на «больше» или «меньше», используя соответствующие математические значки > и <. Перед тем, как использовать другие знаки отношения: «равно», «не равно», «больше или равно», «меньше или равно» нужно научиться их записывать, поскольку эта запись в языках программирования отличается от общепринятой математической. Это связано с рядом причин, в частности, с тем, что некоторые математические знаки отношения имеют составную форму, а в программах можно писать только простые значки.

Приведем следующую таблицу, в которой поместим обычные математические значки и их программные аналоги в языке программирования С++.

Знаки отношения

Математика

С++

=

==

!=

<

<

>

>

<=

>=

Отметим, что знак = в С++ заменен двумя знаками равенства == из-за того, что один такой знак обозначает операцию присваивания.

Изучим операции отношения подробнее. Когда в программе встречается выражение типа:

x=y

то это вовсе не означает, что величины x и y равны между собой. Сравнение – это операция, которая проверяет справедливость указанного отношения, в данном случае равенства. Если числовые значения величин x и y одинаковы, то значением выражения x=y будет «истина» или, по-английски, «true». Если же эти числовые значения различны, то значением выражения x=y будет «ложь» – «false».

То же самое относится и ко всем остальным знакам отношения.

Таким образом, знаки отношения – это логические операции; выполнение этих операций приводит к получению одного из двух логических значений: «true» или «false».

Помимо знаков отношений существуют еще некоторые логические операции, также употребляющиеся в программировании. Это операции «И», «ИЛИ» и «НЕ». Приведем таблицу значков, соответствующих этим операциям, в математической логике и С++:

Логические операции

Математическая

Логика

С++

«И»

 или 



«ИЛИ»

||

«НЕ»

!

Рассмотрим коротко действие логических операций.

Выражение (x>y)&&(x>z) (C++) истинно тогда, когда истинны одновременно оба выражения в скобках и ложно, если хотя бы одно из неравенств ложно.

Выражение (x>y)||(x>z) ( C++ ) истинно тогда, когда истинно хотя бы одно выражение в скобках и ложно, если оба эти выражения ложны одновременно.

Выражение !(x>y) ( C++ ) истинно, если отношение в скобках ложно и наоборот.

Логические операции изучаются в курсе математической логики. Здесь мы будем использовать только простейшие и интуитивно очевидные логические выражения; для недопущения путаницы в порядке выполнения операций необходимо использовать скобки.

В языке С изначально логические переменные отсутствовали. Их роль играли обычные целочисленные переменные, принимающие значение 0 или 1 со смыслом false или true. Например, можно записать:

double x,y;

int i;

x=4.86;

y=11.11;

i=(x<y);

получая значение целочисленной переменной i, равное 1. Если последний оператор заменить на:

i=(x>y);

то значение i будет равным 0.

Подобная замена логических величин числовыми может, в некоторых случаях, привести к ошибкам. Например выражение:

3<2<1

будет иметь истинное значение. Действительно, вначале вычисляется значение отношения 3<2, результат получается ложным, т.е. равным нулю; затем этот ноль сравнивается с единицей: 0<1; естественно, получается истина.

В связи с этим в современном варианте С – Visual C++ – логический тип данных имеется. Это позволяет унифицировать стиль программ на Visual C++ со стилем программам на других языках.

Тем не менее, во всех вариантах С, включая Visual C++, допускается запись числового выражения на том месте, где должно быть логическое выражение. Нулевое значение числового выражения трактуется как ложь, а любое другое – как истина.

Вполне допустимы программы вида:

double x,y;

int i;

. . . .

if (x+y/i) cout << x << "\n";

Подобные конструкции, с одной стороны, открывают дополнительные возможности; с другой стороны, эти возможности могут быть разрушительными, как порождающие ошибки.