348.00K
Category: programmingprogramming

Объединения и структуры. Лекция №6

1.

Лекция № 6
Объединения и
структуры

2.

Зачем нужны структуры ?
Программа хранит сведения о студентах
#define N 30
...
char fio[100][N];
int
year[N];
float money[N];
bool status[N];
Как поменять местами двоих студентов ?
Нужны 4 дополнительные переменные.
char
int
tmp_f[100];
tmp_y;
float tmp_m;
int
tmp_s;

3.

Зачем нужны структуры ?
Для обмена потребуется 12 операций присваивания
tmp_f = fio[5];
fio[5] = fio[7];
fio[7] = tmp_f;
tmp_m = money[5];
money[5] = money[7];
money[7] = tmp_m;
tmp_y = year[5];
tmp_s = status[5];
year[5] = year[7]; status[5] = status[7];
year[7] = tmp_y;
status[7] = tmp_s;
Какими будут затраты, если увеличится количество
информации характеризующей студента ?

4.

Структура
Позволяет сгруппировать разные типы под один
новый тип данных
struct student
{
char fio[100];
int
year;
float money;
int
status;
};
// поля структуры
struct student st[N];

5.

Ключевое слово typedef
Писать всё время struct неудобно !
typedef Позволяет определить новый тип данных .
struct student
{
char fio[100];
int
year;
float money;
int
status;
};
// поля структуры
typedef struct student person;
person st[N];

6.

Инициализация структуры
Задание начальных значений для полей

7.

Доступ к полям структуры
Операция « . » позволяет обращаться к полям
структуры
struct point
{
int
x;
int
y;
};
typedef struct point figure;
figure poly[N];
poly[0].x = 100; poly[0].y = 400;
poly[N-1] = poly[0];

8.

Доступ к строковым полям структуры
Операция « . » не работает для строковых полей.
Подключаем файл string.h,
используем функцию strcpy.
struct student
{
char fio[100];
...
};
// поля структуры
strcpy(st[0].fio,"Petrov S.D.");

9.

Поиск молодого студента

10.

Сортировка структурированных
данных

11.

Сортировка структурированных
данных
strcmp(s1,s2) сравнивает строку s1 со строкой s2
0 – строки эквивалентны
> 0 – если s1<s2, <0 — если s1>s2

12.

Пример из vfw.h
typedef struct _MainAVIHeader
{
DWORD dwMicroSecPerFrame;
DWORD dwMaxBytesPerSec;
DWORD dwPaddingGranularity;
DWORD dwFlags;
DWORD dwTotalFrames;
DWORD dwInitialFrames;
DWORD dwStreams;
DWORD dwSuggestedBufferSize;
DWORD dwWidth;
DWORD dwHeight;
DWORD dwReserved[4];
} MainAVIHeader

13.

Иерархия структур
struct student
{ char fio[100];
int
year;
};
struct kafedra
{ struct student st[30];
struct prepod
pr[30];
char name[100];
};

14.

Объединение
Переменные объединения занимают одну и ту же
область памяти
union my
{
short int index;
char ch[2];
};
// поля
ch[0]
ch[1]
байт 0
байт 1
index

15.

Объединение
English     Русский Rules