Отсортировать список студентов в зависимости от оценки - C (СИ)

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

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

уважаемые читатели форума. не получается одна задачка. надо создать список группы: имя студента и его оценка, в последующем надо будет отсортировать список и в зависимости од оценки. у меня возникла проблема на первом этапе. как заполнить массив? вот мой вариант кода:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct student
{
    char name;
    int mark;
} student;
 
void fillGroup1(student *s, char group1[], int n)
{
    int i,j;
    printf("Enter a student's name and his mark\n");
    for(i=0;i<n;i++)
    {
        scanf("%s %d",&(s.name), &(s.mark));
    }
}
//int findMin()
//int findMax()
//int findAvg()

int main()
{
    student s;
    int n;
    char group1[50], group2[50], group1_and_group2[50];
    printf("Enter a number of students 'in group I': ");
    scanf("%d",&n);
    //printf("Enter a number of students 'in group II': ");
    //scanf("%d",&n);
    fillGroup1(group1,n);

    system("pause");
    return 0;
}
ах, да строка 19 полный бред

Решение задачи: «Отсортировать список студентов в зависимости от оценки»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
#define MAX_NAME_LEN 50
 
struct student_info
{
    char name[MAX_NAME_LEN + 1];
    unsigned short mark;
};
 
int get_student_info(struct student_info* student)
{
    char format[20];
        
    sprintf(format, "%%%ds %%hu", MAX_NAME_LEN);
    return scanf(format, student->name, &student->mark) == 2;
}
 
void dump_group(struct student_info* student, unsigned count)
{
    unsigned i;
 
    putchar('\n');
    
    for(i = 0; i < count; ++i)
    printf("Student %s has mark %hu\n", student[i].name,
           student[i].mark);
}
 
int cmp_on_marks(const void* a, const void* b)
{
    return ((const struct student_info*) b)->mark -
    ((const struct student_info*) a)->mark;
}
 
int main(void)
{
    int ex_code = 0;
    unsigned group_size, i;
    struct student_info* group = NULL;
    
    printf("Input the number of students in the first group: ");
    
    if(scanf("%u", &group_size) != 1)
    {
    fprintf(stderr, "Input error\n");
    ex_code = 1;
    goto ex;
    }
 
    if((group = malloc(group_size * sizeof(struct student_info))) == NULL)
    {
    fprintf(stderr, "Memory allocation error\n");
    ex_code = 1;
    goto ex;
    }
    
    printf("Input information about students:\n");
    for(i = 0; i < group_size; ++i)
    {
    printf("%02d> ", i + 1);
    
    if(!get_student_info(&group[i]))
    {
        fprintf(stderr, "Input error\n");
        ex_code = 1;
        goto ex_free;
    }
    }
 
    dump_group(group, group_size);
    
    qsort(group, group_size, sizeof(struct student_info), cmp_on_marks);
    
    printf("\nGroup arranged in the descending orger by marks\n");
    dump_group(group, group_size);
    
ex_free:
    if(group)
    free(group);
ex:    
    exit(ex_code);
}

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

Список действий в коде:

  1. Включаем необходимые заголовочные файлы для работы с консолью и структурой данных.
  2. Объявляем структуру данных для хранения информации о студентах, которая включает имя и оценку.
  3. Определяем функцию, которая получает информацию о студенте и сохраняет ее в структуре данных.
  4. Определяем функцию, которая выводит информацию о группе студентов в консоль.
  5. Определяем функцию сравнения, которая используется для сортировки студентов по оценкам.
  6. В функции main() запрашиваем у пользователя количество студентов в группе и сохраняем это значение в переменной.
  7. Выделяем память под массив структур student_info с помощью функции malloc().
  8. Запрашиваем у пользователя информацию о каждом студенте и сохраняем ее в соответствующей структуре.
  9. Выводим информацию о каждом студенте в консоль.
  10. Сортируем массив структур student_info по оценкам с помощью функции qsort().
  11. Выводим отсортированный список студентов в консоль.
  12. Освобождаем выделенную память с помощью функции free().
  13. Завершаем программу с указанным кодом ошибки.

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


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

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

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