Операции отношения и логические операции.
Операции отношения используются для сравнения:
< | меньше | <= | меньше или равно |
> | больше | >= | больше или равно |
= = | равно | != | не равно |
Логические операции:
& & и (and)
| | или (or)
! не (not)
Таблица истинности для логических операций
x | y | x && y | x | | y | ! x | x ^ y |
Операции отношения и логические имеют более низкий приоритет, чем арифметические операции. Это значит, что выражение 12>10+1 аналогично выражению 12>(10+1)
Среди логических операций – старшая операция отрицания, затем выполняются операции отношения, а затем логические «И», «ИЛИ» и т.д.
Каждое условное выражение проверяется, истинно оно или ложно, причем в языке нет логического (булевого) типа, поэтому результатом логического выражения является целочисленное арифметическое выражение: ложь – 0, истина – ненулевая величина (1)
Пример:
#include <iostream. h>
void main(void)
{
int tr, fal;
tr = (101<=105); //выражение истинно
fal = (101>105); //выражение ложно
cout << ²true ² << tr << ² false ² << fal << endl;
}
Результат:
true 1 false 0
Поразрядные (побитовые операции) можно проводить с любыми целочисленными переменными и константами.
Побитовые операции позволяют обеспечить доступ к каждому биту информации. При их выполнении сравниваются не значения выражений, как в логических операциях, а значения каждой пары разрядов (битов). Часто поразрядные операции используются в драйверах устройств, программах, связанных с принтером, модемом и др. Поразрядные операции удобны для хранения информации в сжатом виде ― в виде флагов (включено, выключено, 0 или 1). В одном байте можно хранить 8 флагов. Например, проверка установлен ли флаг в 2-ом разряде переменной а:
|
Флаг в 6-ом разряде РС внешнего устройства означает «разрешение прерывания»
if (a & 0100) cout << “ прерывания разрешены”
Сдвиг вправо на 1 разряд аналогичен операции деления на 2 в 8 с/с
|
|
Сдвиг вправо ― аналогичен операции умножения на 2 в 8 с/с
Пример: написать программу для вычисления функции
#include <iostream.h>
#include <math.h>
void main(void)
{
const pi = 3.1415;
float x=3. 3, f ;
f=exp(x*sqrt(2))*cos(sqrt(x/3)+pi/4)/(pow(2*pi*x,1./3.)+log(atan(x)));
cout<<”f=”<<f;
}
Для каждой операции определено количество операндов: один операнд― унарная операция, два операнда―бинарная операция, например, операции сложения или вычитания
Условный оператор.
Оператор if позволяет осуществить проверку условия и на основании этой проверки выполнять операторы. Условный оператор в неполной форме :
if ( условие ) оператор;
Если условие выполняется, выполняется оператор, если не выполняется, выполняется следующий за if оператор. Оператор может быть составным. (Составной оператор – это несколько операторов, заключенных в { } ).
Условный оператор в полной форме:
if ( условие)
оператор1;
else
оператор2;
Если условие истинно, выполняется оператор 1, если ложь, то выполняется оператор 2, «else» - иначе
Пример №1. Найти минимум из трех чисел а, b, с
#include < iostream.h>
void main(void)
{
float a, b, c, min;
cout << ² введите 3 числа: ²;
cin >> a >> b >> c;
if ((a<b) &&(a<c)) min=a;
else if (( b<a) && (b<c)) min=b;
else min = c;
cout << “min = “ << min ;
}
Пример №2 Даны действительные числа х и у . Если оба отрицательны, то каждое значение заменить модулем. Если отрицательно одно из них, то оба увеличить на 0.5. Если оба неотрицательны и ни одно из
них не принадлежит отрезку [0.5, 2], оба значения уменьшить в 10 раз.
#include < iostream.h>
#include < math.h>
void main(void)
{
float x, y ;
cout << “Введите 2 действительных числа :” ;
cin >> x >> y ;
if ((x<0) && (y<0)) { x=fabs(x); y= fabs(y);}
if ((x<0) | | (y<0)) {xx=x+0.5; y=y+0.5;}
if (((x>=0) && (y>=0)) && ((x<0.5) | | (x>2)) && ((y<0.5) | | (y>2)))
{ x=x/10; y=y/10;}
cout <<:x=: <<x<<”y=” << y;
}
Оператор выбора switch.
Оператор позволяет осуществлять множественный выбор. Общая форма оператора:
Switch (выражение)
{
case constant1: оператор1; break;
case constant2: оператор2; break;
. . .