Отсортировать список студентов в зависимости от оценки - 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); }
Объяснение кода листинга программы
Список действий в коде:
- Включаем необходимые заголовочные файлы для работы с консолью и структурой данных.
- Объявляем структуру данных для хранения информации о студентах, которая включает имя и оценку.
- Определяем функцию, которая получает информацию о студенте и сохраняет ее в структуре данных.
- Определяем функцию, которая выводит информацию о группе студентов в консоль.
- Определяем функцию сравнения, которая используется для сортировки студентов по оценкам.
- В функции main() запрашиваем у пользователя количество студентов в группе и сохраняем это значение в переменной.
- Выделяем память под массив структур student_info с помощью функции malloc().
- Запрашиваем у пользователя информацию о каждом студенте и сохраняем ее в соответствующей структуре.
- Выводим информацию о каждом студенте в консоль.
- Сортируем массив структур student_info по оценкам с помощью функции qsort().
- Выводим отсортированный список студентов в консоль.
- Освобождаем выделенную память с помощью функции free().
- Завершаем программу с указанным кодом ошибки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д