
Лабораторная работа № 7
Структуры
Цель
Изучение назначения, формата объявления и правил определения структур.
Изучение правил доступа к членам структур.
Составление консольных приложений с использованием структур.
Теоретические сведения
Понятие структуры
Массивом называется набор элементов одинакового типа. Структура является набором элементов произвольных типов. Ключевое слово struct определяет тип структуры:
struct [tag] { member-list } [declarators];
[struct] tag declarators;
где
struct – ключевое слово типа структуры;
tag – идентификатор (имя) пользовательского типа структуры;
member-list – список объявлений полей;
declarators – имена объектов типа tag.
Структура является пользовательским, сложным типом данных. Он состоит из «полей» или «элементов», которые могут быть разного типа. Например, переменная Man типа Worker может быть объявлена непосредственно:
struct Worker
{
char* Name;
int Year;
char* Speciality;
} Man;
Структура Woman объявлена с предварительным объявлением типа:
struct Worker
{
char* Name;
int Year;
char* Speciality;
};
Worker Woman;
Объявления полей одинакового типа могут быть объединены подобно обычным объявлениям переменных. Кроме того, поля структуры (подобно массиву) могут быть инициализированы:
struct Coordinate
{
int X, Y, Z;
} Point = {12, 6, 25};
Доступ к полям структуры
К конкретным членам (полям) структуры можно обратиться с использованием оператора . (точка). Например:
…
struct Worker // объявление структуры
{
char* Name; // фамилия рабочего
int Year; // год его рождения
} Man;
Man.Name=”Sidorov”;
Man.Year=1972;
printf(" %-10s %4d %-10s\n", Man.Name, Man .Year);
…
К объектам типа структуры часто обращаются через указатели, используя оператор -> (разыменование указателя на структуру). Например:
…
struct Worker // объявление структуры
{
char* Name; // фамилия рабочего
Int Year; // год его рождения
};
Worker * Man=new Worker;
Man->Name=”Sidorov”;
Man->Year=1972;
printf(" %-10s %4d %-10s\n", Man->Name, Man->Year);
…
Если Man – указатель на тип Worker, то Man->Year эквивалентно (*Man).Year. Объекты типа структуры можно присваивать, передавать в качестве аргументов и возвращать в качестве значений функций.
Постановка задачи
Исходные данные считать из предварительно созданного текстового файла.
Выполнить заданные действия с массивом структур.
Исходный массив структур вывести на экран.
Результаты обработки массива структур вывести в другой текстовый файл.
Требования
Оформить вычисления в виде консольного приложения.
При обработке массива структур использовать временную динамическую структуру.
Для ввода/вывода данных с консоли применить средства стандартной библиотеки <stdio.h>.
В отчет включить текст основной программы, исходного файла данных, результаты расчета на экране и текст результирующего файла.
Пример:
Определить самого пожилого рабочего бригады из пяти человек, если сведения о рабочих включают:
фамилия (строка);
год рождения (целое число);
специальность (строка).