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

5 Структуры

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

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

{тип_1 ім’я_поля_1;

тип_2 ім’я_поля_2;...;

тип_n ім’я_поля_n;};

где имя структуры – имя структуры шаблона, который удовлетворяет правилам задания идентификаторов языка С++;

тип_1, тип_2, ... , тип_n – какие-либо назначенные типы;

имя_поля_1, ... , имя_поля_n – идентификаторы полей, которые удовлетворяют правилам задания идентификаторов.

Описание структуры представляет собой задание нового типа «имя стуктуры» ы не приводит к выделению памяти, а только дает информацию компилятору о типах и количестве полей. Эта информация используется при описании структурированных переменных для резервирования необходимого места в памяти и организации доступа к необходимым полям структурной переменной.

Доступ к полям структуры можно обеспечить двумя способами: используя оператор разименования поля (символ „.”):

имя _структурной_переменной. имя_поля;

или используя оператор указателя на структуру (символы „->”):

указатель_на_структуру-> имя_поля;

Наиболее приоритетным в современном программировании является использование указателей.

Допускается использование массивов структур, структур внутри структур и т.д. Главное при этом – чтобы программист не использовал излишней памяти компьютера и контролировал связь данных внутри созданных структур.

Пример 5.1.

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

#include<iostream.h>

#include<conio.h>

const int n=2;

struct Poisk { char name[20];

int year;

int power; };

void main ()

{

Poisk car[n], *point=&car[0];

int i,yy,pp;

bool flag=false;

// введення інформації

for(i=0; i<n; i++, point++)

{

cout << "\nVvedi nazvy avto:";

cin >> point-> name; // або cin >> (*point).name;

cou t<< "\nVvedi rik vipusku:";

cin >> point->year; // або cin >> (*point). year;

cout << "\nVvedi potuznist':";

cin >> point->power; // cin >> (*point). power;

}

point-= n; // повернення покажчика на початок масиву

//Рядок запиту: рік випуску і потужність

cout << "\nVvedit rik vipusku:"; cin >> yy;

cout << "\nVvedi poshukovu potuznist':"; cin >> pp;

for (i =0; i < n; i++, point++)

if((point->year== yy) && (point->power == pp))

{ cout <<"the name of car is\n"<< point->name <<"\n";

flag=true; /* автомобіль знайдено*/

}

if(!flag)

cout<<"Avto ne znajdene\n ";

getch() ;

}

5.2. Контрольные вопросы и задания

  1. С какой целью используется тип данных «структура»?

  2. Какие преимущества и недостатки имеет использование структур?

  3. Какие типы полей может содержать структура?

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

  5. Назовите способы описание переменных структурного типа.

  6. Можно ли использовать структуру внутри другой структуры?

  7. Когда используют массивы структур?

  8. Как в приведенном примере программы понимать выражение point->year ?

  9. Возможно ли реализовать пример 5.1 без использования массива?