Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Формат 2

Формат 1

Структуры.

 

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

Структура может быть представлена как некоторый набор разнотипных и/или однотипных данных, совокупность которых рассматривается как совершенно новый, пользовательский тип данных. Структура

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

Существует два формата представления структуры:

struct [ имя-тега ]

{ список-объявлений-элементов }[ описатель [, описатель ]…];

struct имя-тега описатель [ описатель [, описатель ]…;

 

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

В формате 1 список-объявлений-элементов задаёт типы и имена элементов структуры. Имя-типа-структуры – это идентификатор, который именует тип структуры, определяемый списком объявлений элементов.

В формате 2 используется имя типа структуры для ссылки на тип структуры, определённый где-то в другом месте в области видимости и называемый шаблоном структуры. Поэтому список объявлений элементов в этом формате отсутствует.

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

Указатель рассматривается как указатель на структуру, массив – как массив структур, функция – как функция, возвращающая структуру.

Список-объявлений-элементов содержит одно или насколько объявлений переменных или полей-битов. Каждая переменная, объявленная в этом списке, называется элементом структурного типа. Объявления переменных списка имеют такой же синтаксис, что и другие объявления переменных, за исключением того, что объявления не могут иметь спецификаторов класса памяти или списка начальных значений. Элементы структуры могут быть любого основного типа, массивом, указателем, смесью или структурой.

 

Пример.

struct СТУДЕНТ {

char фио [40];

char ном_зач_кн [7];

char ном_гр [6];

int курс;

} список [20], *ptr;

struct СТУДЕНТ группа();

В этом примере объявляется массив структур типа СТУДЕНТ из 20 элементов, указатель на структуру типа СТУДЕНТ и функция, возвращающая структуру типа СТУДЕНТ.

Структура не может содержать в качестве элемента структуру такого же типа, но может содержать указатель на структуру этого типа при условии, что в объявлении структуры указано имя типа. Это позволяет создавать связные списки структур. Например:

struct tree{

int number;

struct tree *left;

struct tree *ritgh;

};

 

 

Пример.

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

 

struct Fio // описание структуры «Фамилия, имя, отчество»

{

char fm[21]; // фамилия

char im[16]; // имя

char ot[21]; // отчество

};

 

struct sess // описание структуры «Сессия»

{

int ns; // номер сессии

char pred[41]; // название предмета

int oc; //

};

 

 

struct Stud // описание структуры “Студент”

{

struct Fio; // фамилия, имя, отчество

char ig[5]; // номер группы

int nc; // номер курса

char frob[3]; // форма обучения (дневная – “дн”, заочная - ”зо”)

struct sess os; // оценки за сессию

};

 

 

void main()

{ struct Stud st[3]; //создание трёх записей о студентах

// заполнение полей записей

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

{

CharToOem(“\nВведите фамилию %d – го студента: ”,txt);

printf(txt, i+1);

gets(st[i].Fio.fm);

CharToOem(“\nВведите имя %d – го студента: ”,txt);

printf(txt, i+1);

gets(st[i].Fio.im);

CharToOem(“\nВведите отчество %d – го студента: ”,txt);

printf(txt, i+1);

gets(st[i].Fio.ot);

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

{

CharToOem(“\nВведите данные по %d – й сессии: ”,txt);

printf(txt, j+1);

for(int k=0;k<3;k++)

{

CharToOem(“\n %d – й экзамен: ”,txt);

printf(txt, k+1);

CharToOem(“Предмет: ”,txt);

puts(txt);

gets(st[i].os.pred.);

CharToOem(“Оценка: ”,txt);

puts(txt);

gets(txt);

st[i].os.oc=atoi(txt);

 

}

}

}

<== предыдущая лекция | следующая лекция ==>
Функции по работе с датой и временем | Открытие потока
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 350; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.