Основные типы данных

Переменные и константы. Типы данных

Ошибки

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

Синтаксические ошибки - нарушение формальных правил написания програм­мы на конкретном языке, обнаруживаются на этапе трансляции и могут быть легко исправлены.

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

Логические ошибки делят на ошибки алгоритма и семантические ошибки - могут быть найдены и исправлены только разработчиком программы.

Причина ошибки алгоритма - несоответствие построенного алгоритма ходу получения конечного результата сформулированной задачи.

Причина семантической ошибки - неправильное понимание смысла (сема­нти­ки) операторов языка.

Программа, содержащая логическую ошибку, может быть запущена. Однако она либо выдает неверный результат, либо даже завершается "аварийно" из-за попытки выполнить недопустимую операцию (например, деление на 0) - в таком случае выдается сообщение об ошибке времени выполнения. Поиск места в программе, содержащего логическую ошибку, является непростой задачей; он носит название отладки программы.


 

Для программиста на языке Си память компьютера представляется как набор ячеек, каждая из которых называется переменной, или константой, в зависимости от того, меняется ее значение в процессе работы или нет. Каждая переменная имеет имя (идентификатор, ID). Константа может иметь или не иметь имени.

Род информации, которую способна хранить ячейка, определяется ее типом.

 

Данные в языке Си разделяются на две категории: простые (скалярные), будем их называть базовыми, и сложные (составные) типы данных.

Тип данных определяет:

•внутреннее представление данных в оперативной памяти;

•совокупность значений (диапазон), которые могут принимать данные этого типа;

•набор операций, которые допустимы над такими данными.

 

Основные типы базовых данных: целый – int, вещественный с одинарной точностью – floatи символьный – char.

В свою очередь, данные целого типа могут быть короткими – short, а также длинными – long и еще более длинными - long long. Кроме того, при любой длине данные целых и символьного типов могут быть знаковыми - signed либо беззнаковыми – unsigned (по умолчанию они считаются знаковыми, поэтому слово signed необязательно и обычно опускается). Вещественные же данные могут иметь удвоенную точность – double или еще большую точность - long double.

В языке С++ введен также логический тип bool.Данные этого типа могут принимать лишь два значения: true (истина) и false (ложь).

 

Сложные типы данных – массивы, структуры – struct, объединения или смеси – union.

 

Данные целых и вещественных типов находятся в определенных диапазонах, т.к. занимают разный объем оперативной памяти. Вещественные типы при этом обладают еще конечной точностью хранения данных, т.е. верно хранят лишь первые несколько цифр числа; для хранения остальных (чье количество бывает даже бесконечным - например, у числа π , или у числа ⅓ ) не хватает места. В Табл. 1. приведены свойства различных типов для системы программирования C++ Builder. В других системах программирования, поддерживающих язык Си, может отличаться размер того или иного конкретного типа, например int, и соответственно будет отличаться его допустимый диапазон значений (например, тип long int может превосходить по размеру тип int). Однако последовательность возрастания размеров и точности для каждой группы типов всегда одинакова:

char ≤ short int ≤ int ≤ long int ≤ long long int

float ≤ double ≤ long double

 

Таблица 1.

Тип данных Размер (байт) Диапазон значений Точность, десятичных знаков
сhar -128 … 127  
unsigned сhar 0 … 255  
short int -215… 215–1 (-32768…32767)  
int -231…231–1 (-2147483648…2147483647)  
long int -231…231–1 (-2147483648…2147483647)  
long long int –263... 263–1 (примерно )  
unsigned short int 0…216–1 (0…65535)  
unsigned int 0…232–1 (0…4294967295)  
unsigned long int 0…232–1 (0…4294967295)  
unsigned long long int 0…264–1 (примерно )  
float ±3,14*10-38…±3,14*1038 7-8
double ±1,7 *10-308… ±1,7 *10308 15-16
long double ± 1,1 * 10-4932… ± 1,1 * 104932 19-20

 

Заметим, что для целочисленных типов данных, чье название содержит слово int и еще какое-либо слово перед ним, слово int можно не писать, и обычно оно опускается (в Табл.1 необязательное int указано мелким шрифтом).

2.2. Декларация (объявление) объектов

Все объекты (переменные, функции и пр.), с которыми работает программа, в языке Си необходимо декларировать, т.е. объявить компилятору об их присутствии в программе. При этом возможны две формы декларации:

- описание, не приводящее к выделению памяти;

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

Кроме констант, которые можно задавать в исходном тексте, все объекты программы должны быть явно декларированы по следующему формату:

<атрибуты> <список ID объектов>;

элементы списка разделяются запятыми, а атрибуты - разделителями. Например: int i,j,k; float a,b;

Объекты программы в общем случае имеют следующие атрибуты:

<класс памяти> - характеристика способа размещения объектов в памяти (статическая, динамическая), определяет область види­мости и время жизни переменной (по умолчанию - auto), данные атрибуты будут рассмотрены позже;

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

Класс памяти и тип – атрибуты необязательные и могут отсутст­во­вать, тогда их значения установятся по умолчанию.

Примеры декларации простых переменных:

int i,j,k;

char r;

double gfd;