Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика_и_Пр_Бизнес_лекции.doc
Скачиваний:
84
Добавлен:
10.05.2015
Размер:
1.21 Mб
Скачать

7. Структуры и объединения

Для работы со сложными данными в языке С++ используются составные типы данных: массивы, структуры и объединения.

7.1. Объявление структуры

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

Тип «структура» является пользовательским типом, поэтому для использования в программе переменных-структур необходимо объявить тип «структура».

Синтаксис объявления типа «структура»:

struct имя_типа

{

объявления компонент

};

Компонент структуры может быть любого типа, кроме типа объявляемой структуры.

Пример объявления структурного типа:

struct student //тип студент

{

char fio[24]; //ФИО

int year; //год зачисления

float ball; //средний балл

};

Объявление переменных типа student:

student s1, s2; //две структурных переменных

student s3[4]; //массив структур

student s4 ={“Petrov”, 2003, 3.3}; //инициализация структуры

struct student s5; //объявление в стиле языка Си

7.2. Операции над структурами

Доступ к компоненту структуры по имени структуры

Синтаксис операции:

Имя_структуры.имя_компонента

Пример:

student s1;

s1.ball=5; s1.year=2011; strcpy(s1.fio,”Ivanov I.I.”);

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

Синтаксис операции:

Имя_структуры->имя_компонента

Пример:

student *p;

p=new student;

p->ball=5;

p->year=2011;

strcpy(p->fio,”Ivanov I.I.”);

Присваивание

Синтаксис операции:

s1=s2

где s1 и s2 структуры одного типа.

Пример:

student s1, x;

s1.ball=5; s1.year=2011; strcpy(s1.fio,”Ivanov I.I.”);

x=s1; //присваивание структуры

Вычисление адреса структуры

Пример:

student s1;

student *p;

p=&s1; //вычисление адреса переменной-структуры

Определение размера структуры

Пример:

student s1;

cout<<sizeof s1; //определение размера структуры

Так как типом компонента структуры может быть структура, то можно работать с вложенными структурами.

Пример объявления структуры Работник=(ФИО, дата рождения, должность, дата начала работы), содержащей вложенную структуру Дата:

struct tdate //тип дата

{

int day; //день

int month; //месяц

int year; //год

};

struct person //тип работник

{

char fio[24]; //ФИО

char post[20]; //должность

tdate birthday; //дата рождения

date begin; //дата начала работы

};

Объявление переменной:

person p;

Обращение к полям вложенной структуры:

cin>>p. birthday.day>> p. birthday.month>> p. birthday.year;

Пример программы, которая вводит информацию об n студентах (ФИО, год поступления, средний балл) и выводит эту информацию в упорядоченном по убыванию среднего балла виде:

#include <iostream.h>

#include <conio.h>

#include <string.h>

struct student

{

char fio[24];

int year;

float ball;

};

void main()

{

student* s; //динамический массив

int n; //количество студентов

int i, j; //номер студента и номер прохода массива

student x; //переменная для перестановки

cout<<"n ";

cin>>n;

s=new student [n]; / выделение памяти для динамического массива

for (i=0; i<n; i++) //ввод информации о студентах

{

cout<<"fio ";

/* ФИО содержит пробелы. Для удаления символа '\n’ из буфера ввода после ввода значения n используется функция get() */

cin.get();

cin.getline(s[i].fio,24);

cout<<"year ";

cin>>s[i].year;

cout<<"ball ";

cin>>s[i].ball;

}

// Сортировка

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

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

if (s[i].ball<s[i+1].ball)

{ x=s[i]; s[i]=s[i+1]; s[i+1]=x;}

cout<<"result"<<endl;

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

cout <<s[I].fio<<' '<<s[I].year<<' '<< s[I].ball<<endl;

getch();

}