1.4. Логические выражения и оператор if
1.4.1 Условные конструкции. Пример условных конструкций (пример 4)
Условные конструкции позволяют в зависимости от условия
выполнять блок операторов, заключенный в фигурные скобки.
if( условие )
{
блок операторов;
}
|
Если условие удовлетворено, то "блок операторов" в
теле if выполняется.
Если условие не удовлетворяется, то "блок операторов"в
теле if не выполняется.
|
|
if( условие )
{
блок операторов 1;
}
else
{
блок операторов 2;
}
|
Если условие выполняется, то выполняется "блок операторов
1".
Если условие не удовлетворено, то выполняется "блок
операторов 2".
|
|
Условия в операторах if могут быть образованы с помощью операций равенства
и отношений. В примере несколько операторов if сравнивают два вводимых пользователем
числа. Если в каком-либо из этих операторов условие удовлетворяется (равно
true) – выполняется связанный с данным if оператор вывода.
Если внутри условия только один оператор, допустимо не использовать фигурные
скобки. Если операторов 2 и более – использование фигурных скобок обязательно.
/////////////////////////////////////////////////////////////////////////////
// Программирование на языке высокого уровня. Основы языка С++
// Пример 4. Пример условных конструкций
//
// http://aco.ifmo.ru/el_books/programming
// Университет ИТМО
/////////////////////////////////////////////////////////////////////////////
// подключение библиотеки ввода-вывода
#include <iostream>
// подключение стандартного пространства имен для использования библиотек
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// функция main начинает исполнение программы
void main()
{
// объявление переменных
int x,y;
cout<<"Enter two integers to compare: "; // запросить ввод
cin>>x>>y; // прочитать два введенных числа
if(x == y) // число x равно числу y ?
cout<<x<<" == "<<y<<endl;
if(x != y) // число x не равно числу y?
cout<<x<<" != "<<y<<endl;
if(x < y) // число x меньше числа y ?
cout<<x<<" < "<<y<<endl;
if(x > y) // число x больше числа y ?
cout<<x<<" > "<<y<<endl;
if(x <= y) // число x меньше либо равно числу y ?
cout<<x<<" <= "<<y<<endl;
if(x >= y) // число x больше либо равно числу y ?
cout<<x<<" >= "<<y<<endl;
}
/////////////////////////////////////////////////////////////////////////////
1.4.2 Логические выражения. Логические операции И, ИЛИ, НЕ (пример 5)
Выражение, находящееся внутри круглых скобок оператора if – логическое выражение.
Логическое выражение может принимать два значения – true (истинно) или false
(ложно). Рассмотрим еще один пример, который определяет, попала ли точка
с координатами x, y в прямоугольник:
/////////////////////////////////////////////////////////////////////////////
// Программирование на языке высокого уровня. Основы языка С++
// Пример 5. Пример определения попадания точки в прямоугольник
//
// http://aco.ifmo.ru/el_books/programming
// Университет ИТМО
/////////////////////////////////////////////////////////////////////////////
// подключение библиотеки ввода-вывода
#include <iostream>
// подключение стандартного пространства имен для использования библиотек
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// функция main начинает исполнение программы
void main()
{
// объявление переменных
double x,y;
cout<<"Enter point coordinate (x,y): "; // запросить ввод
cin>>x>>y; // прочитать два введенных числа
// первый вариант решения
// если точка находится внутри прямоугольника
if(x<2 && x>-2 && y>-1 && y<1)
cout<<"Point inside"<<endl;
else
cout<<"Point outside"<<endl;
// второй вариант решения
// если точка находится внутри прямоугольника
bool x_inside=x<2 && x>-2;
bool y_inside=y<1 && y>-1;
if(x_inside && y_inside)
cout<<"Point inside"<<endl;
else
cout<<"Point outside"<<endl;
}
/////////////////////////////////////////////////////////////////////////////
В C++ предусмотрены логические операции, которые используются для образования
более сложных условий путем комбинирования простых. Логическими операциями
являются:
&& - логическое И
|| - логическое ИЛИ
! - логическое НЕ
В данном примере, для определения попадания точки внутрь прямоугольника
нам надо проверить условие, которое математически можно записать как -1 < x < 1.
При записи этого выражения на С++ нам придется воспользоваться операцией && (логического
И) для объединения двух условий: x<2&&x>-2 .
Это условие равно true в том и только том случае, когда оба простых условия
равны true. Логические операции И, ИЛИ и НЕ имеют более высокий приоритет
чем операции сравнения, поэтому скобки не являются необходимыми. Однако,
для удобства чтения можно добавить круглые скобки:
(x<2)&&(x>-2).
Если бы нам надо было определить, что точка НЕ попадает внутрь прямоугольника,
нам потребовалась бы использовать оператор ИЛИ (координата x либо меньше
-2, либо больше 2):
(x >2)||(x<-2)
Либо можно было бы воспользоваться оператором НЕ (координата x НЕ лежит
внутри прямоугольника):
!( (x <2)&&(x >-2) )
Таблица показывает все четыре возможных комбинации значений false и true
для операций И и ИЛИ с двумя выражениями.
выражение 1
|
выражение 2
|
(выражение 1) && (выражение
2)
|
(выражение 1) || (выражение
2)
|
true
|
true
|
true
|
true
|
true
|
false
|
false
|
true
|
false
|
true
|
false
|
true
|
false
|
false
|
false
|
false
|
При написании выражений, содержащих много операций, справляйтесь с таблицей
старшинства и ассоциативности (приложение ?). Если вы не уверены относительно
порядка оценки в сложном выражении, используйте для задания нужного порядка
круглые скобки, как в алгебраических выражениях.
1.4.3 Типичные ошибки
if(x==1) // правильно!
{
y=x+3;
z=y*5;
}
|
if(x=1) // неправильно!
// выполняется всегда!
{
y=x+3;
z=y*5;
}
ошибочное употребление операции присваивания = вместо операции равенства
==
|
if(x==1); // неправильно!
// выполняется всегда!
{
y=x+3;
z=y*5;
}
эквивалентно коду:
if(x==1)
{
[пустой оператор];
}
y=x+3;
z=y*5;
|
if(x==1) // неправильно!
y=x+3;
z=y*5;
отсутствуют фигурные скобки, хотя в условии задумано больше одного
оператора
эквивалентно коду:
if(x==1)
{
y=x+3;
}
z=y*5;
|
1.4.4 Вложенные условия
Для вложенных условий, когда одно условие находится внутри другого очень
важно соблюдать правильную последовательность операторов и правильно расставлять
фигурные скобки.
Например:
if( х > 5 )
if( У > 5 )
cout<<"x and у are > 5";
else
cout<<"x is <= 5";
Судя по отступам, в данном примере ожидается, что оператор else относится
к условию x>5. На самом же деле оператор else всегда относится к ближайшему
к нему оператору if. Данный пример будет выполняться так:
if( х > 5 )
if( У > 5 )
cout<<"x and у are > 5";
else
cout<<"x is <= 5";
Чтобы вложенный оператор if... else выполнялся так, как предполагалось сначала,
мы должны написать его следующим образом:
if( х > 5 )
{
if( У > 5 )
cout<<"x and у are > 5";
}
else
cout<<"x is <= 5";
|