ЦЕЛЬ РАБОТЫ: Изучить правила создания произвольного типа данных с
помощью структуры и правила работы с этим типом.
1. Порядок выполнения работы.
1.1. Выполнить программу 1.
1.2. В программе 1 вывести на экран наименования граф выход-
ной таблицы и начальное значение реквизита Итого.
2. Текст программ
/* Программа 1. */ // Структуры
#include <stdio.h>
void main(void)
{
char label[20];
int entries = 0;
int loop ;
double salar;
float summa;
struct Entry_struct // Описание структуры
{
char name[20];
int time;
float salary_1;
} entry[20];
printf(«%d»,sizeof(entry)); // Определение размера памяти
printf(«\n\nВведите наименование таблицы : «);
scanf(«%20s», label);
printf(«Введите количество записей (меньше чем 20) «);
scanf(«%d», &entries);
for (loop=0;loop<entries;++loop)
{
printf(«Запись %d\n», loop);
printf(» Имя : «);
scanf(«%20s», entry[loop].name);
printf(«Количество отработанных часов (целое число) :»);
scanf(«%d», &entry[loop].time);
printf(» Зарплата : «);
scanf(«%f», &entry[loop].salary_1);
}
printf(«Введите начальное значение реквизита ‘Итого’ :»);
scanf(«%f», &summa);
/* Вывод введенных данных */
printf(«\n\nТаблица %s\n»,label);
printf(«———————————————-\n»);
for (loop=0;loop<entries;++loop)
{ printf(«%4d | %-20s | %5d | %15.2f\n»,
loop + 1,
entry[loop].name, Лист 8-2
entry[loop].time,
entry[loop].salary_1);
printf(«- — — — — — — — — — — — — — — — — — — — — — -\n»);
}
for (loop=0;loop<entries;++loop)
summa+=entry[loop].salary_1;
printf (» Итого | %10.4f»,summa);
}
ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ.
1. Общие требования. В каждом задании необходимо создать ис-
ходный массив структур. Количество записей массива является вход-
ным параметром. Исходный массив необходимо вывести на экран для
контроля введенных данных.
Полученные результаты (результирующий массив) необходимо вы-
вести на экран.
Реквизит ДАТА представлять в виде структуры из трех реквизи-
тов: ДЕНЬ, МЕСЯЦ, ГОД.
Реквизит ФИОстудента представлять в виде структуры из двух
реквизитов: ИМЯ, ФАМИЛИЯ.
2. Наименования и структуры записей исходных массивов:
2.1.»Ведомость расходов студентов группы 901″.Реквизиты за-
писи: ФИОстудента, Дата_рождения, Расходы. Реквизит Дата_рожде-
ния представить в виде 3-х реквизитов: День, Месяц, Год.
Реквизит Расходы представить в виде 2-х реквизитов: Наименование,
Сумма.
2.2.»Ведомость приходов и расходов студентов группы 901″.
Реквизиты записи: ФИОстудента, Дата_рождения, Приход (руб.), Рас-
ход(руб.). Реквизит Дата_рождения представить в виде 3-х реквизи-
тов: День, Месяц, Год. Реквизит Расход и Приход представить каж-
дый в виде 2-х реквизитов: Наименование, Сумма.
2.3.»Ведомость инвентаризации материалов по цеху 9″. Рекви-
зиты записи: Наименование_материала, Единица_измерения,
Цена(руб.), Результаты_инвентаризации. Реквизит Результаты_инвен-
таризации представлять в виде двух реквизитов: Недостачи и Излиш-
ки. Каждый из последних двух реквизитов представлять в виде двух
реквизитов: Количество и Сумма(руб). Значение реквизита Сумма для
Недостачь (Излишков) равно произведению Цены на Количество Недос-
тачь (Излишков).
2.4.»Ведомость приходов и расходов студента А за 1 квартал
1998г.». Реквизиты записи: Наименование_прихода_или_- расхода,
Дата_прихода, Приход(руб.), Дата_расхода, Расход(руб.).
3. Содержание заданий.
3.1. Исходный массив 2.1. Вывести на экран перечень студен-
тов, которые родились в марте 1975 г. и сумму расходов этих сту-
дентов.
3.2. Исходный массив 2.2. Вывести на экран перечень студен-
тов, которые родились в марте 1975 г. и у которых Приход меньше
Расхода. Определить суммы приходов и расходов всех таких студен-
тов.
3.3. Исходный массив 2.1. Вывести на экран перечень студен-
тов, у которых Расход превышает среднее значение расходов по всей
группе 901.
3.4. Исходный массив 2.2. Вывести на экран перечень студен-
тов, которые родились до 01.01.75 г. и у которых длина значения
реквизита ИМЯ превышает пять. Определить суммы приходов и расхо-
дов всех таких студентов.
3.5. Исходный массив 2.2. Вывести на экран перечень студен-
тов, которые родились в январе и суммы приходов и расходов всех
таких студентов.
3.6. Исходный массив 2.3. Вывести на экран исходный массив с
вычисленными стоимостными оценками Недостач и Излишков по каждо-
му материалу и всего по цеху.
3.7. Исходный массив 2.3. Вывести на экран результаты инвен-
таризации по материалам с единицей измерения `шт.` и суммарные
значения Недостач и Излишков таких материалов.
3.8. Исходный массив 2.3. Вывести на экран те позиции Ведо-
мости инвентаризации, у которых одновременно имеются и Недостачи
и Излишки.
3.9. Исходный массив 2.3. Вывести на экран те позиции Ведо-
мости инвентаризации, у которых стоимостная оценка Недостач пре-
вышает 200 руб., и суммарное значение Недостатков таких материа-
лов.
3.10. Исходный массив 2.3. Вывести на экран те позиции Ведо-
мости инвентаризации, у которых количество Излишков превышает 200
шт. и суммарное значение Излишков таких материалов.
3.11. Исходный массив 2.4. Вывести на экран приходы за фев-
раль 1999г. и их суммарное значение.
3.12. Исходный массив 2.4. Вывести на экран приходы и расхо-
ды за март 1999г. и их суммарные значения.
3.13. Исходный массив 2.4. Вывести на экран те записи исход-
ного массива, в которых приходы и расходы за март 1993г. имеют
максимальные значения.
3.14. Исходный массив 2.2. Вывести на экран перечень студен-
тов, которые родились в 1977 г. и у которых Приход больше Расхода.
Определить насколько суммы приходов превышает сумму расхода таких
студентов.
2. Содержание отчета.
1. Результаты работы программы 1 и ее модификации. Исходный
текст модифицированной программы 1.
2. Индивидуальное задание (исходный текст, исходный и ре-
зультирующий массивы).
3. Вопросы по защите лабораторной работы
1. Описать программу 1.
2. Объявление структуры. Определение переменных типа структура.
2. Вложенные структуры. (Приложение 1).
3. Доступ к элементам структуры.(Приложение 1).
4. Доступ к элементам структуры с использованием указа-
телей (Приложение 2).
5. Массивы структур. (Приложение 3).
ПРИЛОЖЕНИЕ 1.
Структура — это одна или несколько переменных (возможно раз-
личных типов), которые для удобства работы с ними сгруппированы
под одним именем.
Более формальное определение структуры — это объект, состоя-
щий из последовательности именованных членов различных типов.
Над объектами типа структуры могут выполняться операции
присваивания (entry[1]=entry[0];). Можно определять размер и ад-
рес (&) структур и осуществлять доступ к членам структуры.
Пример описания структуры. Ведомость …
struct tip1 { !- — — — — — — — — — — — — — — — !
char famil; ! !Дата рождения ! Доход !
struct tip2 { !Фамилия! — — — — — — — ! !
int den; ! !День Месяц Год ! (руб.) !
int mes; !- — — — — — — — — — — — — — — — !
int god; !Сидоров 26 04 75 65000 !
} data_ro,*pt2; !Петров 17 02 76 28600 !
float dohod;
} vedovost, *pt1;
Структура с типом структуры (тегом) tip1 называется
vedovost. Структура с типом структуры (тегом) tip2 называется
data_ro. Переменная pt1 есть указатель на структуру типа tip1.
Переменная pt2 есть указатель на структуру типа tip2.
Переменные den, mes и god называются членами (элементами)
структуры data_ro. Переменные famil и dohod, а также структура
data_ro являются членами (элементами) структуры vedomost. Струк-
тура data_ro является ВЛОЖЕННОЙ в структуру vedomost.
Доступ к отдельному члену структуры осуществляется посред-
ством конструкции ИМЯ_СТРУКТУРЫ.ЧЛЕН_СТРУКТУРЫ.
Например vedomost.dohod=12000;
или vedomost.data_ro.god=75;.
2. Если pp есть указатель на структуру, то
pp->ЧЛЕН_СТРУКТУРЫ есть ее отдельный член.
Например pt1->famil=»Сидоров».
Операторы доступа к членам структуры. и -> вместе с операто-
рами вызова функции () и индексации массивов [] занимают самое
высокое положение в иерархии приоритетов и выполняются раньше лю-
бых других операторов.
3. Объявление struct ti {
char a;
int b;
} tim[kol];
описывает структуру типа ti и определяет массив tim, каждый эле-
мент которого есть структура типа ti и которому будет выделена
память для kol экземпляров структуры типа ti.