По теме лабораторной работы. Структура – составной объект, состоящий из компонентов любых типов, за исключением компонентов функционального типа

Структура – составной объект, состоящий из компонентов любых типов, за исключением компонентов функционального типа.

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

В языке Си структура определяется следующим образом:

struct [имя_структуры]

{

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

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

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

}

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

Объявление структуры является оператором, поэтому в конце должна стоять точка с запятой. Элементы структуры называются полями структуры и могут иметь любой тип, кроме типа этой же структуры, но могут быть указателями на него. Если отсутствует имя структуры, должен быть указан список переменных, указателей или массивов. В этом случае описание структуры служит определением элементов этого списка:

struct

{

char surname[15];

char name[15];

int course;

double mate;

};

stud1, *ps;

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

struct STUDENT /* описание нового типа*/

{

char surname[15];

char name[15];

int course;

double mate;

}

Определим переменную типа STUDENT и указатель на этот тип:

struct STUDENT stud1, *ps.

Для инициализации структуры значения ее элементов перечисляют в фигурных скобках в порядке их описания:

STUDENT stud2={“Иванов”, ”Иван”, 3, 4.2};

Для переменных одного и того же структурного типа определена операция присваивания, при этом происходит поэлементное копирование. Структуру можно передавать в функцию и возвращать в качестве значения функции. Размер структуры не обязательно равен сумме размеров ее элементов, поскольку они могут быть выровнены по границам слов.

Доступ к полям структуры выполняется с помощью операции выбора. (точка) при обращении к полю через имя структуры и → при обращении через указатель, например:

struct STUDENT stud1, *ps;

stud1.mate =3.4;

cin>>stud1.surname;

*ps→ course=1;

cout<<stud1.surname;

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

struct A {int a; double x;};

struct B {struct A b; double x;} s, x;

s.b.a=1;

s.b.x=0.5;

s.x=0.125;

x.b.a=2;

x.b.x=-0.5;

x.x=2.5;

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

Структуры нельзя сравнивать. В языке Си реализован очень ограниченный набор операций над структурами как единым целым: передача функции в качестве аргумента, возврат в качестве значения функции, получение адреса, присваивание структур.

а) Можно присваивать одну структуру другой, если они имеют одинаковый тип (шаблон). При этом происходит поэлементное копирование.

struct STUDENT stud1, stud2, *ps;

stud1=stud2;

(*ps)=stud1;

б) Функция может в качестве значения возвращать структуру:

struct complex {float real, im;};

struct complex make (float x, float y)

{

struct complex z;

z.real = x;

z.im y;

return z;

}

в) Можно получать адрес структуры с помощью операции взятия адреса.

student stud1, *ps;

struct ps=& stud1;

г) Можно передавать структуры в качестве аргумента функции:

struct complex add1 (struct complex a, struct complex b)

{

struct complex c;

c.real = a.real + b.real;

c.im = a.im + b.im;

return c;}

В этом случае структурные переменные передаются по значению. При вызове функциив качестве фактических аргументов указываются имена структурных переменных:

struct complex x,y,z;

z = add1(x, y);

д) Структуры можно передавать в функции и по адресу.

struct complex add2 (struct complex *pa, struct complex *pb)

{

struct complex c;

c.real = pa→real + pb→real;

c.im = pa→im + pb→im;

return c;

}

При вызове функции в этом случае в качестве фактических аргументов указываются адреса структур.

struct complex x,y,z;

z = add2(&x, &y);

В отличие от массива, имя структуры не имеет никакого значения.

Структуры, как и переменные других типов могут объединяться в массивы структур.Чтобы объявить массив структур, надо сначала задать шаблон структуры, а затем объявить массив.

struct STUDENT st[200];

Этот оператор создает в памяти 200 переменных типа структуры с шаблоном STUDENTи именами st[0], st[1],…st[199].

Для доступа к полю course 25-го элемента массива используем st[24].course.

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

Пример:

Структура: студенты, поля – фамилия, имя, курс, средний балл. Поиск студентов по среднему баллу.

#include <iostream.h>

#include <conio.h>

#include <string.h>

//описание структуры

struct student

{char surname[15];

char name[15];

int course;

double mate;};

int main()

{const n=3;

int i,j;

//описание массива структур s и переменной t типа структуры

student s[n],t;

//установка флага "выравнивание по левому краю"

cout.setf(ios::left);

clrscr();

//ввод данных

for (i=0; i<=n-1; i++)

{cout<<" Vvedite familiu\n"; cin>>s[i].surname;

cout<<" Vvedite imya\n"; cin>>s[i].name;

cout<<" Vvedite kurs\n"; cin>>s[i].course;

cout<<" Vvedite sr ball\n"; cin>>s[i].mate;

clrscr();}

//вывод данных

cout<<"\nFamiliya Imya Kurs Sr. ball\n\n";

for (i=0; i<=n-1; i++)

{cout.width(18);cout<<s[i].surname;

cout.width(18);cout<<s[i].name;

cout.width(8);cout<<s[i].course;

cout.width(8);cout<<s[i].mate<<"\n";}//Поиск студентов по среднему баллу

double mate;

cout<<"\n\n Vvedite sr ball\n";

cin>>mate;

for (i=0; i<=n-1; i++)

if (s[i].mate>mate)

{

cout.width(18);cout<<s[i].surname;

cout.width(18);cout<<s[i].name;

cout.width(8);cout<<s[i].course;

cout.width(8);cout<<s[i].mate<<"\n";}

//Сортировка по фамилии в алфавитном порядке

for (i=0; i<=n-1; i++)

for (j=i+1; j<=n-1; j++)

if (strcmp(s[i].surname,s[j].surname)>0)

{t=s[i];

s[i]=s[j];

s[j]=t; }

//Вывод отсортированного массива

cout<<"\n\nOtsortirovannyi massiv\n\n";

cout<<"Familiya Imya Kurs Sr. ball\n\n";

for (i=0; i<=n-1; i++)

{cout.width(18);cout<<s[i].surname;

cout.width(18);cout<<s[i].name;

cout.width(8);cout<<s[i].course;

cout.width(8);cout<<s[i].mate<<"\n";}

getch();return 0;}

Задания для лабораторной работы:

Описать структуру в соответствии с вариантом задания. Заполнить данными массив из n элементов. В полученной базе данных осуществить поиск по критерию, указанному преподавателем. Отсортировать данные по ключевому полю. Таким образом, программа должна содержать следующие функции:

- создание и заполнение базы данных;

- поиск информации;

- сортировка данных.

1. Структура: FLOWER, поля: название, количество цветов в продаже, стоимость одного цветка. Ключевые поля: название цветка. Собрать букет из нескольких цветов в пределах заданной суммы.

2. Структура: TRAIN, поля: название пункта назначения, время отправления, номер поезда. Ключевые поля: время отправления. Поиск ближайшего поезда по пункту назначения.

3. Структура: EXPORT, поля: наименование товара, страна, импортирующая товар, и объем поставляемой партии. Ключевые поля: наименование товара. Поиск общего объема импорта страны.

4. Структура: CAR, поля: гос. номер автомобиля, марка, дата выпуска и общий пробег. Ключевые поля: марка. Поиск автомобиля, выпущенного не ранее указанного года и с пробегом, меньшим заданного пользователем.

5. Структура: FLAT, поля: адрес, количество комнат, общая площадь, стоимость квадратного метра. Ключевые поля: количество комнат. Поиск двухкомнатной квартиры в пределах заданной суммы.

6. Структура: MARSHRUT, поля: название начального пункта, название конечного пункта, длина маршрута. Ключевые поля: название начального пункта. Поиск маршрута, длина которого не более заданного пользователем значения.

7. Структура: JUMPER, поля: фамилия прыгуна, страна, которую он представляет, результат прыжков каждой попытки (три попытки). Ключевые поля: фамилия прыгуна. Поиск лучшего прыгуна.

8. Структура: ZOO, поля: название животного, номер вольера, количество. Ключевые поля: номер вольера. Поиск животных, численность которых менее критической (вводится с клавиатуры).

9. Структура: BAGGAGE, поля: фамилия пассажира, количество вещей, общий вес. Ключевые поля: фамилия пассажира. Поиск пассажиров, у которых вес багажа превышает норму.

10. Структура: DETAIL, поля: наименование, материал, масса. Ключевые поля: наименование. Найти среднюю массу детали.

11. Структура: JOURNAL, поля: название журнала, год издания, номер журнала, направление (вязание, шитье). Ключевые поля: год. Поиск журналов по направлению.

12. Структура: NOTE, поля: фамилия, имя, номер телефона, адрес. Ключевые поля: фамилия и имя. Поиск адреса и телефона по фамилии.

13. Структура: SUBSTANCE, поля: название вещества, плотность, проводимость (проводник, полупроводник, изолятор). Ключевые поля: название вещества. Поиск самого легкого вещества заданной проводимости.

14. Структура: PRICE, поля: название товара, стоимость товара, название магазина, в котором продается товар. Ключевые поля: название товара. Поиск магазина, в котором продается товар, указанный пользователем, по минимальной цене.

15. Структура: COUNTRY, поля: название, площадь, население. Ключевые поля: название. Поиск страны, в которой наибольшая плотность населения.

16. Структура: BOOK, поля: автор, название книги, год выпуска, количество страниц. Ключевые поля: автор. Поиск книг, выпущенных в указанном году.

17. Структура: RESERVOIR, поля: название водоема, загрязнитель, содержание загрязнителя (концентрация) и ПДК. Ключевые поля: название водоема. Найти водоемы, в которых превышена норма ПДК.

18. Структура: CHEMISTRY, поля: название, обозначение, номер в таблице. Ключевые поля: номер в таблице. Поиск всех щелочноземельных металлов и элементов подгруппы цинка (вторая группа периодической таблицы).

19. Структура: ORDER, поля: фамилия и инициалы плательщика, расчетный счет плательщика, расчетный счет получателя, перечисляемая сумма. Ключевые поля: фамилия и инициалы плательщика. Поиск общей суммы, перечисленной на данный расчетный счет

20. Структура: DATE, поля: событие, дата (год, месяц, число). Ключевые поля: дата. Поиск события, которое произойдет раньше остальных.

21. Структура: PLANT, поля: род, вид, название растения. Ключевые поля: название растения. Поиск растений одного вида или рода (по запросу пользователя).

22. Структура: POLYCLINIC, поля: фамилия и инициалы жителя, адрес, дата последнего прохождения флюорографического осмотра. Ключевые поля: фамилия и инициалы жителя. Поиск жителей, у которых просрочена дата флюорографии.

23. Структура: TOY, поля: название игрушки, страна производитель, возраст детей, для которых предназначена игрушка (нижняя и верхняя границы). Ключевые поля: название игрушки. Поиск некитайской игрушки для ребенка заданного возраста.

24. Структура: MACHINE, поля: гос. номер автомобиля, фамилия и инициалы владельца, дата последнего техосмотра. Ключевые поля: фамилия и инициалы владельца. Поиск автомобилей, не прошедших на данный момент техосмотр.

25. Структура: STOREHOUSE, поля: номер склада, вид продукции, количество продукции на данном складе. Ключевые поля: номер склада. Определить, достаточно ли запасов данной продукции на всех складах, если заказчику необходимо N -ое количество.

26. Структура: WORKER, поля: фамилия и инициалы работника, название занимаемой должности, год поступления на работу. Ключевые поля: фамилия и инициалы. Поиск работников, чей стаж превышает значение, введенное с клавиатуры.

27. Структура: HARVEST, поля: номер участка, площадь, вид культуры, урожайность. Ключевые поля: номер участка. Определить валовый сбор каждого вида культуры.

28. Структура: SPORTSMAN, поля: фамилия и инициалы, время на 100 м, время на 800 м, время на 5000 м. Ключевые поля: фамилия и инициалы. Поиск лучших спортсменов в каждом виде спорта.

29. Структура: STUDENT, поля: фамилия и инициалы, номер группы, оценки за сессию (массив из трех целых чисел). Ключевые поля: фамилия и инициалы. Поиск студентов, у которых средний балл за сессию выше 4.0.

30. Структура: STAR, поля: название звезды, созвездие, яркость. Ключевые поля: название звезды. Поиск звезд указанной яркости.

31. Структура: LIBRARY, поля: автор, название книги, издательство, год издания. Ключевые поля: год издания. Найти все книги автора, указанного читателем.

32. Структура: DRAFTEE, поля: фамилия, адрес, год рождения, признак годности к военной службе. Ключевые поля: фамилия. Вывести всех призывников на указанный год.

33. Структура: GAME, поля: название игры, системные требования (частота, ОЗУ, ПЗУ). Ключевые поля: название игры. Определить, можно ли установить игру на данный компьютер.

34. Структура: DOG, поля: кличка собаки, порода, возраст, количество наград. Ключевые поля: кличка собаки. Поиск собак определенной породы – победителей выставок.

Контрольные вопросы:

1. Как определить структуру?

2. Где может быть использован структурный тип данных?

3. В чем заключается различие между типом записи структуры и структурной переменной?

4. Как обратиться к элементу структуры?

5. Может ли структура содержать элементы одного типа?


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: