- •Ввод и вывод числовых значений
- •Логические выражения
- •Знаки отношения
- •Логические операции
- •Построение циклов при помощи условных операторов
- •Оператор цикла for
- •Оператор цикла с постусловием
- •Лабораторная работа №5. Составить программу, выполняющую суммирование ряда:
- •Типы данных
- •Целые числа
- •Вещественные числа
- •Символы
- •Массивы
- •Двумерные массивы
Логические выражения
До сих пор мы выполняли в условных операторах только проверку на «больше» или «меньше», используя соответствующие математические значки > и <. Перед тем, как использовать другие знаки отношения: «равно», «не равно», «больше или равно», «меньше или равно» нужно научиться их записывать, поскольку эта запись в языках программирования отличается от общепринятой математической. Это связано с рядом причин, в частности, с тем, что некоторые математические знаки отношения имеют составную форму, а в программах можно писать только простые значки.
Приведем следующую таблицу, в которой поместим обычные математические значки и их программные аналоги в языке программирования С++.
Знаки отношения
Математика |
С++ |
= |
== |
|
!= |
< |
< |
> |
> |
|
<= |
|
>= |
Отметим, что знак = в С++ заменен двумя знаками равенства == из-за того, что один такой знак обозначает операцию присваивания.
Изучим операции отношения подробнее. Когда в программе встречается выражение типа:
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";
Подобные конструкции, с одной стороны, открывают дополнительные возможности; с другой стороны, эти возможности могут быть разрушительными, как порождающие ошибки.
