- •Лекция 4 Операции и выражения
- •Понятие выражения и операции
- •Классификация операций
- •Приоритеты (ранги) операций
- •Арифметические операции
- •Примеры использования арифметических операций Выделение цифр в целом числе
- •Выделение цифр в вещественном числе
- •Арифметические операции над переменными символьного типа
- •Операции инкремента и декремента
- •Особенности выполнения операций инкремента и декремента
- •Операции присваивания
- •Примеры использования
- •Операции отношения
- •Логические операции
- •Особенности выполнения логических операций
- •Примеры использования логических операций
- •Логические выражения и примеры их записи
- •Поразрядные логические операции
- •Примеры выполнения поразрядных логических операций:
- •Операции поразрядного сдвига
- •Дополнительные операции Операции доступа к компонентам структурированного объекта
- •Операции доступа к адресуемым компонентам классов
- •Определение размера sizeof
- •Вызов функции ( )
- •Индексация [ ]
- •Операция запятая ,
- •Операция расширения области видимости ::
- •Преобразование типа
- •Правила преобразования типов
- •Примеры преобразования типов
- •2. Особенности преобразования типов int и double:
- •7. Проанализируйте преобразование типов в операторах присваивания:
- •8. Приведение типа в случае использования указателей:
- •9. Преобразование старшего типа к младшему удобно использовать для выделения отдельных частей переменной или константы:
- •10. С помощью приведения типа можно получить дробную часть числа:
- •Программирование вычисления алгебраических выражений
- •Определение первого символа вводимого значения
- •Контроль правильности ввода значения переменной
- •Основные встроенные (стандартные) функции
- •Пример вычисления по формуле
- •Замечания по программированию алгебраических выражений
- •Особенности представления чисел по двоичному основанию*
- •Особенности выполнения арифметических операций над вещественными числами*
- •Операции умножения и деления
- •Операции сложения и вычитания
- •Особые ситуации Ошибки округления
- •Ошибки переполнения
- •Потеря (исчезновение) порядка
- •Катастрофическая потеря порядка
- •Потеря значащих цифр
- •Особенности выполнения операций отношения (сравнения)
- •Обратить внимание
- •Правила работы с данными вещественных типов
Арифметические операции
знак операции |
действие (операнды целые и вещественные, результат - в соответствии с типом операндов) |
- + |
изменение/сохранение знака (унарные) |
+ |
сложение |
- |
вычитание |
* |
умножение |
/ |
деление (если применяется к целочисленным операндам – целочисленное деление с отбрасыванием остатка: 5/2 = 2;) |
% |
деление по модулю (остаток целочисленного деления: 14%3 = 2;) |
знак операции |
п
Операции
одинакового приоритета выполняются:
Для изменения
порядка выполнения операций
используются (
) |
унарные + - |
высший |
* / % |
|
+ - |
низший |
Примеры арифметических операций:
5/4=1; 5/2=2; 2/5=0; 6/3=2; 7/4=1; 7./4.=1.75; 7./4=1.75;
5%4=1; 2%5=2; 5%2=1; 5%0 = ошибка деления
13%4 = 1; (-13)%4 = -1;
13%(-4) = 1; (-13)%(-4)=-1;
При ненулевом делителе всегда выполняется соотношение:
(a/b)*b + a%b равно a.
Операция нахождения остатка целочисленного деления:
#include <iostream>
#include <conio.h>
using namespace std;
int main() {
cout << 6 % 8 << endl // 6
проверка
числа A
на кратность числу k:
if
(A%k
==0)…
или if
(!(A%k))…
<< 8 % 8 << endl // 0
<< 9 % 8 << endl // 1
<< 10 % 8 << endl; // 2
_getch();
return 0;
}
Вычисление арифметических выражений
ix= -3+4*5-6; printf (“%d \n”, ix); |
((-3) + (4*5))-6=11 |
ix= -3+4%5-6; printf (“%d \n”, ix); |
(3+(4%5))-6=1 |
ix= -3*4%-6/5; printf (“%d \n”, ix); |
((-3)*4)%(-6)/5=0 |
ix= (7+6)%5/2 ; printf (“%d \n”, ix); |
((13))%5/2=1 |
Примеры использования арифметических операций Выделение цифр в целом числе
Операции целочисленного деления и нахождения остатка целочисленного деления применяются при необходимости выделения цифр целого числа.
Например, дано четырехзначное натуральное n (abcd). Верно ли, что это число содержит более двух одинаковых цифр?
#include <stdio.h>
#include <conio.h>
int main(){
int n, a, b, c, d;
printf ("input n(abcd):\n");
scanf ("%i", &n);
d = n % 10;
c = n / 10 % 10;
b = n / 100 % 10;
a = n / 1000;
if (int(a == b)+int(a == c)+ int(a==d)+ int(b==c)+ int(b==d)+ int(c==d) > 1 ) printf ("> 2\n");
else printf ("<=2\n");
_getch();
return 0;
}
Выделение цифр в вещественном числе
Операции целочисленного деления и нахождения остатка целочисленного деления применяются при необходимости выделения цифр дробной части вещественного числа.
Например, определить, есть ли среди первых двух цифр дробной части заданного положительного вещественного числа x=ab.cd, цифра 7.
#include <stdio.h>
#include <conio.h>
int main()
{double x;
int ix, c, d;
printf (" input x(ab.cd):\n");
scanf ("%lf", &x);
ix= static_cast<int>(x*100); //приведение типа double к int
d = ix % 10;
c = ix /10 % 10;
if ((c==7) || (d==7))
printf ("yes\n");
else printf ("no\n");
_getch();
return 0;
}