- •Лабораторная работа №2. Программная реализация алгоритмов линейной структуры
- •3.1. Порядок выполнения работы
- •3.2. Общие сведения
- •Целочисленные типы
- •Типы с плавающей точкой
- •Имена данных
- •Константы
- •Приоритет и порядок вычислений
- •Операции отношений
- •Математические библиотечные функции
- •Ввод и вывод информации
- •Форматированный вывод данных
- •Форматированный ввод данных
- •3.3 Варианты заданий
Приоритет и порядок вычислений
Приоритет представляет собой основное правило определения порядка вычисления выражений.
Операции + и - имеют одинаковое старшинство, которое младше одинакового уровня старшинства операций *, / и %, которые в свою очередь младше унарного минуса. Арифметические операции группируются слева направо.
Приоритет арифметических операций показан в таблице 3.5.
Таблица 3.5 – Операции в порядке уменьшения приоритета
-
Операция
Порядок вычислений
( )
Слева направо
- (унарный)
Справа налево
* ./
Слева направо
+ -
Слева направо
= (присваивание)
Справа налево
Например, в нижеприведенных выражениях цифрами показана последовательность выполнения операций
a * b – c /d * f + g +h
1 4 2 3 5 6
скобки меняют последовательность выполнения операций:
a * b – ( c / (d * f ) + g )+h
4 5 2 1 3 6
ПРЕОБРАЗОВАНИЯ ТИПОВ ПРИ ВЫПОЛНЕНИИ ОПЕРАЦИЙ
Если в бинарной операции участвуют операнды различных типов, то перед выполнением операции "низший" тип преобразуется к "высшему", и получается результат "высшего" типа. Более точно, к каждой арифметической операции применяется следующая последовательность правил преобразования.
Типы char и short преобразуются в int, а float в double.
Если один из операндов имеет тип double, то другой преобразуется в double, и результат имеет тип double.
Если один из операндов имеет тип long, то другой преобразуется в long, и результат имеет тип long.
Все переменные типа float в выражениях преобразуются в double; в языке C++ вся плавающая арифметика выполняется с двойной точностью.
ОПЕРАТОР ПРИСВАИВАИВАНИЯ =
Имеет вид:
ПЕРЕМЕННАЯ = ВЫРАЖЕНИЕ;
Присваивает значение выражения справа от знака операции = переменной слева от знака.
Например:
a = b* c /f +k;
Переменной а присваивается результат вычисления выражения, записанного справа.
Допускается множественное присваивание, например:
a = b = c = d = 1;
Операторы присваивания, в которых и в левой и в правой частях встречается одно и то же имя переменной, например:
a = a + b;
d = d * m;
x = x / y;
могут быть записаны короче:
a + =b;
d * =m;
x / = y;
Эти записи не только короче, но и больше соответствуют человеческому мышлению, так как мы говорим: “увеличить переменную а на величину переменной b”.
Преобразования возникают и при присваиваниях: значение правой части преобразуется к типу левой, который и является типом результата. Символьные переменные преобразуются в целые либо со знаковым расширением, либо без него, как описано выше. Обратное преобразование int в char ведет себя хорошо - лишние биты высокого порядка просто отбрасываются. Таким образом
int i;
char c;
i = c;
c = i;
значение 'с' не изменяется. Это верно независимо от того, вовлекается ли знаковое расширение или нет.
Если х типа float, а i типа int, то как
х = i;
так и
i = х;
приводят к преобразованиям; при этом float преобразуется в int отбрасыванием дробной части. Тип double преобразуется во float округлением. Длинные целые преобразуются в более короткие целые и в переменные типа char посредством отбрасывания лишних битов высокого порядка.
ОПЕРАЦИИ УВЕЛИЧЕНИЯ И УМЕНЬШЕНИЯ
В языке C++ предусмотрены две необычные операции для увеличения и уменьшения значений переменных. Операция увеличения ++ (инкремент) добавляет 1 к своему операнду, а операция уменьшения – (декремент) вычитает 1.
Необычный аспект заключается в том, что ++ и -- можно использовать либо как префиксные операции (перед переменной, как в ++n), либо как постфиксные (после переменной: n++). Эффект в обоих случаях состоит в увеличении n. Но выражение ++n увеличивает переменную n до использования ее значения, в то время как n++ увеличивает переменную n после того, как ее значение было использовано. Это означает, что в контексте, где используется значение переменной, а не только эффект увеличения, использование ++n и n++ приводит к разным результатам. Если n = 5, то
х = n++;
устанавливает х равным 5, а
х = ++n;
полагает х равным 6. В обоих случаях n становится равным 6. Операции увеличения и уменьшения можно применять только к переменным; выражения типа х=(i+j)++ являются незаконными. В случаях, где нужен только эффект увеличения, а само значение не используется, как, например, в
n++;
выбор префиксной или постфиксной операции является делом вкуса, но встречаются ситуации, где нужно использовать именно ту или другую операцию.
