Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / C++ / C++ / 06_структуры_a5.doc
Скачиваний:
40
Добавлен:
17.04.2013
Размер:
89.09 Кб
Скачать

Вложенные структурные типы

Язык C++ позволяет определять один структурный тип в рамках другого. Например, структурный тип PersonInfo для записи роста, веса и даты рождения человека может быть определен, как показано в примере 6.5.

Пример 6.5.

struct Date

{

int month; //месяц

int day; //число

int year; //год

};

struct PersonInfo

{

float height; // рост

float weight; // вес

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

};

ПримеробъявленияпеременнойpersonтипаPersonInfo:

PersonInfo person;

Чтобыполучитьдоступкзначениюполяbirthday -переменной структурного типа PersonInfo, нужно использовать операцию точка: person.birthday, но так как birthday в свою очередь является полем структурного типа Date, то доступ, например, к году рождения осуществляется добавлением операции точка с именем year: person.birthday.year

Массивы структурного типа

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

Общий вид:

Имя_структурного_типа имя_переменной [количество_элементов_массива];

Например: PersonInfo personal[20];

Нумерация элементов массива начинается с нулевой компоненты и заканчивается индексом, равным количеству элементов массива минус 1.

Доступ к элементам массива структурного типа также осуществляется с использованием операции точка, например: personal[5].weight, personal[3].birthday.day и т. п.

Пример программирования

Сформировать массив, содержащий сведения о вкладах. Структурный тип содержит поля: ФИО вкладчика, номер счета, тип вклада (срочный, депозит, обычный), сумма вклада, дата последнего обращения к вкладу. Написать программу, которая выводит информацию о всех вкладчиках банка в алфавитном порядке имен и о вкладчиках банка, имеющих наибольший размер вклада.

Пример 6.6.

Текстпрограммы:

#include <string.h>

#include <stdio.h>

# include <iomanip.h>

struct Banc

{

char name[20]; // фамилия вкладчика

int sch; // номер счета

char tip[10]; // тип вклада

float sum; // сумма вклада

char data[10]; // дата последнего обращения

};

void main(void)

{

Banc b[10],b_new[10];

int kol;

cout<<"Введите количество вкладчиков >";

cin>>kol;

for(int i=0; i<kol; i++)

{

cout<<"Имя вкладчика :";

cin>>setw(15)>>b[i].name;

cout<<"Номер счета :";

cin>>b[i].sch;

cout<<"Тип вклада :";

cin>>b[i].tip;

cout<<"Сумма вклада :";

cin>>setw(10)>>b[i].sum;

cout<<"Дата последнего обращения к вкладу :";

cin>>setw(10)>>b[i].data;

cout<<endl;

}

/* Вывод содержимого массива вкладчиков в алфавитном порядке*/

for(int i=0; i<kol; i++)

{

Banc min=b[i];

int num=i;

for(int j=i; j<kol; j++)

if(strcmp(banc[j].name,min.name)<0)

{

min=b[j];

num=j;

}

b[num]=b[i];

b[i]=min;

}

cout<<"Имя вкладчика”<<”Номер счета”<<”Тип вклада”;

cout<<”Сумма вклада”<<”Дата последнего обращения к вкладу”<<endl;

for(int i=0; i<kol; i++)

{

cout<<setw(15)<<b[i].name<<setw(13)<<b[i].sch<<setw(11)<<b[i].tip;

cout<<setw(13)<<b[i].sum<<setw(16)<<b[i].data<<endl;

}

// Формирование массива вкладчиков, имеющих наибольший размер вклада

float max=0.0;

int kol_new=0;

for(int i=0; i<kol; i++) // Определение значения наибольшего вклада

if(b[i].sum>max) max=b[i].sum;

cout<<”Наибольшая сумма вклада”<<max<<endl;

// Массив вкладчиков с наибольшей суммой вклада

for(int i=0; i<kol; i++)

if(b[i].sum==max) b_new[kol_new++]=b[i];

cout<<”Имя вкладчика”<<”Номер счета”<<”Тип вклада”;

cout<<”Сумма вклада”<<”Дата последнего обращения к вкладу”<<endl;

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

{ cout<<setw(15)<<b_new[i].name<<setw(13)<<b_new[i].sch<<

setw(11)<< b_new[i].tip;

cout<<setw(13)<<b_new[i].sum<<setw(16)<<b_new[i].data<<endl;

}

}

Соседние файлы в папке C++