Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_СП_2004_1_00.doc
Скачиваний:
69
Добавлен:
04.11.2018
Размер:
882.69 Кб
Скачать

Лекция 2

Понятие типа данных. Переменные и константы. Основные типы данных в языке Си: общая характеристика, машинное представление, описание данных в программе. Числовые, символьные и строковые константы. Арифметические операции и арифметические выражения. Операции отношения, логические операции и логические выражения. Условная операция. Автоматическое преобразование типов и операция приведения. Простейшие операторы языка Си. Составной оператор.

1. Понятие типа данных. Переменные и константы. Операция присваивания

Всякая программа, предназначенная для реализации на ЭВМ, представляет собой формализованное описание алгоритма решения той или иной задачи. Действия, выполняемые программой в соответствии с этим алгоритмом, направлены на преобразование некоторых объектов, определяющих текущее состояние процесса решения задачи. Такие внутренние объекты программы принято называть данными. Для хранения всякого элемента данных исполняющая система выделяет необходимое пространство в оперативной памяти ЭВМ, размер которого мы будем называть

длиной этого элемента. Важнейшей характеристикой любого элемента данных является его тип. Понятие типа включает в себя следующую информацию об элементе данных:

- допустимый набор значений, которые объект этого типа может принимать в процессе работы программы (совокупность всех указанных значений мы будем называть областью определения типа);

- состав операций, которые разрешено выполнять над объектами данного типа;

- способ представления элемента данных рассматриваемого типа в памяти машины;

- правила выполнения всякой операции из допустимого для этого типа набора операций.

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

- целые числа различной длины со знаком и без;

- вещественные числа различной длины;

- символы, представимые в формате стандарта ASCII.

Те элементы данных, которые сохраняют неизменные значения на протяжении всего времени работы программы, принято называть константами. Другие же объекты, являющиеся предметом изменения в ходе выполнения алгоритма, называют переменными. С точки зрения языка Си, всякая переменная величина отождествляется с ее именем, или идентификатором. С позиции же ЭВМ, она рассматривается как изменяющееся во времени содержимое некоторой области оперативной памяти. Инструкция языка программирования, позволяющая назначать и изменять значения переменных, носит название операции присваивания. Для его обозначения в Си используется символ "=". Например:

a = 2; b = 3*(a+4);

После выполнения указанных действий переменная a принимает значение, равное 2, а переменная b - значение 18.

2.Типы данных в языке си. Описание данных в программе

Как уже говорилось в Лекции 1, описания в языке Си - это строки программы, определяющие имена и характеристики элементов данных, участвующих в работе алгоритма. В простейшем случае инструкция описания данных в Си-программе имеет следующий формат:

<sc-specifier> type-specifier identifier <, identifier ...>;

где sc-specifier есть описатель класса памяти (см. Лекцию 7, $ 2);

type-specifier - описатель типа; identifier - имя (идентификатор) переменной.

Для большинства компиляторов с языка Си допустимыми являются описатели типа, приводимые в следующей таблице. Здесь же в круглых скобках указана длина элемента данных каждого типа в байтах (1 байт = 8 бит) и область допустимых значений для персонального компьютера IBM PC AT.

Тип

Семантика и длина

Диапазон

char

Символьная со знаком (1)

от -128 до 127

int

Целая (2)

от -32768 до 32767

short

Короткая целая(2)

от -32768 до 32767

long

Длинная целая (4)

от -2147483648 до 2147483647

unsigned char

Символьная без знака (1)

от 0 до 255

unsigned

Целая без знака(2)

от 0 до 65535

unsigned short

Короткая целая без знака (2)

от 0 до 65535

unsigned long

Длинная целая без знака (4)

от 0 до 4294967297

float

Вещественная (4)

|x| >= 1.0E-38

|x| <= 1.0E+38

double

Вещественная двойной точности (8)

|x| >= 1.0E-308

|x| <= 1.0E+308

Замечание. Ключевые слова unsigned, signed, short и long могут быть использованы как модификаторы основных типов данных при построении производных. Например, следующие описания рассматриваются компилятором как эквивалентные:

short int .................. short

long int ................... long

unsigned int ............... unsigned

unsigned short int ......... unsigned short

unsigned long int .......... unsigned long

signed char ................ char

signed int ................. int

signed short ............... short

signed long ................ long

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

int a, b, c; /* Переменные a, b, c об'явлены */

/* имеющими тип int */

float alpha, beta; /* Переменные alpha и beta об'явлены */

/* имеющими тип float */

Поскольку внутренние машинные представления данных одних и тех же типов для различных ЭВМ могут быть различными, то возникают определенные трудности при необходимости обеспечить надлежащую мобильность программного обеспечения. Так, например, всякая переменная типа int на машинах IBM PC AT занимает два байта памяти, в то время как для ее представления на ЭВМ VAX-11 требуется четыре байта.

Подобные различие могут привести к неправильной работе программ, манипулирующих, например, битовыми цепочками или требующих динамического выделения памяти для хранения переменных. Преодолеть возникающие при этом трудности можно, используя, где это необходимо, операцию определения количества памяти, требуемой для представления некоторой переменной или какого-либо типа. В общем случае эта операция выглядит следующим образом:

sizeof(name)

где name есть либо идентификатор переменной, либо имя типа данных. В следующем примере

a = sizeof(int);

переменная a принимает значение, равное количеству байт памяти, требуемых для представления любой величины типа int, на конкретной ЭВМ.