
- •Введение в системное программирование Основные понятия и определения Программы и программное обеспечение
- •Системное программирование
- •Этапы подготовки программы
- •Системное программирование
- •Лекция 1
- •1. Язык Си: Общая характеристика, историческая справкаи основные достоинства
- •2. Подготовка к выполнению и выполнение программ
- •3. Элементы языка с
- •Лекция 2
- •1. Понятие типа данных. Переменные и константы. Операция присваивания
- •2.Типы данных в языке си. Описание данных в программе
- •3. Константы в языке Си
- •4. Арифметические операции и арифметические выражения
- •5. Операции отношения, логические операции и логические выражения
- •6. Автоматическое преобразрвание типов и операция приведения
- •7. Простейшие операторы языка си. Составной оператор
- •Лекция 3
- •3. Инициализация переменных и массивов
- •4. Управляющие конструкции языка си
- •Лекция 4
- •1. Адреса и указатели
- •2. Отождествление массивов и указателей.Адресная арифметика
- •3. Указатели на массивы. Массивы указателей и многомерные массивы
- •4. Динамическое выделение памяти под массивы
- •5. Инициализация указателей
- •Лекция 5
- •1. Функции в языке си. Формальные и фактические параметры. Механизм передачи параметров. Возвращаемые значения
- •2. Использование указателей в качестве аргументов функций
- •3. Предварительное описание функций
- •4. Аргументы командной строки
- •Лекция 6
- •1. Ввод и вывод в языке си: Общие концепции
- •2. Файлы данных и каталоги. Внутренняя организация и типы файлов
- •3. Стандартные функции для работы с файлами и каталогами
- •4. Внешние устройства как специальные файлы. Организация обмена со стандартными внешними устройствами
- •5. Операции ввода/вывода через порты микропроцессоров intel 8086/80286
- •Лекция 7
- •1. Общая структура программы на языке си. Время существования и видимость переменных. Блоки
- •2. Классы памяти
- •3. Рекурсивные вызовы функций. Реализация рекурсивных алгоритмов
- •4. Препроцессор языка Си
- •5. Модели памяти, поддерживаемые компилятором ibm c/2
- •Лекция 8
- •1. Структуры в языке си: основные понятия
- •2. Массивы структур
- •3. Указатели на структуры
- •4. Вложение структур
- •5. Структуры и функции
- •6. Объединения
- •7. Перечисления
- •8. Определение и использование новых типов данных
- •9. Классы имен
Лекция 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, на конкретной ЭВМ.