Сформировать динамическую структуру (вид структуры - список), содержащую данные по студентам - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Сформировать динамическую структуру (вид структуры - список), содержащую данные по сту- дентам в следующем виде: "Фамилия Имя Группа ГР RS", где ГР – год ро- ждения, RS – средний рейтинг (не менее 5 записей). Осуществить обра- ботку структуры: все студенты со средним рейтингом от 4.0 до 5.0

Решение задачи: «Сформировать динамическую структуру (вид структуры - список), содержащую данные по студентам»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define COUNT_RS 5
  5.  
  6. typedef struct data_t {
  7.     const char* lastname;
  8.     const char* firstname;
  9.     const char* middlename;
  10.     float rs[COUNT_RS];
  11. }   TData;
  12.  
  13. typedef struct node_t {
  14.     TData value;
  15.     struct node_t* next;
  16. }   TList;
  17.  
  18. //-----------------------------------------------------------------------------
  19. TList* Push(TList** list, const TData* value) {
  20.     TList* node = malloc(sizeof(TList));
  21.     node->value = *value;
  22.     node->next = *list;
  23.     *list = node;
  24.  
  25.     return node;
  26. }
  27. //-----------------------------------------------------------------------------
  28. int All(const TData* value) {
  29.     return 1;
  30. }
  31. //-----------------------------------------------------------------------------
  32. int Best(const TData* value) {
  33.     float sum = 0.0;
  34.     size_t i;
  35.     for (i = 0; i < COUNT_RS; ++i) {
  36.         sum += value->rs[i];
  37.     }
  38.     sum /= COUNT_RS;
  39.  
  40.     return ((4.0 <= sum) && (sum <= 5.0));
  41. }
  42. //-----------------------------------------------------------------------------
  43. void Print(const TList* list, int (*Filter)(const TData*)) {
  44.     size_t i;
  45.     for (; list; list = list->next) {
  46.         if (Filter(&list->value)) {
  47.             printf("%s\t%s\t%s", list->value.lastname,
  48.                    list->value.firstname, list->value.middlename);
  49.             for (i = 0; i < COUNT_RS; ++i) {
  50.                 printf("\t%.2f", list->value.rs[i]);
  51.             }
  52.             printf("\n");
  53.         }
  54.     }
  55. }
  56. //-----------------------------------------------------------------------------
  57.  
  58. int main() {
  59.     const TData data[] = {{"Ivanov",  "Ivan",  "Ivanovich",  {4, 5, 4, 5, 4}},
  60.                           {"Petrov",  "Petr",  "Petrovich",  {4, 3, 4, 5, 3}},
  61.                           {"Sidorov", "Sidor", "Sidorovich", {3, 3, 3, 3, 3}},
  62.                           {"Popov",   "Ivan",  "Ivanovich",  {5, 5, 5, 5, 5}}};
  63.  
  64.     TList* list = NULL;
  65.     size_t i;
  66.  
  67.     for (i = 0; i < 4; ++i) {
  68.         Push(&list, &data[i]);
  69.     }
  70.  
  71.     printf("All:\n");
  72.     Print(list, All);
  73.     printf("\n");
  74.  
  75.     printf("Best:\n");
  76.     Print(list, Best);
  77.  
  78.     return 0;
  79. }

Объяснение кода листинга программы

В данном коде происходит следующее:

  1. Создаются две структуры: TData и TList.
    • TData представляет собой структуру данных о студентах, содержащую их ФИО и оценки по пяти предметам.
    • TList представляет собой структуру данных, связанную списками, в которой каждый элемент - это структура TData.
  2. Определяются две функции: Push и Print, работающие со списком.
    • Push добавляет новый элемент в список.
    • Print выводит элементы списка, удовлетворяющие определенному условию (фильтру).
  3. Создается массив data с данными о студентах.
    • Каждый элемент массива представляет собой структуру TData.
  4. Создается пустой список list.
  5. С помощью цикла for в список добавляются элементы из массива data.
  6. Вызывается функция Print для вывода всех элементов списка.
  7. Вызывается функция Print для вывода только лучших элементов списка.
    • Лучшим считается элемент, сумма оценок которого находится в диапазоне от 4 до 5.
  8. Программа завершается возвратом значения 0, что означает успешное выполнение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы