Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций_2015.doc
Скачиваний:
36
Добавлен:
03.03.2016
Размер:
532.48 Кб
Скачать

11 Структуры в языке си

Структура языка Си- это эквивалент записи.

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

ПР.11.1

/* строка таблицы */

Ф.И.О МАТЕМ ФИЗ Р.ЯЗ

Элементы разных типов

ПР.11.2

Представление

/* точка А в пространстве */ можно выполнить с помощью структуры:

xa ya za

Элементы массива безликие.

Элементы структуры имеют имена.

ПР.11.3

/* окружность на плоскости */

x0 y0 R

11.1 Объявление структурного типа в языке СИ

синтаксис:

struct [<имя = тег>]

{<декларация..члена1>;

...

<декларация члена N>;

};

  • Декларация структуры

= тип

  • Если после слова struct указать имя (tag), то это есть имя типа, кот. можно далее пользоваться как именем любого другого базового типа (как float, int).

  • Имена тегов и членов могут совпадать с именами других переменных.

  • Объявление структурного типа – это образец, а не декларация данных ( память не выделяется).

  • ПР.11.4 /* для 11.2 */

Struct без тега struct point c тегом

{ int xa; { int xa;

int ya; int ya;

int za; int za;

}; };

ПР.11.5 /* для 11.3 */

Struct Struct circle

{ float x0; { float x0;

float y0; float y0;

float r; float r;

}; };

    1. Декларация переменных структурного типа.

I сп < декларация типа структ. >

<список переменных>; 1 оператор

II сп struct < тег><список переменных>; 2 оператора

ПР.11.6 /* прямая : через точки А и В */

Struct struct point a,b;

{ int xa; см.11.4

int ya;

int za;

} a,b;

Инициализация:

Переменные структурного типа можно инициализировать как и все другие.

ПР.11.7 /* окружность с центром (2;3) и радиусом 5.5 */

Без тега

Struct

{ float x0;

float y0;

float r;

} pr = {2.0, 3.0, 5.5};

c тегом

struct circle pr = {2.0, 3.0, 5.5}

Доступ к элементам структуры

<имя структуры>.<имя члена>

Пример 11.8

/*расстояние от начала координат до точки pt*/

struct

{float x;

float y;} pt={20.0,15.0};

double dist;

dist=sqrt((double)pt.x*pt.x+(double)pt.y*py.y);

printf(“От начала координат”);

printf(“до точки (%f, %f)”,pt.x, pt.y);

printf(“расстояние %f”,dist);

Структуры, вложенные друг в друга

Создаем прямоугольник, заданный координатами двух своих углов. Пусть pt1-левый верхний угол, pt2-правый нижний угол.

pt1 a

pt2

Найти размер стороны а.

struct rectangle

{struct point pt1;

struct point pt2;};

struct rectangle poly;

int r;

r=poly.pt2.x-poly.pt1.x;

Массивы структур