Laba10(отчёт)
.docСанкт-Петербургский Университет
телекоммуникаций имени проф. Бонч-Бруевича
ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ
Лабораторная работа №10
Работа со структурами
Студент группы СУ-01
Соловьёв Константин
Вариант № 15
2011 г.
-
Постановка задачи
В настоящей лабораторной необходимо сформировать массив структур. Структуры вводятся с клавиатуры. В ряде вариантов заданий с клавиатуры вводится не вся структура, а только ее отдельные поля. Необходимо выполнить обработку сформированного массива структур и результаты обработки вывести на экран дисплея. В программе следует в максимальной степени использовать функции. Например, функции должны использоваться для ввода структур, обработки сформированного массива структур и вывода результатов обработки.
Задание:
Массив структур о кафедрах некоторого вуза. Каждая структура должна содержать следующие поля: название кафедры, фамилия, имя и отчество заведующего кафедрой, количество преподавателей, количество потоков, в которых проводит занятия кафедра в текущем семестре. Вывести на экран сведения о кафедрах, штатный состав которых превосходит “k” единиц.
Main файл:
Является главным связующим звеном в выполнении поставленной задачи. Его основная цель - это предоставление пользователю желаемый выбор выполнения операций с массивами и вызов функций для решения поставленных задач.
Код main.c файла:
#include "head10.h"
nt main(void) {
int n;
printf("Enter n = ");
scanf("%d%*c", &n);
input_kafedra(n, arr);
output_kafedra(n, arr, out);
}
Функция input_kafedra(предназначена для заполнения базы с клавиатуры):
void input_kafedra(int n, struct kafedra arr[]) {
int prep, pot;
char buf[MLEN];
char* simvol = NULL;
for (int i = 0; i < n; i++) {
printf("-----------------------------------\n");
printf("Kafedra - ");
fgets(buf, MLEN, stdin);
simvol = strchr(buf, '\n');
if (simvol != NULL)
*simvol = '\0';
strcpy(arr[i].name, buf);
printf("Zav Kafedri - ");
fgets(buf, MLEN, stdin);
simvol = strchr(buf, '\n');
if (simvol != NULL)
*simvol = '\0';
strcpy(arr[i].zavkav, buf);
printf("Prepodavateli - ");
scanf("%d%*c", &prep);
arr[i].teachers = prep;
printf("Potoki - ");
scanf("%d%*c", &pot);
arr[i].threads = pot;
}
}
Функция output_kafedra(предназначена для вывода на экран кафедры,чей штатный состав >k):
void output_kafedra(int n, struct kafedra arr[], struct kafedra out[]) {
int k;
printf("-----------------------------------\n");
printf("K= ");
scanf("%d", &k);
for (int i = 0; i < n; i++) {
if (arr[i].teachers > k) {
strcpy(out[i].name, arr[i].name);
strcpy(out[i].zavkav, arr[i].zavkav);
out[i].teachers = arr[i].teachers;
out[i].threads = arr[i].threads;
printf("-----------------------------------\n");
printf("Kafedra:");
puts(out[i].name);
printf("Zavkav:");
puts(out[i].zavkav);
printf("Prepodi:%d \n", out[i].teachers);
printf("Potoki: %d \n", out[i].threads);
}
}
}
Заголовочный файл head10.h:
#define MLEN 50
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define MCAF 20
struct kafedra {
char name[MLEN];
char zavkav[MLEN];
int teachers;
int threads;
}arr[MCAF],out[MCAF];
void input_kafedra(int n, struct kafedra arr[]);
void output_kafedra(int n,struct kafedra arr[],struct kafedra out[]);
Тестирование программы:
-----------------------------------
Kafedra - OTC
Zav Kafedri - Ivanov Ivan Ivanovi4
Prepodavateli - 20
Potoki - 4
-----------------------------------
Kafedra - Fizika
Zav Kafedri - Petrov Sergey Nikolaevi4
Prepodavateli - 15
Potoki - 5
-----------------------------------
Kafedra - Istoria
Zav Kafedri - Sidorov Pavel Sergeevi4
Prepodavateli - 10
Potoki - 3
-----------------------------------
K= 10
-----------------------------------
Kafedra:OTC
Zavkav:Ivanov Ivan Ivanovi4
Prepodi:20
Potoki: 4
-----------------------------------
Kafedra:Fizika
Zavkav:Petrov Sergey Nikolaevi4
Prepodi:15
Potoki: 5