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

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

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

Сформировать динамическую структуру вид структуры , содержащую данные по студентам в следующем виде: "Фамилия Имя Группа ГР RS", где ГР – год рождения, RS – средний рейтинг. Все студенты со средним рейтингом не ниже 4.75
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.

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

textual
Листинг программы
#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 для вывода данных студентов.

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


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

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

12   голосов , оценка 3.75 из 5
Похожие ответы