Лабораторная работа № 5 Структуры Цель работы: получить практические навыки решения задач с использованием структур. Теоретические сведения Структура – это совокупность переменных, объединённых одним именем, предоставляющая общепринятый способ хранения информации. Объявление структуры приводит к образованию шаблона, используемого для создания объектов структуры. Переменные, образующие структуру, называются членами структуры. (Члены структуры также часто называются элементами или полями.) Например, информация об имени и адресе, находящаяся в списке рассылки, обычно представляется в виде структуры. Следующий фрагмент кода объявляет шаблон структуры, определяющей имя и адрес. Ключевое слово struct сообщает компилятору об объявлении структуры. struct addr { char name[30]; char street[40]; char city[20]; char state[3]; unsigned long int zip; }; Объявление завершается точкой с запятой, поскольку объявление структуры – это оператор. Имя структуры addr идентифицирует структуру данных и является спецификатором типа. Имя структуры часто используют как ярлык. На данный момент не создано никакой переменной. Определена только форма данных. Для объявления настоящей переменной, соответствующей данной структуре, следует написать: addr addr_info; В данной строке происходит объявление переменной addr_info типа addr. При объявлении структуры можно одновременно объявить одну или несколько переменных. Например: struct addr { char name[30]; char street[40]; char city[20]; char state[3]; unsigned long int zip; } addr_info, binfo, cinfo; объявляет структуру addr и объявляет переменные addr_info, binfo, cinfo данного типа. Стандартный вид объявления структуры следующий: struct ярлык{ тип имя переменной; тип имя переменной; тип имя переменной; . . . } структурные переменные; ярлык – это имя типа структуры. Структурные переменные – это разделённый запятыми список имён переменных. Следует помнить, что или ярлык, или структурные переменные могут отсутствовать, но не оба. 1 Доступ к членам структуры Доступ к отдельным членам структуры осуществляется с помощью оператора . (обычно называется «точкой»). Например, следующий фрагмент кода присваивает члену zip структурной переменной addr_info значение 12345: addr_info.zip = 12345; Присваивание структур Информация, содержащаяся в одной структуре, может быть присвоена другой структуре того же типа с помощью одиночного оператора присваивания, то есть не нужно присваивать значение каждого члена по отдельности. Следующая программа демонстрирует присваивание структур: #include <stdio.h> int main(void) { struct { int a; int b; } x, y; x.a=10; x.b=20; y=x; /* присвоение одной структуры другой */ printf(“Contents of y: %d %d.”, y.a, y.b); return 0; } После присваивания y.a и y.b будут содержать значения 10 и 20 соответственно. Массивы структур Возможно, наиболее часто структуры используются в виде массивов структур. Для объявления массива структур следует сначала определить структуру, а затем объявить массив переменных данного типа. Например, для объявления 100-элементного массива структур типа addr, которая была определена ранее, следует написать: struct addr addr_info[100]; В результате получаем набор из 100 переменных, устроенных, как объявлено в типе структуры addr. Для доступа к отдельным структурам массива addr_info следует проиндексировать имя массива. Например, printf(“%d “, addr_info[2].zip); Передача всей структуры в функцию Когда структура используется как аргумент функции, передается вся структура с помощью стандартной передачи по значению. Это означает, что любые изменения, внесённые в содержимое структуры внутри функции, не повлияют на структуру, используемую в качестве аргумента. Когда структура используется как параметр, самое важное – это запомнить, что тип аргумента должен соответствовать типу параметра. Лучший способ сделать это – определить структуру глобально, а затем использовать её ярлык для объявления необходимых структурных переменных и параметров. Например: #include <stdio.h> /* объявление типа структуры*/ struct struct_type { int a, b; 2 char ch; }; void f1(struct struct_type parm); int main(void) { struct struct_type arg; arg.a = 1000; f1(arg); return 0; } void f1(struct struct_type parm) { printf("%d\n", parm.a); } Данная программа выводит число 1000 на экран. Можно видеть, что как arg, так и parm объявлены как структуры типа struct_type. Контрольные вопросы 1. 2. 3. 4. Какова область применения структур? Каким образом определяется структура? Как определяются переменные типа структура? Как осуществляется доступ к структурным членам? Лабораторное задание Составить программу решения задания для своего варианта. При написании программы задать любой цвет экрана, организовать ввод входных данных в диалоговом режиме, вывод выходных данных - на очищенный экран в виде таблицы данных. 3 Порядок выполнения лабораторной работы 1. 2. 3. 4. 5. Войти в интегрированную среду разработки программ. Ввести текст программы своего варианта задания. Отладить программу. Результат работы программы показать преподавателю. Защитить лабораторную работу. Требования к отчету Отчет должен содержать: 1) конспект теоретической части; 2) лабораторное задание; 3) порядок выполнения лабораторной работы; 4) результаты выполнения программ. 4 Номер варианта 1,14 2, 15 3, 16 4, 17 5, 18 6, 19 7, 20 8, 21 9, 22 5 Варианты заданий Задание Сформировать массив, содержащий сведения о количестве изделий, собранных сборщиками цеха за неделю. Структурный тип содержит поля: фамилия сборщика, количество изделий, собранных им ежедневно в течение шестидневной недели, т.е. раздельно в понедельник, вторник и т.д. Написать программу, выдающую на печать: - фамилию сборщика и общее количество деталей, собранных им за неделю; - фамилию сборщика собравшего наибольшее количество изделий, и день, когда он достиг наивысшей производительности труда. Сформировать массив, содержащий сведения о количестве изделий категорий A, B, C, собранных рабочим за месяц. Структурный тип содержит поля: фамилия сборщика, наименование цеха, количество изделий по категориям, собранных рабочим за месяц. Считая заданными значения расценок SA, SB, SC за выполненную работу по сборке единицы изделия категорий A, B, C, выдать на печать следующую информацию: - общее количество изделий категорий A, B, C, собранных рабочим цеха; - средний размер заработной платы рабочих цеха X. Сформировать массив, содержащий сведения о телефонах абонентов. Структурный тип содержит поля: фамилия абонентов, год установки телефона. Написать программу, выдающую следующую информацию: - по вводимой фамилии абонента вывести номер телефона; - определить количество установленных телефонов с XXXX года. Номер года вводится с клавиатуры. Сформировать массив, содержащий сведения об ассортименте игрушек в магазине. Структурный тип содержит поля: название игрушки, цена, количество, возрастные границы (2 - 5). Написать программу, выдающую следующие сведения: - название игрушек, которые подходят детям от 1 до 3 лет; - стоимость самой дорогой игрушки и ее название; - название игрушки, которая по стоимости не превышает X руб. и подходит ребенку в возрасте от A до B лет. Значения A, B, X вводятся с клавиатуры. Сформировать массив, содержащий сведения о сдаче студентами сессии. Структурный тип содержит поля: индекс группы, фамилия студента, оценки по пяти экзаменам ("з" - зачет, "н" - незачет). Написать программу, выдающую информацию: - фамилии неуспевающих студентов с указанием индексов групп и количества задолженностей; - средний балл, полученный каждым студентом группы X, и всей группы в целом. Сформировать массив, содержащий сведения о личной коллекции книголюба. Структурный тип содержит поля: шифр книги, автор, название, год издания, местоположение (номер стеллажа). Написать программу, выдающую следующую информацию: - местоположение книги, автора X названия Y; - список книг автора Z, находящихся в коллекции; - число книг издания XX года, имеющихся в библиотеке. Сформировать массив, содержащий сведения о наличии билетов на рейсы аэрофлота. Структурный тип содержит поля: номер рейса, пункт назначения, время вылета, время прибытия, количество свободных мест в салоне. Написать программу, выдающую следующую информацию: - время вылета самолетов в город X; - наличие свободных мест на рейс в город X с временем отправления Y. Сформировать массив, содержащий сведения об ассортименте обуви в магазине фирмы. Структурный тип содержит поля: артикул, наименование, количество, стоимость одной пары. Артикул начинается с буквы Д - для дамской обуви, М - для мужской, П - для детской. Написать программу, выдающую информацию: - о наличии и стоимости обуви артикула X; - ассортиментный список дамской обуви с указанием наименования и имеющегося в наличии числа пар каждой модели. Сформировать массив, содержащий сведения о нападающих команды "Спартак". Структурный тип содержит поля: имена нападающих, число заброшенных ими шайб, число сделанных голевых передач, заработанное штрафное время. Написать программу, которая определяет по сумме очков (голы + передачи) четырех лучших игроков. Номер варианта 10, 23 11, 24 12, 25 13, 26 6 Продолжение Задание Сформировать массив, содержащий сведения о том, какие из пяти предлагаемых дисциплин по выбору желает изучать студент. Структурный тип содержит поля: фамилия студента, индекс группы, пять дисциплин, средний балл успеваемости. Выбираемая дисциплина отмечается символом 1, иначе - пробелом. Написать программу, которая печатает список студентов, желающих прослушать дисциплину X. Если число желающих превышает 4 человека, то отобрать студентов, имеющих более высокий средний балл успеваемости. Сформировать массив, содержащий сведения об отправлении поездов дальнего следования с Казанского вокзала. Структурный тип содержит поля: номер поезда, станция назначения, время отправления, время в пути, наличие билетов. Написать программу, выдающую информацию: - время отравления поездов в город Х во временном интервале от А до В часов; - наличие билетов на поезд с номером ХХХ. Сформировать массив, содержащий сведения о сотрудниках института. Структурный тип содержит поля: фамилия работающего, название отдела, год рождения, стаж работы, должность, оклад. Написать программу, которая позволяет получить информацию: - список сотрудников пенсионного возраста на сегодняшний день с указанием стажа работы; - средний стаж работающих в отделе Х. Сформировать массив, содержащий сведения о пациентах глазной клиники. Структурный тип содержит поля: фамилия пациента, пол, возраст, место проживания (город), диагноз. Написать программу, которая выдает информацию: - количество иногородних, прибывших в поликлинику; - список пациентов старше Х лет с диагнозом J.