Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






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

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

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

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

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

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

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

Пример структуры - учётная карточка сотрудника, в которой содержится Ф.И.О., адрес, должность, год поступления на работу и т.д. Некоторые из этих атрибутов сами могут оказаться структурами. Так, Ф.И.О. имеет три компоненты, адрес - также несколько компонент.

Введем новые типы FIO и sotrudnik:

struct FIO {

char familia [39],
imya [30],
otchestvo [30]
};
struct sotrudnik {

FIO name;
char dolgnost [30];
int year;
float oklad

};

Здесь заданы два новых типа структурных переменных и имена этих типов - FIO, sotrudnik. Заметим, что наличие "; " после фигурных скобок здесь обязательно.

Теперь можно объявить структурные переменные типа FIO или sotrudnik обычным образом:

FIO name1, name2, name3;
sotrudnik s1, s2, s[50];

Теперь компилятором будет выделена память под переменные name1, name2, name3, s1, s2 и под массив s из пятидесяти структур. Отметим, что число байтов, выделяемое под структурную переменную, не всегда равно сумме длин отдельных членов структуры из-за эффекта выравнивания, производимого компилятором.

Чтобы определить выделенное число байтов, надо воспользоваться операцией sizeof, например, так:

int nf=sizeof (FIO), ns=sizeof (sotrudnik);

Заметим также, что объявить структурные переменные можно одновременно с определением тега структуры:

struct DATE {
int day;
int month;
int year;
char mon_name[4]

} d1, d2, d3;

Здесь объявлены три переменных d1, d2, d3, которые имеют тип структуры DATE.

Можно объявить структурную переменную и без введения имени (тега) структуры:

struct {

int price;
float length [10]

} a, b, c, d;

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

a.price c.length d1.day d3.mon_name s[25].oklad s[0].name.familia.

Пример

Описать структуру Student, содержащую следующие поля: name-имя, group-группа, ses-успеваемость. Необходимо ввести данные в массив stud1, состоящий из 30 структур типа Student. Вычислить средний балл и вывести на печать только студентов, имеющих средний балл > =4.

#include < iostream.h>

#include < conio.h>

void main()

{

clrscr;

int i;

const int n=30, m=4; //n-количество студентов, m-число оценок за сессию

struct student

{

char name[100];

unsigned short int group;

unsigned short int ses[m];

};

student stud1[n];

for (i=0; i< n; i++)//цикл по студентам

{

cout< < " \nВведите студента " < < i+1;

cout< < " \nВведите фамилию и инициалы ";

cin> > stud1[i].name;

cout< < " \nВведите группу ";

cin> > stud1[i].group;

cout< < " \nВведите оценки ";

for (int j=0; j< m; j++)//цикл по оценкам

cin> > stud1[i].ses[j];

}

for (i=0; i< n; i++)//цикл по студентам для определения среднего балла каждого

{

int s=0;

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

s+= stud1[i].ses[j];

s/=m; //расчет среднего балла студента

if (s> =4)

cout< < stud1[i].name< < " \n"; //и вывод его на печать

}

}






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.