Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции Си_ppt_Типы Операции Операторы_2012

.pdf
Скачиваний:
11
Добавлен:
02.06.2015
Размер:
739.89 Кб
Скачать

Лексемы языка

Имена (идентификаторы - 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; //

Каждая Оп имеет приоритет: * вып-ся раньше, чем + , если нет скобок.

Унарные Оп имеют более высокий приоритет, чем бинарные !