Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1.1.2 - Основные поняти. Типы данных.doc
Скачиваний:
12
Добавлен:
03.11.2018
Размер:
134.14 Кб
Скачать

Структура программы на языке программирования с

В отличие от ЯП Паскаль ЯП С не имеет жестко заданной структуры программы со всеми блоками и разделами. В целом программа состоит из функций, главной из которых является функция main. При запуске программы управление передается этой функции. С точки зрения ЯП Паскаль эта функция эквивалентна главному блоку BEGIN…END.

Так как ЯП С сам по себе является довольно простым языком программирования и не содержит даже операторов ввода\вывода, то основную часть языка С составляют его библиотечные функции. Эти функции группируются в различные библиотеки в зависимости от своего функционального назначения. Для того, чтобы использовать функции необходимо подключить соответствующую программу. Это осуществляется с помощью директивы препроцессора #include<имя библиотеки>. Подключение библиотек осуществляется в самом начале программы. Наиболее часто используемыми библиотеками являются:

  • stdio.h – библиотека стандартного I\O,

  • math.h – библиотека математических функций,

  • conio.h – библиотека консольного I\O,

  • stdlib.h – библиотека стандартных функций.

Часто библиотеки перекрывают друг друга: содержат одни и те же функции.

Таким образом, структуру простейшей программы можно представить в следующем виде: она состоит из двух частей. Первая часть – это радел подключений библиотек, а вторая часть – функция main, содержащая саму программу. Программа заключается в фигурные скобки, которые играют роль ключевых слов BEGIN и END в ЯП Паскаль.

Например, простейшая программа «Привет мир!» имеет вид:

#include<stdio.h>

void main()

{

printf(“Hello world!\n”);

}

Тело функции main состоит из операторов, которые записываются в импликативной (процедурной) форме. Каждый оператор завершается знаком «;». Все операторы языке С можно разделить на четыре группы:

  1. Операторы объявлений типов и переменных;

  2. Операторы присвоений, математических и логических операций;

  3. Операторы вызова функций;

  4. Операторы управления.

Система базовых типов данных

Прежде чем рассматривать операторы объявлений типов и переменных, необходимо рассмотреть систему базовых типов языка С.

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

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

  • простые (скалярные) и сложные (векторные) типы;

  • базовые (системные) и пользовательские типы.

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

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

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

  • символьный,

  • целочисленный,

  • вещественный одинарной точности,

  • вещественный двойной точности.

Символьный тип (char) предназначен для описания символьных или целочисленных значений. Размер значения данного типа составляет 1 байт, диапазон принимаемых значений от -128 до 127. Может рассматриваться как символ и как число (специфика языка программирования), т.е. не требует преобразования как в языке Pascal.

Целочисленный тип (int) предназначен для описания целочисленных значений. Размер значения данного типа зависит от разрядности системы (среды разработки) и составляет:

  • в 16-ти разрядных системах - 2 байта (диапазон принимаемых значений от -32768 до 32767);

  • в 32-ух разрядных системах - 4 байта (диапазон принимаемых значений от -2147483648 до 2147483647).

ПРИМЕЧАНИЕ: Так как 16-ти разрядные системы устарели, то в дальнейшем будем рассматривать только 32-ух разрядное представление целого числа.

Вещественный тип одинарной точности (float) предназначен для описания вещественных значений одинарной точности. Размер значения данного типа составляет 4 байта (23 бита - мантисса, 8 бит - порядок, 1 бит - знак числа), диапазон принимаемых значений ±3.4Е±38. Точность - до 7 знаков после запятой

Вещественный тип двойной точности (double) предназначен для описания вещественных значений двойной точности. Размер значения данного типа составляет 8 байт (52 бита - мантисса, 11 бит - порядок, 1 бит - знак числа), диапазон принимаемых значений ±1.7Е±308. Точность - до 17 знаков после запятой.

Помимо описанных типов данных в языке С предусмотрены две группы модификаторов типа:

  • модификаторы знака: signed и unsigned,

  • модификаторы размера: short и long.

Модификатор signed осуществляет преобразование целочисленных значений к знаковым числам. Используется совместно с типами char и int. Так как этот модификатор всегда используется по умолчанию, то указывать его необязательно.

Модификатор unsigned осуществляет преобразование целочисленных значений к незнаковым числам. Используется совместно с типами char и int. Преобразование осуществляется путем переноса бита знака числа в значащие разряды, модифицируя тем самым диапазон принимаемых значений. Тип unsigned char принимает диапазон значений от 0 до 255. А тип unsigned int:

  • для 32-ух разрядных систем: от 0 до 4294967295 (232-1),

  • для 16-ти разрядных систем: от 0 до 65535 (216-1).

Модификатор short осуществляет преобразование целого числа типа int к короткому целому:

  • для 16-ти разрядных систем: используется по умолчанию;

  • для 32-ух разрядных систем: преобразует к 2-ух байтному значению с диапазоном от -32768 до 32767.

Модификатор long осуществляет преобразование целого числа типа int к длинному целому:

  • для 16-ти разрядных систем: преобразует к 4-ех байтному значению с диапазоном от -2147483648 до 2147483647;

  • для 32-ух разрядных систем: используется по умолчанию.

Модификатор long также используется с вещественным типом двойной точности double, преобразуя последний к вещественному числу повышенной точности (формат сопроцессора) размером 10 байт (64 бит - мантисса, 15 бит - порядок, 1 бит - знак числа) и диапазоном ±3.4Е±4932.

В стандарте С99 было разрешено двукратное использование модификатора long для создания 64-ех разрядных целых чисел. Значение типа long long int имеет размер 8 байт и диапазон от -263 до 263-1.

Допускается совместное применение модификаторов типа из различных групп. Например, значение типа unsigned long long int имеет размер 8 байт и диапазон значений от 0 до 264-1.

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

limits.h - содержит диапазоны целочисленных значений,

float.h - содержит диапазоны вещественных значений.

Рассмотренные типы данных относятся к числовым и символьным типам. До появления стандарта С99 в языке С булев (логический) тип отсутствовал как таковой. Вместо логических значений использовались целочисленные значения, интерпретируемые следующим образом:

  • 0 - логическая ложь (false),

  • 1 или любое отличное от нуля - логическая истина (true).

В стандарте С99 был введен логический тип _Bool, размер которого составляет 1 байт. Для использования более привычных ключевых слов bool, true и false необходимо подключить библиотеку stdbool.h. Тем не менее, чаще всего используется старое представление логического типа (целочисленными значениями).

В отличие от многих языков программирования высокого уровня, строки как скалярный тип данных в языке С отсутствуют. Это обусловлено тем фактом, что язык С является системным. Строковые данные в языке рассматриваются как сложные типы данных.