
- •Содержание
- •Предисловие
- •1. Общие методические указания
- •2. Рабочая программа и методические указания к темам курса
- •2.1 Типы данных
- •2.2.1 Операторы управления
- •If (выражание) оператор_1;
- •2.2.2 Операторы ввода-вывода
- •Контрольные вопросы
- •2.3 Массивы и указатели
- •2.3.1 Указатели
- •2.3.2 Массивы
- •Контрольные вопросы
- •2.4 Типы данных, определяемые пользователем
- •2.4.1 Структуры
- •2.4.2 Перечисления
- •2.4.3 Структуры с битовыми полями
- •2.4.4 Объединение (смесь)
- •Контрольные вопросы
- •2.5 Функции
- •2.5.1 Общие сведения о функциях
- •Способы передачи параметров функции
- •2.5.2 Рекурсивные функции
- •2.5.3 Перегрузка функций
- •2.5.4 Шаблоны функций
- •Контрольные вопросы
- •3. Перечень лабораторных работ
- •Список литературы
- •Давыдов, в.Г. Программирование и основы алгоритмизации [Текст]: учеб. Пособие/ в.Г. Давыдов – м: Высшая школа, 2003. – 447с.: ил.: 22 см. – Библиогр.: с. 442. – 3000 экз. - isbn 5-060-04432-7.
2.4.2 Перечисления
При написании программ часто возникает потребность определить несколько именованных констант, имеющих разные значения. Для этого используют перечисления, все возможные значения которого задаются списком целочисленных констант. Формат:
enum [ имя_типа ] { список_констант };
Имя_типа задается в том случае, если в программе требуется определять переменные этого типа. Компилятор обеспечивает, чтобы эти переменные принимали значения только из списка констант. Константы должны быть целочисленными и могут инициализироваться обычным образом. При отсутствии инициализатора первая константа из списка обнуляется, а каждой следующей присваивается значение на единицу большее предыдущей:
1)
Enum Err{ERR_READ, ERR_WRITE, ERR_CONVERT};
// ERR_READ=0, ERR_WRITE=1, ERR_CONVERT=2
Err error;
. . .
switch (error){
case ERR_READ: /* операторы */ break;
case ERR_WRITE: /* операторы */ break;
case ERR_CONVERT: /* операторы */ break;
}
2)
enum { two = 2, three, four, ten = 10, eleven, fifty = ten + 40};
// three = 3, four = 4, eleven = 11, fifty = 50
Имена перечисляемых констант должны быть уникальными, а значения могут совпадать. Преимущество применения перечисления перед описанием именованных констант и директивой #define состоит в том, что связанные константы нагляднее и компилятор при инициализации может выполнять проверку типов. При выполнении арифметических операций перечисления преобразуются в целые.
2.4.3 Структуры с битовыми полями
При программировании задач низкого уровня часто неудобно пользоваться битовой арифметикой. В этом случае используется структура, элементом которой служит битовое поле, обеспечивающее доступ к отдельным битам памяти. Тип структуры с битовым полем вводится описанием следующего вида:
struct [ имя_struct]{ unsigned | bool имя_поля_1: длина_поля_1;
unsigned | bool имя_поля_2: длина_поля_2;
………..
unsigned | bool имя_поля_n: длина-поля_n ;};
Битовые поля – это особый вид полей структуры. Они используются для плотной упаковки данных, например, флажков типа “да / нет” . Минимальная адресуемая ячейка памяти – 1 байт, а для хранения флажка достаточно 1 бита. При описании битового поля после имени через двоеточие указывается длина поля в битах (целая константа):
struct { bool key : 1;
unsigned keycod : 3;
unsigned keytime : 5;
} mykey;
Длина поля может иметь нулевую длину, что обозначает выравнивание на границу следующего слова.
Вне структур битовые поля объявлять нельзя. Нельзя также организовывать массивы битовых полей и нельзя применять к полям операцию определения адреса.
Битовые поля могут содержать и знаковые компоненты. Эти компоненты автоматически размещаются на соответствующих границах слов, при этом, некоторые биты слов могут оставаться неиспользованными.
Ссылки на поле битов выполняются точно так же, как и компоненты общих структур.