Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по информатике / Раздел07(Структуры и типы данных языка программирования).doc
Скачиваний:
133
Добавлен:
09.05.2015
Размер:
418.3 Кб
Скачать

Элементы данных языка программирования си.

ДАННЫЕ – это значения, которые могут задаваться объектам программы и использоваться при ее выполнении.

По организации различают скаляры (одиночные значения): переменные, константы и указатели, и совокупности: массивы, структуры и файлы.

Элемент данных имеет тип и изображение. ТИП – множество допустимых значений элемента данных и множество операций над ними. Элементом данных какого-либо типа является переменная или константа.

    1. Константы

Константами называют неизменяемые величины. Компилятор, выделив константу в качестве лексемы, относит ее к одному из типов по ее внешнему виду, т.е. тип константы определяется ее изображением

Тип

константы

Формат

Размер

Примеры

Целая

Десятичный: последовательность десятичных цифр, начинающаяся не с нуля, если это число не ноль.

2(4)

8, 0, 2345

Восьмеричный: нуль, за которым следуют восьмеричные цифры (0,1,2,3,4,5,6,7)

2(4)

01, 00, 066, 07654

Шестнадцатеричный: 0х или 0Х, за которым следуют шестнадцатеричные цифры (0,1,2,3,4,5,6,7, 8,9, A, B, C, D, E, F)

2(4)

0xA3, 0x1B5, 0X0FF,

0x12345

Тип

константы

Формат

Размер

Примеры

Вещественная

Десятичный:

[ цифры ] . [ цифры ]

могут быть опущены либо целая, либо дробная части, но не обе сразу .

8

8.8146

0.567, 23.

Экспоненциальный:

[ цифры ].[ цифры ]{E|e}[цифры]

могут быть опущены либо целая, либо дробная части, но не обе сразу. Если указаны обе части символ точки обязателен.

8

0.1E7,

0.1e+7

0.1E–7

.11e–7

1E10

Пробелы внутри числа не допустимы!

Тип

константы

Формат

Размер

Примеры

Символьная

Один символ, заключенный в апострофы

1

‘A’, ‘a’, ‘*’, ‘ ’

Два символа, заключенных в апострофы

Первый символ размещается в байте с меньшим адресом.

2

‘\n’, ‘\a’, ‘\012’, ‘\’’

Символ косой обратной черты используют для представления:

  • управляющих последовательностей символов, не имеющих графического изображения;

  • символов: ' , \ , ? , “ ;

  • любого символа с помощью его шестнадцатеричного или восьмеричного кода. Числовое значение должно находиться в диапазоне от 0 до 255.

Пустая символьная константа не допустима.

Тип

константы

Формат

Размер

Примеры

Строковая

последовательность символов, заключенная в кавычки

кол-во символов+

+1 байт

“Ура!”

“\t Значение R=\0xF5 \n”

В конец каждой строковой константы компилятором добавляется нулевой символ, представляемый управляющей последовательностью \0. Поэтому длина строки всегда на 1 больше количества символов в ней. Поэтому пустая строка имеет длину в 1 байт!

Обратите внимание на разницу между строкой символов “A” и символом 'A'.

Управляющие последовательности могут встречаться и в строковых константах.

Например:

“Челябинский завод \“ Теплоприбор \” ”

Переменные

Тип константы определяется ее изображением. Для переменной необходима специальная конструкция языка – ОПИСАНИЕ.

ВСЕ ПЕРЕМЕННЫЕ В ЯЗЫКЕ Си ДОЛЖНЫ БЫТЬ ОБЪЯВЛЕНЫ!

Любители Бейсика, забудьте о том, чтобы использовать большую кучу переменных без объявления! В принципе, объявлять переменные до их использования – это просто правило хорошего тона. Кроме того, оно позволяет компилятору разделить типы, переменные и функции.

В языке различают понятия описания переменной и ее определения (объявления). Описание устанавливает свойства объекта: его шаг (целый), размер (4 байта). Объявление наряду с этим вызывает выделение памяти.

Формат:

<описание>:= [модификатор_типа] <тип_переменной> <список>

<список>:= <имя_переменной> [= начальное значение, …, имя_переменной [= начальное_значение]... ];

ВНИМАНИЕ! Все переменные должны быть описаны до их использования (по описаниям выделяется память для них).

Базовые типы данных Си

  • Целые

Тип – integer, в программе int.

Размер переменной типа int может быть 16 или 32 бита.

Пример: описание переменных

int i=0, kol=5, hod;

Тип

Размер

Диапазон значений

int

2

-32768 …+32768

int

4

-2147483648 …+2147483647

Объекты некоторого базового типа могут быть модифицированы. С этой целью используются специальные ключевые слова – модификаторы.

Рассмотрим 4 из них: unsignet, signet, short, long. Модификатор записывается перед спецификацией. Если после модификатора опущен спецификатор, то он int (long int Along A).

Модификаторы типа:

short – Явно указывает компилятору, что под данную переменную необходимо отвести 2 байта, независимо от разрядности платформы.

long – Явно указывает компилятору, что под данную переменную необходимо отвести 4 байта, независимо от разрядности платформы.

signed – Указывает компилятору, что данная переменная является знаковой (то есть может принимать как положительные, так и отрицательные значения).

unsigned –Указывает компилятору, что данная переменная является беззнаковой (то есть может принимать только положительные значения).

Каждый из целочисленных типов может быть определен либо как знаковый –signed, либо как беззнаковый –unsigned (по умолчанию любой целый тип определен как signed).

Различие между двумя типами – в правилах интерпретации старшего бита внутреннего представления. Модификатор signed требует, чтобы старший бит внутреннего представления воспринимался как знаковый; unsigned означает, что старший бит внутреннего представления входит в код представляемого числового значения, которое считается в этом случае беззнаковым. Выбор знакового или беззнакового представления определяет диапазон представляемых значений для переменной целого типа.

Пример unsigned  [0, 65535]

signed int (signed) ,–32768 до 32768

Что бы глубже понять различие между целой величиной и целой величиной без знака, следует обратить внимание на результат выполнения унарной операции «–» (минус) над этими величинами.

Пример: int k = 16; unsigned b = 16;

–k = –16 –b = 65520

Модификатор long вызывает увеличение в два раза области ОЗУ, выделенной под переменную типа int.

/ short int | int | long int \

\ short | | long /

Типы

short int, long int, signed int, unsigned int

разрешается сокращать соответственно до

short, long, signed, unsigned.

В общем случае:

объект (short) <= объект (int) <= объект (long)

IBM PC

байты

диапазон

short

2

от –32768 до 32767

int

2

long

4

( –2147483648 … 2147483647 )

Тип int по умолчанию является знаковым.

РЕКОМЕНДАЦИЯ. short не употреблять.

Пример: описание переменных

int i, kol;

short low, high;

long max;

  • Данные с плавающей точкой

Существуют три описания для действительных чисел, отличающихся размером выделяемой памяти и точностью представления

float 4 байт 6…7 десятичных цифр

double 8 байт 16 … …

long double 10 байт 16 … …

Все КОНСТАНТЫ имеют тип double!

float step_x=0.01, step_y=0.5;

double koord_x, koord_y;

IBM PC

байты

диапазон

float

4

3.4e–38<|x|<3.4e38

double

8

1.7e–308<|x|<1.7e308

long double

10

1e–3000<|x|<1e3000(приблизительно)

  • Символы (знаки)

Для переменных символьного типа используют служебное слово char (character). Длина переменной – 1 байт. Диапазон значений [–128, 127].

Обратите внимание: тип char может являться как знаковым, так и беззнаковым, в зависимости от конкретного компилятора. Т.е. переменные типа char так же могут быть модифицированы с использованием модификаторов unsigned / signed. Поэтому, чтобы быть уверенным в допустимых значениях, используйте типы signed char и unsigned char.

Пример: char array_name, step;

  • Логические данные

В Си нет. Замена – целые. 0  false, (НЕ)0  true

Указатели

Указатели (ссылки) – это переменные, показывающие место или адрес памяти, где расположены другие объекты (переменные, функции и т.п.). Т.к. указатель содержит адрес некоторого объекта, то через него можно обращаться к этому объекту.

Почему я в последнем случае написала «переменную», а не «значение переменной»? Потому что это выражение (*p) может стоять как в правой части оператора присваивания (будет возвращено значение, хранящееся в памяти по адресу p), так и в левой части оператора присваивания (в память по этому адресу запишется значение). Выражения, обладающие такими свойствами, называют L-выражениями (L-Value).

У такого выражения есть АДРЕС, ТИП и, разумеется, ЗНАЧЕНИЕ. Но у него нет ИМЕНИ И нет ОБЛАСТИ ВИДИМОСТИ.

Формат: описания переменной указателя

<тип> *<имя> [,*<имя>]...;

Объекты, состоящие из знака* и адреса необходимо объявлять!

Объявление вида: char *d; говорит о том, что значение, записанное по адресу d, имеет тип char.