Сформировать динамическую структуру, содержащую данные по студентам - C (СИ)
Формулировка задачи:
Type pstud = ^stud; stud = record fam : string[128]; im : string[128]; gruppa : string[8]; gr: integer; rs:real; next: pstud; end; var x:pstud; n:integer; procedure Print (first: pstud); Var r: pstud; Begin writeln; write('Все студенты со средним рейтингом не ниже 4.75: '); writeln; R := first; While r<>nil do begin if r^.rs>=4.75 then Writeln (r^.fam,' ',r^.im,' ',r^.gruppa,' ',r^.gr,' рейтинг: ' ,r^.rs:8:2); R:=r^.Next; end; end; procedure Create(var r:pstud; n:integer); var first:pstud; begin First:= nil; While n>0 do begin New(r); r^.Next:=first; write('Введите фамилию студента: '); readln(r^.fam); write('Введите имя студента: '); readln(r^.im); write('Введите № группы студента: '); readln(r^.gruppa); write('Введите год рождения студента: '); readln(r^.gr); write('Введите рейтинг студента: '); readln(r^.rs); First:=r; n := n-1 end; end; begin write('Введите количество студентов: '); readln(n); create(x,n); print(x); readln; end.
Решение задачи: «Сформировать динамическую структуру, содержащую данные по студентам»
#include <stdio.h> #include <malloc.h> #include <locale.h> typedef struct stud { char fam[128]; char im[128]; char gruppa[8]; int gr; float rs; struct stud* next; } *pstud; // глобальные переменные pstud x; int n; // вывод структуры void print(pstud r) { pstud first; printf("Все студенты со средним рейтингом не ниже 4.75: \n"); first = r; while(first != 0) { if (first->rs >= 4.75) printf("%s %s %s %d %f\n", first->fam, first->im, first->gruppa, first->gr, first->rs); first = first->next; } } // 1. при возврате из функции r должен указывать на первый элемент односвязного списка // 2. при возврате из функции содержание односвязного списка должно сохраниться, // то есть выделение памяти не должно быть локальным для функции void create(pstud* r, int n) { int t = 0; pstud f = *r; // временная переменная для функции while(n > 0) { if (t == 0) // первый элемент списка { *r = (struct stud*) malloc(sizeof(struct stud)); printf("Введите фамилию студента: "); scanf("%s", &((*r)->fam)); printf("Введите имя студента: "); scanf("%s", &((*r)->im)); printf("Введите № группы студента: "); scanf("%s", &((*r)->gruppa)); printf("Введите год рождения студента: "); scanf("%d", &((*r)->gr)); printf("Введите рейтинг студента: "); scanf("%f", &((*r)->rs)); (*r)->next = 0; f = *r; t = 1; } else // все последующие элементы списка { f->next = (struct stud*) malloc(sizeof(struct stud)); printf("Введите фамилию студента: "); scanf("%s", &(f->next->fam)); printf("Введите имя студента: "); scanf("%s", &(f->next->im)); printf("Введите № группы студента: "); scanf("%s", &(f->next->gruppa)); printf("Введите год рождения студента: "); scanf("%d", &(f->next->gr)); printf("Введите рейтинг студента: "); scanf("%f", &(f->next->rs)); f->next->next = 0; f = f->next; } n--; } } void main() { setlocale(LC_ALL, "Russian"); printf("Введите количество студентов: "); scanf("%d", &n); create(&x,n); print(x); }
Объяснение кода листинга программы
В этом коде создается динамический список структур, содержащих данные о студентах. Список начинается с 0, и каждый студент добавляется в список путем выделения памяти под новую структуру stud и связывания ее с предыдущим элементом списка через указатель next. Структура stud содержит поля для фамилии, имени, номера группы, года рождения и рейтинга студента. Эти поля заполняются с помощью функции scanf, когда пользователь вводит данные о студенте. Функция print затем проходит по списку и выводит данные каждого студента, если его рейтинг больше или равен 4.75. Код также включает функцию main, которая запрашивает у пользователя количество студентов, создает список и вызывает функцию print для вывода данных студентов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д