Лекции Си_ppt_Типы Операции Операторы_2012
.pdfЛексемы языка
Имена (идентификаторы - Summa, X1),
Ключевые слова ( if for do while … ),
Знаки операций ( + - >> ++ * / % … ),
Константы ( -127 3.1415 “text” ‘A’ ),
Разделители:
скобки, точка, запятая, пробельные Симв
Пример: лексемы
приобъявлении переменных
|
|
Операция |
Ключ слово |
Имена |
|
|
|
const |
|
|
|
|
float |
sum, x, y = 13.6 ; // |
Разделители лексем
18
Идентификатор – это имяП –го объекта,
для имен используются:
Латинские буквы и знак ‘_’ (начало имени),
Цифры: 0, 1, 2, …,9 ,
Прописные и строчные буквы – это разные символы в именах !
Примеры: x1, X1, _dd, Ivan_Petrovich;
Имена должны иметь смысл и отражать Объект: sin(x), M_PI ;
Длина имени (ВС++ 3.1) – 32 симв разл-ся
Имя не должно совпадать с Ключ словами
19
Ключевые слова – это зарезерв-е Имена, кот. имеютспециальное значение для Комп-ра:
char const if else int double static и др.
Знаки операций(ЗнОпер) – это один или более символов, определ-х действие над Операндами
Операции делятся на унарные ( – 3 ), бинарные ( x + 4 ) и тернарную ( ? : ) по кол-ву операндов в операции;
ВсеЗнОпер, кроме ( ), [ ], { } и ? : - отдельные лексемы
20
Константы
Конс- |
Тип |
|
Пам, |
Примеры |
Диапазон, |
танта |
|
|
байт |
констант |
пояснение |
Целая |
int |
|
2 |
127 |
-215, 215 -1 |
|
-1024 |
целые числа |
|||
|
|
|
|
||
|
lоng |
|
4 |
123456789 |
-231, 231 -1 |
|
|
-987654 |
целые числа |
||
|
|
|
|
||
Вещест- |
float |
|
4 |
2.5 -3. |
3.4е-38…3.4е+38 |
венная |
double |
|
8 |
1.3e-12 |
1.7е-308… |
Cимво- |
сhar |
|
|
|
1.7е+308 |
|
1 |
‘A’ ‘+’ ‘\n’ |
0…255 |
||
льная |
|
|
|
“string\n” |
|
Строк-ая |
|
|
|
21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Послед-сти Симв, начинающиесяс ‘\’,
наз-ся управляющими, примеры:
\a – звуковой сигнал ( 7 – 16-ый код),
\n – перевод строки ( А ),
\t – горизонтальная табуляция ( 9 ), \\ – обратная косая черта ( 5С ), \’ – апостроф ( 27 ), \” – кавычка ( 22 ),
\? – вопросительный знак ( 3F ), \0ddd – 8-ый код символа, \0xdd – 16-ый код символа
22
Понятие типав АЯз П-я
Тип определяет:
Множество различных значений,
Набор Операций, которые можно применить к значениям данного типа,
Формат внутреннего представления переменной в памяти К,
Объем ОП для размещениязначения данного типа.
Для каждого типаестьспецификация
ADT(абстрактныйтипД ), определяющая
Данныеи Операции, допустимые над Д этого типа !
23
Тип Д – основа К-ой обработки Д
Целое число 25 |
Тип int |
|
|
0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1
В Памяти К 2 байта = 16
бит
24
Пример ADT int в С++
Данные: целое число N со знаком (описание структуры Д)
Операции: пусть U и V целые выражения, N – целая ~ -я.
Присваивание
=N = U Присваивает значение выр-я U ~ -ой N
Бинарные арифм-е Операции
+U + V Сложение
– … …
*
/
%U % V Остаток от деления целых чисел
25
Унарные арифм-е Операции
––U Изменение знака
+ |
+U Тоже, чтои U |
Операцииотношения
(Выражения отношения – это истинность заданного условия)
==U == V Рез-т TRUE, если U эквив-но V
!= |
… |
Рез-т TRUE, если U не эквив-но V |
|
< |
… |
… |
|
<= |
|
Заполнить как ДомЗадание |
|
> |
|
|
|
>= |
|
|
|
Конец ADT int
26
Спецификация Операции (функции)
Integer Division (целочисленное деление)
Вход: Два целых значения U и V (Д от Клиента)
Предусловие: Знаменатель U не может быть равен 0
(необходимое состояние системы перед выпол-ем Оп)
Процесс: Разделить U на V (Оп Integer Division ) ( действие, выполняемое с Д )
Выход: Значение частного (Д, возвращаемые Клиенту)
Постусловие: Возникает условие ошибки, если V = 0 (состояние системы после выполнения Оп)
27
Переменная в Пимеет:
имя тип размер значение адрес
k |
int 2 байта |
13 |
7D3A |
||
|
|
int k = 13; |
|
|
|
|
|
- 215 < k < 215-1 |
|
|
|
float |
x = 3.333; |
|
|
|
int k;
k = x; // k = 3 - целое, дроб. часть
k = 1 / 3; // k = 0, почему ?
13
13.10.2011
Д хранятсяв Осн Памяти К !
Понимать Операции и Память К !
|
Адрес |
Память |
|
Имя |
||
|
|
|
|
|
|
|
|
2000 |
|
|
|
|
|
|
|
0 0 0 0 0 0 0 0 |
|
k |
|
|
|
2001 |
|
0 0 0 0 1 1 0 1 |
|
|
|
|
|
|
|
|||
|
2002 |
|
Имя связано |
|||
|
2003 |
|
с определенным |
|||
|
2004 |
|
участком Пам |
2000 – адрес 1-го байта k (&k) 14
13.10.2011
Символьный тип char |
‘F’ |
char c1, c2 = 65, c3 = ‘A’;
//65 – ASCII-код символа ‘A’, поэтому
//символы с2 и с3 равны
с1 = с2 + 1; // c1 – получил значение ‘B’ // Символы кодир-ся целыми числами 0..255
Для типа char можно использовать операции типа int, на практике чаще используются
Операции отношения в условных операторах: if(ch == ‘k’) , то выполнить действие
15
13.10.2011
Модификаторытипа
Язык Си позволяет изменять в П диапазон значений ~ -ых типов int и char c использ- ем модификаторов:
unsigned int K; //или unsigned K; 0 . . 65 535
unsigned char ch; // 0 <= ch< 256
long int L; // или long L; Пам 4 байта
unsigned long L; // 0 . . 4 292 967 265
16
13.10.2011
Вещественные типы float и double
Вещ-е числа хранятся в памяти К в экспоненц-ом формате: -2.123Е+5, -2.123 – мантисса, +5 - порядок
|
|
|
порядок |
знак |
|
мантисса |
|
|
|
|
|
|
|
|
|
|
|
|
|
8 бит |
23 |
бита |
6-7 знаков |
|
||
|
11 бит |
52 |
бита |
14-15 знаков |
|
|||
|
double, 8 байт |
float, 4 байта |
|
Машинные числа – это дискретные точки на
числовой оси:
17
13.10.2011
Операции с вещ-ми числами:
•присваивания,
•бинарные арифм-е,
•унарные арифм-е,
•операции отношения.
Операция == может выполняться неправильно: 1.0000… – результат одного выраж-я, 0.9999… – результат другого выраж-я.
Пример некорректного Оператора if:
float x, y;
x = sqrt( 1.3 ); // 1.3*1.3 = 1.69
y = pow( 1.69, 0.25 ); |
|
if (x == y) z = fun( x ); |
// ??? |
18
Операцииязыка Си
Выражение в Си – это допустимая комбинация ~-ых, констант и Операций: z = a +x*3;
Допустимо смешение типов, происх. автом-е
(неявное) приведение типов: в бинарной Оп «младший» тип приводится к старшему. Пример:
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; // или 2.0 * х;
2
19
Рост старшинства – от целого типа к вещест-му
и с увеличением размераПам:
char int long float double
Пример: float a, x = 1.5, y = -2.4;
1.0 из int во float a = x + y*sin( x+1 / (x+y));
8 |
7 |
6 5 |
4 23 |
1 |
ПорядоквыполненияОп !
Правила использования Оп
•Для Оп определено кол-во Оп-ов (1, 2 или 3);
•Каждая Оп может иметь только опред-е типы Оп-ов
(Операндов);
•Каждая Оп имеет ассоциативность – направление вып-я: или , примеры:
z = a + b +c; // z = a = b = 0; //
•Каждая Оп имеет приоритет: * вып-ся раньше, чем + , если нет скобок.
•Унарные Оп имеют более высокий приоритет, чем бинарные !