
Спецификация операции (функции)
Integer Division (целочисленное деление)
Вход: два целых значения U и V (данные от клиента)
Предусловие: знаменатель V не может быть равен 0 (необходимое состояние системы перед выполнение операции)
Процесс: разделить U на V (операция Integer Division) (действие, выполняемое с данными)
Выход: значение частного (данные, возвращаемые клиенту)
Постусловие: возникает условие ошибки, если V=0 (состояние системы после выполнения операции)
Переменная в программе имеет:
-
Имя (k)
-
Тип (int)
-
Размер (2 байта)
-
Значении (13)
-
Адрес в памяти ПК
Int k=13
-215 <= k <= 215-1
Float x=3.3333;
Int k;
K=x; // k=3 – целое число, дробная часть урезается
K=1/3; //k=0 – т.к. целочисленное деление
Данные хранятся в основной памяти ПК
Адрес Память Имя
2000 00000000 K (имя связано с определенным
2001 00001101 участком Памяти)
2000 – адрес 1-го байта k (&k)
Символьный тип char (‘f’)
Char c1, c2=65, c3=’A’; // 65 – ASCII-код символа ‘A’, символы с2 и с3 равны
С1=с2+1 // с1 – получит значение ‘B’, символы кодируются целыми числами 0…255
Для типа char можно использовать операции типа int, на практике используются операции отношений.
Модификаторы типа
Язык СИ позволяет изменять в программе диапазон значений переменных типов int и char с использованием модификаторов:
Unsigned int k; // или unsigned k; 0…65535
Unsigned char ch; //0<=ch<256
Long int L; // или long L; память 4 байта
Unsigned long L; //0…4292967265
Для 32-разрядных ПК тип int и long одинаковы.
Вещественные типы float и double
Вещественные числа хранятся в памяти ПК в экспоненциальном формате:
-2.123Е+5
-2.123 – мантисса
+5 – порядок
Порядок Знак (переносится) Мантисса
8 бит (float 4 байта) 23 бита 6-7 знаков
11 бит (double 8 байт) 52 бита 14-15 знаков
Машинные числа – дискретные точки на числовой оси.
Операции с вещественными числами:
-
Присваивание
-
Бинарные
-
Унарные
-
Операции отношения
== - может выполняться неправильно
1.0000 – результат одного выражения
0.9999 – результат другого
Пример некорректного оператора
Float x, y;
X=sqrt(1.3); //1.69
Y=pow(1.69, 0.25);
If (x==y) z=fun (x)
Операции языка Си
Выражение в Си – допустимая комбинация переменных, констант и операций
Допустимо смешение типов, происходит автоматическое (неявное) приведение типов: в бинарной операции «младший» тип приводится к «старшему»
Пример
Int I;
Float x;
Double z,w;
<ввод I, x, z>
W= 2 * x + (I - z);
Int float int double
Float double
double
// явное преобразование типа W=float(2)*x;
Рост старшинства – от целого типа к вещественному и с увеличением размера памяти
Char - int - long - float - double
Порядок выполнения операций:
A= x + y * sin (x + 1 / (x + y));
8 7 6 5 4 2 3 1
Правила использования операций
-
Для операции определено количество операндов (1, 2, 3)
-
Каждая операция может иметь только определенные типы операндов
-
Каждая операция имеет ассоциативность – направления выполнения при последовательности операций выполнения
-
Каждая операция имеет приоритет (* выполняется раньше +, если нет скобок)
-
Унарные операции имеют более высокий приоритет, чем бинарные
Таблица приоритетов
Операция Ассоциативность
()
[]
++ -- ун+ ун- * & sizeof ~(тип)
* / %
+ -
<< >>
< <= > >= сдвиг влево,вправо
== !=
& логические AND, подразрядные
^ XOR
| OR, отрицание (инверсия)
&& логическое
AND
|| OR
?: операция условие
= += -= *= /= %= != ^= <<= >>=
,
X+=1; // или Х=Х+1, но так медленнее!!!
Приоритет операций
-
Вызов функции и скобки
-
Унарные операции
-
Арифметические (бинарные) операции
-
Операции отношения (сравнения)
-
Логические операции