- •Тема 6. Структуры
- •6.1 Понятие структуры в языке Си
- •6.2 Объявление типа структуры
- •6.3 Декларация переменных структурного типа
- •6.4 Доступ к элементам структурной переменной
- •6.5 Массивы структур
- •6.6 Оператор sizeof
- •6.7 Декларация typedef
- •7.2 Определение функции
- •7.3 Функции, вызывающие, I функции, вызываемые
- •7.4 Связи по данным между функциями
- •7.4.1 Вызов функции
- •7.4.2 Инструкция return (возврат)
- •7.5 Аппарат формальных и фактических аргументов
- •Входные аргументы;
- •Выходные аргументы;
- •Аргументы, которые обновляются.
- •7.6 Прототип функции
- •Тема 8. Передача аргументов функций
- •8.1 Способы передачи аргументов
- •8.1.1 Передача аргументов по значению
- •8.1.2 Передача аргументов по имени
- •8.1.3 Передача аргументов по ссылке
- •8.2 Особенности передачи аргументов в языке Си
- •8.3 Особые случаи передачи аргументов
- •8.3.1 Передача аргументом одномерного массива
- •Пример 6: сумма елеметiв массива (вариант 1).
- •Пример 7: сумма елеметiв массива (вариант 2).
- •8.3.2 Передача аргументом многомерного массива
- •8.3.3 Передача аргументом структуры
- •8.4 Аргументы командной строки
Тема 6. Структуры
Цель: познакомиться со способами создания структурного типа данных i переменных структурного типа, с операторами доступа к элементам структурных переменных, с вложенными структурами i массивами структур в языке Си, с оператором SizeOf и декларацией typedef .
6.1 Понятие структуры в языке Си
6.2 Объявление типа структуры
6.3 Декларация переменных структурного типа
6.4 Доступ к элементам структурной переменной
6.5 Массивы структур
6.6 Оператор sizeof
6.7 Декларация typedef
6.1 Понятие структуры в языке Си
Структура - это одна или несколько переменных, возможно, различных типов данных, которые сгруппированы под одним именем.
В языке Си термин "структура" соответствует понятию "запись" в языках программирования.
Пример 1: строка таблицы журнала студенческой группы.
Пример 2: точка в пространстве.
Пример 3: круг на плоскости.
Для того, чтобы работать со структурой, необходимо:
-
объявить структурный тип;
-
декларировать переменные этого типа.
6.2 Объявление типа структуры
Синтаксис:
struct [<имя = тег>]
{<Декларация_члена 1>;
<Декларация_члена 2>;
...
<Декларация_члена n>;
};
Декларация структуры - это описание типа данных. Если указано имя, то это и есть имя типа . Имена тегов и имен членов структуры могут совпадать с именами других переменных программы. Такое описание только описывает образец (шаблон) структуры данного типа, но ремонт, товары НЕ вiдiляе.
Пример 4: точка А в пространстве.
struct struct point
{Int xa {int xa;
int ya; int ya;
int za; int za;
};};
/ * Без тега * / / * с тегом * /
/ * Новый тип - struct point * /
Пример 5: круг на плоскости.
struct struct circle
{Float x0 {float x0;
float y0; float y0;
float r; float r;
};};
/ * Без тега * / / * с тегом * /
/ * Новый тип - struct circle * /
6.3 Декларация переменных структурного типа
Синтаксис:
I. <Декларация типа структуры> <список переменных>;
Это сочетание способов, в котором в одной декларации описывается структурный тип и переменные этого структурного типа.
II. struct <тег> <список переменных>
В этом случае описание структурного типа с тегом выполняется предварительно, а затем используется для описания переменных.
Пример 6: описать прямую, проходящую через точки А i В,
используя ранее введенный тип для представления точки в пространстве.
struct struct point
{Int xa {int xa;
int ya; int ya;
int za; int za;
} A, b;};
struct point a, b;
Инициализации структурных переменных можно выполнить при ее объявлении ( по аналогии с массивами ):
Пример 7: круг с центром (2, 3) и радиусом 5,5.
/ * Без тега * / / * с тегом * /
struct circle pr = {2.0, 3.0, 5.5}
{Float x0;
float y0;
float r;
} Pr = {2.0, 3.0, 5.5};
6.4 Доступ к элементам структурной переменной
Синтаксис:
<Имья_структуры> . <имья_члена>
Оператор. - Бинарный, iнфiксний, лiвоасоцiативний, наивысший приоритет.
Пример 8: расстояние от (0,0) до точки pt.
struct
{Float x;
float y;
} Pr = {20,15}
double dist;
dist = sqrt ((double) pt.x * pt.x + (double) pt.y * pt.y);
printf («От начала координат");
printf ("до точки (% f,% f)", pt.x, pt.y);
printf ("расстояние% f", dist);
Структуры можно вкладывать друг в друга (нет ограничения на глубину вложения).
Прямоугольник на плоскости образуется в результате пересечения двух прямых углов, в которых стороны Параллельные осям координаты, первый из этих углов образуется точкой pt1, второй угол - точкой pt2. Объявления на языке Си геометрического объекта типа прямоугольник, со сторонами паралельным осям координат:
Пример 9: задания прямоугольника координатами точек двух углов.
struct rectange
{
struct point pt1;
struct point pt2;
};
srtuct rectange poly;
float a; / * длина стороны а * /
a = poly.pt2.x - poly.pt1.x;
printf ("Длина стороны a =% f \ n", a);