Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций -=Вычислительная техника и прог...docx
Скачиваний:
11
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

4.2.4. Директивы #undef

Формат директивы удаления определения символа:

#undef имя_управляющего_символа

Примечание:

Директива используется редко для отключения какой-либо опции компилятора.

4.3. Лекция 13. Пользовательские типы данных

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

4.3.1. Переименование типов

Формат записи:

typedef имя_типа новое_имя_типа [ размерность ] ;

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

Пример:

typedef unsigned int UINT ; // выделено 7 Байт.

typedef char SMS[100] ; // выделена область под 100 символов

typedef struct {

char FIO[30] ;

int Date, Code ;

double Salary ;

} Worker ;

// использование

UINT i, j ; // две переменные типа unsigned int

SMS str[10] ; // массив из 10 строк по 100 символов

Worker staff[100] ; // массив из 100 структур

4.3.2. Перечисления

Формат записи перечисления:

enum [ имя_типа ] { список_констант } ;

Здесь:

— имя_типа — задаётся, если в программе требуется определять переменные этого типа;

— список_констант — содержит перечисление констант, которые должны быть целочисленными.

Примечание:

При отсутствии инициализатора первая константа обнуляется, а значение любой последующей больше предыдущей на 1.

Примеры:

1)

enum Err_msg {ERR_NO,  ERR_READ,  ERR_WRITE,  ERR_CONVERT} ;

/* =0 =1 =2 =3 */

…

switch (error) {

case ERR_NO : /*операторы*/ break ;

case ERR_READ : /*операторы*/ break ;

case ERR_WRITE : /*операторы*/ break ;

case ERR_CONVERT : /*операторы*/ break ;

default : /*операторы*/ break ;

}

2)

enum {two=2, three, four, ten=10, eleven, fifty=ten+40} ;

/* =2 =3 =4 =10    =11 =50 */

4.3.3. Структуры

Структуры могут содержать элементы различных типов

Формат записи структуры:

struct [ имя_типа ] {

тип_1 элемент_1 ;

тип_2 элемент_2 ;

…

тип_N элемент_N ;

} [ список_описателей ] ;

Здесь:

— элемент_1 … элемент_N — поля структуры;

— имя_типа — может быть использовано в дальнейшем наряду со стандартными типами;

— список_описателей — список описателей переменных, указателей или массивов, разделенных запятой.

Примечание:

1. Если имя_типа отсутствует, то должен быть указан список_описателей переменных, указателей или массивов.

Элементы структуры называют полями структуры.

Пример:

struct {

char FIO[30] ;

int Date, Code ;

double Salary ;

} staff[100], *ps;

/* *ps — указатель на структуру */

2. Если отсутствует список_описателей, то структура определяет новый тип, имя которого можно использовать в дальнейшем наряду со стандартными типами.

Пример:

struct Worker { // описание нового типа Worker

char FIO[30] ;

int Date, Code ;

double Salary ;

} ;

Worker staff[100], *ps; //объявление массива типа Worker

// и указателя на тип Worker.

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

Пример:

struct {

char FIO[30] ;

int date, code ;

double salary ;

} worker={ ''Иванов Иван'' , 31 , 215 , 3500.45} ;

4. При инициализации массивов структур следует заключать в фигурные скобки { } каждый элемент массива.

Пример:

struct complex

{

float real, imaginary ;

} compl [2][3]= {

{ {1,1} , {1,1} , {1,1} }, // строка 0, т.е. массив compl[0][…]

{ {2,2} , {2,2} , {2,2} }, // строка 1, т.е. массив compl[1][…]

}

5. Доступ к полям структуры в программе осуществляют:

— через имя структуры с помощью операции выбора —   .  (точка);

— через указатель с помощью —   –>  .

Если элементом структуры является другая структура, то доступ осуществляется через две операции выбора

Пример:

struct Worker { // описание типа Worker

char FIO[30] ;

int Date, Code ;

double salary ;

} ;

struct A {int a; double x;} ; // описание типа А

struct B {A b; double x;} x[2] ; // описание типа B

…

Worker worker, // объявление переменной worker,

staff[100], // массива staff[] типа Worker

*pointer ; // и указателя на тип Worker

…

worker.FIO = ''Иванов Иван'' ;

staff[8].Code=301 ;

pointer –> Salary = 6400.37 ;

x[0].b.a=1 ;

x[1].x=0.1 ;