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

10. Cтруктуры.

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

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

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

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

Общий вид описания структуры

struct [Имя_типа]{

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

тип_2 2_элемент;

……………………..

тип_n n_элемент;

}[список экземпляров этого типа];

  Эта запись называется описанием структуры. Она начинается с ключевого слова struct и состоит из заключенного в фигурные скобки списка описаний. За словом struct может следовать необязательное имя, которое называется именем типа структуры (иногда его называют тэгом или ярлыком структуры). Этот ярлык именует структуру и в дальнейшем может использоваться для сокращения подробного описания. Переменные, упоминающиеся в записи, называются элементами. Следом за правой фигурной скобкой, заканчивающей список элементов, может следовать список переменных, так же, как и в случае базисных типов. Вот почему в приведенном выше описании структуры после закрывающей фигурной скобки стоит точка с запятой; она завершает пустой список. Описание struct {....} p1, p2, p3; синтаксически аналогично int p1, p2, p3; в том смысле, что каждый из операторов описывает p1, p2, p3 как переменные соответствующего типа и приводит к выделению для них памяти. Описание же структуры без последующего списка переменных не выделяет никакой памяти. Оно только определяет форму структуры и действует как шаблон. Если такое описание снабжено ярлыком (именем типа), то его можно позже использовать при определении фактических экземпляров структуры.

Пример.

struct Tovar{

char name[30]; // название товара

char shop [20]; // название магазина

float price; // цена

};

Tovar A,B;

Обращение к элементам записи A: A. name, A. Shop, A.price.

Обращение к элементам записи B: B. name, B. Shop, B.price.

Ввод записи: cin>>A.name>>A.shop>>A.price;

Для однотипных структур возможен массовый оператор присваивания.

Например B=A;

Элементом структуры может быть другая структура.

Примеры.

Пример 1. Дан массив записей о студентах. Структура записи: фамилия студента, курс, набор оценок за последнюю сессию. Вывести на экран информацию о студентах 1 курса,

сдавших сессию на 4 и 5 .

#include <iostream.h>

#include <iomanip.h>

#include<conio.h>

int const m=5,n=100;

struct student{

char Fam[20];

int Kurs;

int ball[m];

};

void input(student &T)

{

cin>>T.Fam>>T.Kurs;

for (int j=0;j<m;j++)

cin>>T.ball[j];

}

void output(student T)

{cout.setf(ios::left);

cout<<setw(10)<<T.Fam<<' '<<T.Kurs<<' ';

for (int j=0;j<m;j++)

cout<<T.ball[j]<<' ';

cout<<endl;

}

int best(student T)

{

for(int j=0;j<m&&T.ball[j]>=4;j++);

if (j==m)return 1; else return 0;

}

void main(){

student S[n],z;

int i,F=1;

clrscr();

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

input(S[i]);

cout<<”\nCписок студентов первого курса, сдавших сессию на 4 и 5 \n”;

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

if(S[i].Kurs==1&&best(S[i])){ output(S[i]);F=0; }

if(F)cout<<"\n таких нет\n”;

getch();

}

Пример 2 . Дан массив записей о студентах. Структура записи: фамилия студента, курс, набор оценок за последнюю сессию. Вывести на экран информацию о студентах в алфавитном порядке фамилий .

#include <iostream.h>

#include <iomanip.h>

#include<conio.h>

int const m=5,n=100;

struct student{

char Fam[20];

int Kurs;

int ball[m];

};

void input(student &T)

{

cin>>T.Fam>>T.Kurs;

for (int j=0;j<m;j++)

cin>>T.ball[j];

}

void output(student T)

{cout.setf(ios::left);

cout<<setw(10)<<T.Fam<<' '<<T.Kurs<<' ';

for (int j=0;j<m;j++)

cout<<T.ball[j]<<' ';

cout<<endl;

}

void main(){

student S[n],z;

int i,F=1;

clrscr();

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

input(S[i]);

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

{ Nmin=i;

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

if(strcmp(S[j].Fam,S[Nmin].Fam)<0) Nmin=j;

z=S[i]; S[i]= S[Nmin]; S[Nmin]=z;}

cout<<”\nУпорядоченный список cтудентов\n”;

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

output(S[i]);

getch();

}

1 Пробелы между символами внутри операции не допускаются

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]