- •Лекция 4 Операции и выражения
- •Понятие выражения и операции
- •Классификация операций
- •Приоритеты (ранги) операций
- •Арифметические операции
- •Примеры использования арифметических операций Выделение цифр в целом числе
- •Выделение цифр в вещественном числе
- •Арифметические операции над переменными символьного типа
- •Операции инкремента и декремента
- •Особенности выполнения операций инкремента и декремента
- •Операции присваивания
- •Примеры использования
- •Операции отношения
- •Логические операции
- •Особенности выполнения логических операций
- •Примеры использования логических операций
- •Логические выражения и примеры их записи
- •Поразрядные логические операции
- •Примеры выполнения поразрядных логических операций:
- •Операции поразрядного сдвига
- •Дополнительные операции Операции доступа к компонентам структурированного объекта
- •Операции доступа к адресуемым компонентам классов
- •Определение размера sizeof
- •Вызов функции ( )
- •Индексация [ ]
- •Операция запятая ,
- •Операция расширения области видимости ::
- •Преобразование типа
- •Правила преобразования типов
- •Примеры преобразования типов
- •2. Особенности преобразования типов int и double:
- •7. Проанализируйте преобразование типов в операторах присваивания:
- •8. Приведение типа в случае использования указателей:
- •9. Преобразование старшего типа к младшему удобно использовать для выделения отдельных частей переменной или константы:
- •10. С помощью приведения типа можно получить дробную часть числа:
- •Программирование вычисления алгебраических выражений
- •Определение первого символа вводимого значения
- •Контроль правильности ввода значения переменной
- •Основные встроенные (стандартные) функции
- •Пример вычисления по формуле
- •Замечания по программированию алгебраических выражений
- •Особенности представления чисел по двоичному основанию*
- •Особенности выполнения арифметических операций над вещественными числами*
- •Операции умножения и деления
- •Операции сложения и вычитания
- •Особые ситуации Ошибки округления
- •Ошибки переполнения
- •Потеря (исчезновение) порядка
- •Катастрофическая потеря порядка
- •Потеря значащих цифр
- •Особенности выполнения операций отношения (сравнения)
- •Обратить внимание
- •Правила работы с данными вещественных типов
Примеры использования
Что напечатает программа:
#define PRINT(x) printf (“%d\n”, x)
int x=2, y, z;
x *=3+2; PRINT(x); |
x= x*5=10 |
x *=y=z=4; PRINT(x); |
z=4 y=4 x=x*y=10*4=40 |
x =y==z; PRINT(x); |
4==4 x=true, напечатает 1 |
x ==(y=z); PRINT(x); |
значение выражения = 0, но x=1 |
#define PRINT printf (“%d\t %d\n”, x, y)
double d=3.2, x;
int i=2, y;
x = (y = d/i)* 2; PRINT(x, y); |
y=1 x= 2 |
y = (x = d/i)* 2; PRINT(x, y); |
x=1.6 y=3 |
y = d * (x = 2.5/d); PRINT(y); |
y=2 |
x =d*(y=((int)2.9+1.1)/d); PRINT(x, y); |
y=0 x=0 |
Операции отношения
Операции используются при формировании условных выражений, используемых в условных операторах и циклах. Результатом операций является логическое значение true (ненулевое значение) или false (нуль). Действие операций соответствует их математическому пониманию. Операции имеют одинаковый приоритет, более низкий, чем арифметические операции, и выполняются в порядке «слева направо». Для изменения порядка выполнения операций применяются ( ).
bool b = 3>=3 == 2; //0 !!!
.
тип |
операция |
примеры |
бинарные |
< <= > >= (приоритет выше) == != (приоритет ниже) |
a != b == c (a != b) == c 1 2 x > y + 2 x > (y+2) |
Пример:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{int numb;
cout << "Enter a number: "; cin >> numb;
cout << "numb<10 = " << (numb < 10) << endl;
cout << "numb>10 = " << (numb > 10) << endl;
cout << "numb==10 = " << (numb == 10) << endl;
_getch();
return 0;
}
Результат вывода:
Enter a number: 1
numb<10 is 1
numb>10 is 0
numb==10 is 0
Enter a number: 10
numb<10 is 0
numb>10 is 0
numb==10 is 1
!!! Обратите внимание, что запись a < b < c не дает синтаксической ошибки, но работает не так, как ожидалось (выполнение слева направо):
(a<b) true или false;
затем результат этого сравнения (1 (true) или 0 (false)) сравнивается с с.
Сравнение трех чисел: z >= y && y >= x
Факт, что x есть большее из чисел x, y, z, запишется так: x >= y && х >= z .
Операции отношения применимы и к переменным типа char. Сравнение ‘a’ < ‘b’ правильное, но сравнение ‘a’ < 5 – ошибочно (разные типы).
Проверить, что символ S является цифрой, позволяет выражение:
(S >= ’0’) && (S <= ’9’).
Проверить, что символ S является латинской буквой, позволяет выражение:
((S >= ’a’) && (S <= ’z’)) || ((S >= ’A’) && (S <= ’Z’))
Чтобы получить значение цифры N через ее символьное представление, необходимо вычислить выражение unsigned(’N’) - unsigned(’0’). Например, unsigned(’9’) - unsigned(’0’) даст в качестве значения 9.
Сравнение строк выполняется посимвольно слева направо, согласно значениям кодов символов.
!!! Обратите внимание, что если int i=44, а int j=24, то запись (i==j) дает значение ложь, а (i=j) дает значение истина. Объясните, почему.