Сформировать динамическую структуру (вид структуры - список), содержащую данные по студентам - C (СИ)
Формулировка задачи:
Сформировать динамическую структуру (вид
структуры - список), содержащую данные по сту-
дентам в следующем виде: "Фамилия Имя Группа ГР RS", где ГР – год ро-
ждения, RS – средний рейтинг (не менее 5 записей). Осуществить обра-
ботку структуры: все студенты со средним рейтингом от 4.0 до 5.0
Решение задачи: «Сформировать динамическую структуру (вид структуры - список), содержащую данные по студентам»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #define COUNT_RS 5 typedef struct data_t { const char* lastname; const char* firstname; const char* middlename; float rs[COUNT_RS]; } TData; typedef struct node_t { TData value; struct node_t* next; } TList; //----------------------------------------------------------------------------- TList* Push(TList** list, const TData* value) { TList* node = malloc(sizeof(TList)); node->value = *value; node->next = *list; *list = node; return node; } //----------------------------------------------------------------------------- int All(const TData* value) { return 1; } //----------------------------------------------------------------------------- int Best(const TData* value) { float sum = 0.0; size_t i; for (i = 0; i < COUNT_RS; ++i) { sum += value->rs[i]; } sum /= COUNT_RS; return ((4.0 <= sum) && (sum <= 5.0)); } //----------------------------------------------------------------------------- void Print(const TList* list, int (*Filter)(const TData*)) { size_t i; for (; list; list = list->next) { if (Filter(&list->value)) { printf("%s\t%s\t%s", list->value.lastname, list->value.firstname, list->value.middlename); for (i = 0; i < COUNT_RS; ++i) { printf("\t%.2f", list->value.rs[i]); } printf("\n"); } } } //----------------------------------------------------------------------------- int main() { const TData data[] = {{"Ivanov", "Ivan", "Ivanovich", {4, 5, 4, 5, 4}}, {"Petrov", "Petr", "Petrovich", {4, 3, 4, 5, 3}}, {"Sidorov", "Sidor", "Sidorovich", {3, 3, 3, 3, 3}}, {"Popov", "Ivan", "Ivanovich", {5, 5, 5, 5, 5}}}; TList* list = NULL; size_t i; for (i = 0; i < 4; ++i) { Push(&list, &data[i]); } printf("All:\n"); Print(list, All); printf("\n"); printf("Best:\n"); Print(list, Best); return 0; }
Объяснение кода листинга программы
В данном коде происходит следующее:
- Создаются две структуры:
TData
иTList
.TData
представляет собой структуру данных о студентах, содержащую их ФИО и оценки по пяти предметам.TList
представляет собой структуру данных, связанную списками, в которой каждый элемент - это структураTData
.
- Определяются две функции:
Push
иPrint
, работающие со списком.Push
добавляет новый элемент в список.Print
выводит элементы списка, удовлетворяющие определенному условию (фильтру).
- Создается массив
data
с данными о студентах.- Каждый элемент массива представляет собой структуру
TData
.
- Каждый элемент массива представляет собой структуру
- Создается пустой список
list
. - С помощью цикла
for
в список добавляются элементы из массиваdata
. - Вызывается функция
Print
для вывода всех элементов списка. - Вызывается функция
Print
для вывода только лучших элементов списка.- Лучшим считается элемент, сумма оценок которого находится в диапазоне от 4 до 5.
- Программа завершается возвратом значения 0, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д