Лекции по проге / 02_Операции и выражения (1)
.pdf
Не пишите выражения, которые вам трудно понять!
x = (a++) - 4; x += а % b;
можно записать так:
x = a – 4; a++;
x = x + a % b;
21
Операции отношения
|
|
возвращает ИС ТИНА, если значение слева больше |
> |
var1 > var2 |
значения справа: 3 > 5 будет ЛО Ж Ь , 3 > 1 будет ИС ТИНА, |
|
|
3 > 3 будет ЛО Ж Ь |
|
|
|
|
|
возвращает ИС ТИНА, если значение слева больше |
>= |
var1 >= var2 |
значения справа или равно ему: 3 >= 5 результат ЛО Ж Ь ; 3 |
|
|
>= 1 результат ИС ТИНА; 3 >= 3 результат ИС ТИНА |
|
|
|
|
|
возвращает ИС ТИНА, если значение слева меньше |
<var1 < var2 значения справа: 3 < 5 результат ИС ТИНА; 3 < 1
|
|
результат ЛО Ж Ь ; 3 < 3 результат ЛО Ж Ь |
|
|
значения справа или равно ему: 3 <= 5 результат |
<= |
var1 <= var2 |
ИС ТИНА; 3 <= 1 результат ЛО Ж Ь ; 3 <= 3 результат |
|
|
ИС ТИНА |
|
|
возвращает ИС ТИНА, если значение слева равно |
== |
var1 == var2 |
значению справа: 3 = = 5 результат ЛО Ж Ь ; 3 = = 3 |
|
|
результат ИС ТИНА |
22
Операции отношения для вещественных типов данных
Вследствие вычислений возможна потеря или искажение младших разрядов вещественного числа:
float pi = 3.14159; float a = asin(1.0);
2*a == pi; // результат ЛОЖЬ, т.к.
//3.1415927410125732 != 3.14159
Вещественные значения необходимо сравнивать с заданной погрешностью:
abs(2*a — pi) < 0.0001;
/* Результат = ИСТИНА, сравнение с точностью до 23 4-го знака 0.0000026226044 < 0.0001 */
Логические операции
! |
!var1 |
логическое отрицание: !0 результат ИСТИНА; !2 результат |
|
ЛОЖЬ |
|||
|
|
||
|
|
|
|
&& |
var1 && var2 |
логическое И: 1 && 1 результат ИСТИНА; 2 && 0 результат |
|
ЛОЖЬ |
|||
|
|
|
|
|| |
var1 || var2 |
логическое ИЛИ: 1 || 1 результат ИСТИНА; 2 || 0 результат |
|
ИСТИНА; 0 || 0 результат ЛОЖЬ |
|||
|
|
|
24
Операции присваивания
переменной слева присваивается значение справа: var = 5
=var1 = var2 результат 5; возможно многократное присваивание,
|
|
которое выполняется справа-налево: var1 = var2 = 5 |
|
|
|
|
|
*= |
var1 *= var2 |
умножает значение переменной, указанной слева, на |
|
значение указанное справа: var = 5, var *= 2 результат 10 |
|||
|
|
||
|
|
|
|
/= |
var1 /= var2 |
делит значение переменной, указанной слева, на значение, |
|
указанное справа: var = 6, var /= 2 результат 3 |
|||
|
|
||
|
|
|
|
+= |
var1 += var2 |
добавляет значение, указанное справа, к значению |
|
переменной, указанной слева: var = 6, var += 2 результат 8 |
|||
|
|
||
|
|
|
|
–= |
var1 –= var2 |
отнимает от значение переменной, указанной слева, |
|
значение, указанное справа: var = 6, var –= 2 результат 4 |
|||
|
|
||
|
|
|
|
|
|
присваивает переменной, указанной слева, остаток, |
|
%= |
var1 %= var2 |
получаемый в результате деления исходного значения этой |
|
переменной на значение, указанное справа: var = 6, |
|||
|
|
||
|
|
var %= 4 результат 2 |
25
Прочие операции
Условная операция
условная операция – если истинно выражение exp1,
то выполняется выражение exp2, иначе выполняется
? : exp1 ? exp2 : exp3 выражение exp3:
(x > y)? x : y результат максимум двух значений x и y
Вызов функции
|
|
|
|
|
|
|
вызов функции в языке Си считается одной |
|
|
|
из операций, результатом ее является |
|
|
|
возвращаемое значение: |
|
() |
<имя функции>(<параметры>) |
sqrt(4) результат 2.0 |
|
scanf("%d",&x) результат «пустота», но |
||
|
|
|
операция имеет побочный эффект, в |
26 |
|
|
результате которого изменяется |
|
|
переменная x |
Прочие операции
Операция определения размера занимаемой памяти
возвращает размер памяти в байтах, занимаемый sizeof sizeof(var) переменной или типом данных:
sizeof(<тип>) sizeof(short int) результат 2;
short int mass[100], sizeof(mass) результат 200
Операция явного приведения типа
преобразует значения выражения к указанному типу в ходе вычислений; операция не имеет побочных эффектов (т.е.
значение переменной а в примере не изменится): (<тип>)<выражение> (float)2 результат 2.0
(int)a результат целое число, полученное после отбрасывания дробной части у переменной а
27
Преобразование типов в выражениях
Если тип операндов отличается от типа данных, с которыми операция может выполняться, то значения операндов должны быть преобразованы к требуемому типу данных
Пример: выражение
2.5 + 3
не может быть вычислено, т.к. складывать можно только однотипные операнды, следовательно, требуется преобразовать один из операндов
28
Преобразование типов в выражениях
Неявные преобразования – это преобразования, результат которых всегда успешен и не приводит к потере точности данных; автоматически выполняются компилятором
Явные преобразования – это разрешенные преобразования, успех которых не гарантируется или может приводить к потере точности; явно задаются про-
29 граммистом
Неявные преобразования типов в выражениях
char
short int
int
long int
unsigned char
unsigned short int
unsigned int
unsigned long int
float
double
long double
Наличие пути говорит лишь о существовании преобразова- 30 ния, а само преобразование выполняется только один раз
