Программирование на языке Си. Практикум
.pdf
x.num - элемент num структурной переменной x n = x.num+2;
gets(x.name);
Если же объявлен указатель на структуру, то для доступа к элементу структуры используется операция ->
p -> num; // эквивалентно (*p).num;
Операция * должна относиться только к имени указателя, а не к уточненному имени элемента структуры, поэтому ставятся скобки.
x.num
p -> num обращение к одному и тому же элементу структуры х
(*p).num
Используя понятия массивов и структур, можно создавать весьма сложные и гибкие группы данных - массивы структур. Например:
Объявляем структурный тип
struct abc{ int num; |
// номер |
char name[20]; |
// наименование |
float cost; |
// стоимость |
}; |
|
Тогда объявление |
|
struct abc x[4]; // или abc x[4]; |
|
задает массив структур "х" из четырех элементов. При этом x - указатель на первый элемент массива структур, а x[1] - первый элемент массива структур.
Индекс массива пишется в квадратных скобках к имени структуры:
x[1].num |
аналогично (x+1) -> num |
x[1].name[4] |
(x+1) -> name[4] |
Пример:
struct abc x[2]={{ 2, "стул", 85.800},
{ 5, "стол", 165.900}}; //x–массив из 2 структур
61
struct abc *p; |
// p – указатель на структуру |
|
p=x; |
|
// или p=&x[0]; |
p++; //значение, на которое меняется адрес p - 28 байт |
||
// |
(столько занимает один элемент массива |
|
структур) |
|
|
Переменной типа структура нельзя присвоить значение:
struct xxx, x; x=25; //ошибка
Можно использовать указатель на структуру определяемого типа, что позволяет создавать связные списки структур:
struct cor { cor *pc; long f; }; // правильно
Лабораторная работа № 14 Работа с массивами структур
Задание: Написать программу, состоящую из 3 функций: главная осуществляет организацию массива структур и его заполнения, вызывает функцию по обработке элементов структуры и функцию вывода на экран результата. Структуры передавать в параметрах.
№ |
Вариант задания |
|
|
1 |
- Структуры содержат: порядковый номер, название, год |
|
выпуска и объем книги. |
|
- Функция получает массив структур, находит книгу с |
|
наибольшим объемом и возвращает порядковый номер. |
|
- На экран вывести структуру с этим порядковым номером. |
2 |
- Структуры содержат: порядковый номер, имя, год |
|
рождения и рост человека. |
|
- Функция получает массив структур, находит самого |
|
высокого человека и возвращает порядковый номер. |
|
- Функция печати выводит информацию по самому |
|
высокому человеку. |
3 |
- Структуры содержат: порядковый номер, имя, вес и рост |
|
человека. |
|
- Функция получает массив структур, находит суммарный |
|
вес группы людей. |
62
- Функция печати выводит информацию по всей группе людей и суммарный вес.
4- Структуры содержат: порядковый номер, название, год выпуска и объем книги.
-Функция получает массив структур, находит самую старую книгу и возвращает порядковый номер.
-На экран вывести структуру с этим порядковым номером.
5- Структуры содержат: порядковый номер, имя, год рождения и рост человека.
-Функция получает массив структур, находит самого молодого человека и возвращает порядковый номер.
-Функция печати выводит информацию по самому молодому человеку.
6- Структуры содержат: порядковый номер, имя, год рождения и рост человека.
-Функция получает массив структур и год, и определяет, сколько человек родились в этом году.
-Функция печати выводит информацию по всей группе людей и число людей, родившихся в указанном году.
7- Структуры содержат: порядковый номер, название, год выпуска и объем книги.
-Функция получает массив структур, находит книгу, выпущенную позже других, и возвращает порядковый номер.
-На экран вывести информацию по этой книге.
8- Структуры содержат: порядковый номер, наименование, стоимость и количество предметов мебели.
-Функция получает массив структур, находит суммарную стоимость всех предметов.
-Функция печати выводит информацию по предметам мебели и суммарную стоимость гарнитура.
9- Структуры содержат: порядковый номер, группу, количество студентов в группе.
-Функция получает массив структур, находит общее количество студентов.
-Функция печати выводит информацию по всем группам и общее количество студентов.
63
10- Структуры содержат: порядковый номер, название, год выпуска, объем и стоимость книги.
-Функция получает массив структур, находит суммарную стоимость книг.
-На экран вывести массив структур и суммарную стоимость.
11- Структуры содержат: порядковый номер, группу, количество студентов в группе.
-Функция получает массив структур, находит группу с наибольшим количеством студентов.
-Функция печати выводит информацию по этой группе.
12- Структуры содержат: порядковый номер, имя, вес и рост человека.
-Функция получает массив структур и рост, и определяет, сколько человек такого роста.
-Функция печати выводит информацию по всей группе людей и количество людей заданного роста.
13- Структуры содержат: порядковый номер, наименование, цену и количество предметов.
-Функция получает массив структур, находит самый дорогой предмет из перечисленных.
-Функция печати выводит информацию по данному предмету.
14- Структуры содержат: целое число, вещественное число и символ.
-Создать массив из двух структур,
первую проинициализировать значениями 2; 4.2; 'A', вторую - значениями 1; -8.4; 'K'.
-Функция получает массив структур, числовые элементы второй структуры прибавляет к соответствующим элементам первой структуры, символьные элементы меняет местами.
-Напечатать значения элементов первой структуры.
15- Структуры содержат информацию по лабораторной работе: вариант, исходные данные а и с, результат y.
64
-Создать массив из трех структур, исходные данные (вариант, а и с) вводить с клавиатуры.
-Функция получает массив структур и вычисляет y по заданной формуле, затем перемещает данные в массиве структур в порядке убывания результата.
-Распечатать массив структур.
16- Структуры STUDENT содержат: фамилию и инициалы студента, номер группы и успеваемость (массив из 5 элементов).
-Создать массив из 10 структур STUDENT, исходные данные вводить с клавиатуры.
-Функция получает массив структур и упорядочивает данные по возрастанию номера группы.
-Вывести на экран фамилии и номера групп для всех студентов, чей средний балл больше 4.0; если таких студентов нет, вывести соответствующее сообщение.
17- Структуры STUDENT содержат: фамилию и инициалы студента, номер группы и успеваемость (массив из 5 элементов).
-Создать массив из 10 структур STUDENT, исходные данные вводить с клавиатуры.
-Функция получает массив структур и упорядочивает данные по возрастанию среднего балла.
-Вывести на экран фамилии и номера групп для всех студентов, имеющих оценки 4 и 5; если таких студентов нет, вывести соответствующее сообщение.
18- Структуры STUDENT содержат: фамилию и инициалы студента, номер группы и успеваемость (массив из 5 элементов).
-Создать массив из 10 структур STUDENT, исходные данные вводить с клавиатуры.
-Функция получает массив структур и упорядочивает данные по алфавиту.
-Вывести на экран фамилии и номера групп для всех студентов, имеющих хотя бы одну оценку 2; если таких студентов нет, вывести соответствующее сообщение.
65
19 - Структуры AEROFLOT содержат: название пункта назначения, номер рейса, тип самолета.
-Создать массив из 7 структур AEROFLOT, исходные данные вводить с клавиатуры.
-Функция получает массив структур и упорядочивает данные по возрастанию номера рейса.
-Вывести на экран номеров рейсов и типов самолетов, вылетающих в пункт назначения, введенный с клавиатуры; если таких рейсов нет, вывести соответствующее сообщение.
20- Структуры AEROFLOT содержат следующие поля: NAZN
-название пункта назначения, NUMR - номер рейса, TIP - тип самолета.
-Создать массив AIPORT из 7 структур AEROFLOT, исходные данные вводить с клавиатуры.
-Функция получает массив структур и упорядочивает данные по алфавиту (по названиям пунктов назначения).
-Вывести на экран пункты назначения и номера рейсов, обслуживаемых самолетом, тип которого введен с клавиатуры; если таких рейсов нет, вывести соответствующее сообщение.
21- Структуры WORKER, содержат следующие поля: NAME
— фамилия и инициалы работника, POS — название занимаемой должности, YEAR — год поступления на работу.
-Создать массив TABL из 10 структур WORKER, исходные данные вводить с клавиатуры.
-Функция получает массив структур и упорядочивает данные по алфавиту (по фамилиям).
-Вывести на экран фамилии работников, чей стаж превышает значение, введенное с клавиатуры; если таких работников нет, вывести соответствующее сообщение.
22- Структуры TRAIN содержат следующие поля: NAZN - название пункта назначения, NUMR - номер поезда, TIME - время отправления.
-Создать массив RASP из 8 структур TRAIN, исходные данные вводить с клавиатуры.
66
-Функция получает массив структур и упорядочивает данные по алфавиту (по названиям пунктов назначения).
-Вывести на экран информацию о поездах, отправляющихся после введенного с клавиатуры времени; если таких поездов нет, вывести соответствующее сообщение.
23- Структуры TRAIN содержат следующие поля: NAZN - название пункта назначения, NUMR - номер поезда, TIME - время отправления.
-Создать массив RASP из 6 структур TRAIN, исходные данные вводить с клавиатуры.
-Функция получает массив структур и упорядочивает данные по времени отправления.
-Вывести на экран информацию о поездах, направляющихся в пункт, название которого введено с клавиатуры; если таких поездов нет, вывести соответствующее сообщение.
24- Структуры TRAIN содержат следующие поля: NAZN - название пункта назначения, NUMR - номер поезда, TIME - время отправления.
-Создать массив RASP из 8 структур TRAIN, исходные данные вводить с клавиатуры.
-Функция получает массив структур и упорядочивает данные по номерам поездов.
-Вывести на экран информацию о поезде, номер которого введен с клавиатуры; если таких поездов нет, вывести соответствующее сообщение.
25- Структуры ROUTE содержат следующие поля: BEGST - название начального пункта маршрута, TERM - название конечного пункта маршрута, NUMER - номер маршрута.
-Создать массив TRAFIC из 8 структур ROUTE, исходные данные вводить с клавиатуры.
-Функция получает массив структур и упорядочивает данные по номерам маршрутов.
-Вывести на экран информацию о маршруте, номер которого введен с клавиатуры; если таких маршрутов нет, вывести соответствующее сообщение.
67
26- Структуры ROUTE содержат следующие поля: BEGST - название начального пункта маршрута, TERM - название конечного пункта маршрута, NUMER - номер маршрута.
-Создать массив TRAFIC из 8 структур ROUTE, исходные данные вводить с клавиатуры.
-Функция получает массив структур и упорядочивает данные по алфавиту (по названиям начальных пунктов).
-Вывести на экран информацию о маршрутах, которые начинаются или кончаются в пункте, название которого введено с клавиатуры; если таких маршрутов нет, вывести соответствующее сообщение.
27- Структуры NOTE содержат следующие поля: NAME - фамилия, имя; TEL - номер телефона; BDAY — день рождения (массив из трех чисел).
-Создать массив BLOCKNOTE из 8 структур NOTE, исходные данные вводить с клавиатуры.
-Функция получает массив структур и упорядочивает данные по датам дней рождения.
-Вывести на экран информацию о человеке, номер телефона которого введен с клавиатуры; если такого нет, вывести соответствующее сообщение.
28- Структуры NOTE содержат следующие поля: NAME - фамилия, имя; TEL - номер телефона; BDAY — день рождения (массив из трех чисел).
-Создать массив BLOCKNOTE из 8 структур NOTE, исходные данные вводить с клавиатуры.
-Функция получает массив структур и упорядочивает данные по алфавиту.
-Вывести на экран информацию о людях, чьи дни рождения приходятся на месяц, значение которого введено с клавиатуры; если таких нет, вывести соответствующее сообщение.
29- Структуры ORDER содержат следующие поля: PLAT - расчетный счет плательщика; POL - расчетный счет получателя; SUMMA - перечисляемая сумма в рублях.
-Создать массив SPISOK из 8 структур ORDER, исходные данные вводить с клавиатуры.
68
-Функция получает массив структур и упорядочивает данные в алфавитном порядке по расчетным счетам плательщиков.
-Вывести на экран информацию о сумме, снятой с расчетного счета плательщика, введенного с клавиатуры; если такого расчетного счета нет, вывести соответствующее сообщение.
30- Структуры PRICE содержат следующие поля: TOVAR - название товара; MAG - название магазина, в котором продается товар; STOIM - стоимость товара в рублях.
-Создать массив SPISOK из 8 структур PRICE, исходные данные вводить с клавиатуры.
-Функция получает массив структур и упорядочивает данные в алфавитном порядке по названиям магазинов;
-Вывести на экран информацию о товарах, продающихся в магазине, название которого введено с клавиатуры; если такого магазина нет, вывести соответствующее сообщение.
Список литературы
1.Керниган Б., Ритчи Д. Язык программирования С. – ИД
"Вильямс", 2017. – 288 с.
2.Прата С. Язык программирования C. Лекции и упражнения. 6-е изд., "Диалектика", 2019. – 928 с.
3.Гуркова М.А. Резникова Э.Р. Основы программирования на языке С: Практикум. – М.: МГУПС (МИИТ), 2015. – 44 с.
69
Учебно-методическое издание
Гуркова Маргарита Александровна Резникова Эмма Романовна
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ СИ
Практикум
_________________________________________________________
Изд. № 33-20
_________________________________________________________
70
