#include <stdio.h>
#include <stdlib.h>
// Структура данных, содержащих данные о студенте
struct Student
{
char name[101]; // фамилия(не длиннее 100 символов)
unsigned mark; // оценка
};
// функция сравнения, нужная для сортировки, использующаяся в функции qsort
int compare(const void * a, const void * b)
{
Student* student1 = (Student*) a;
Student* student2 = (Student*) b;
return student2->mark - student1->mark;
}
int main()
{
unsigned n, k; // число всех студентов и лучших, соответственно
Student* students; // указатель на область памяти, содержащую данные о студентах
FILE* file; // файловый дескриптор
file = fopen("students.txt", "r"); // открываем файл
/* Пример допустимого формата файла:
* 5 3
* abc1 4
* abc2 2
* abc3 5
* abc4 3
* abc5 4
*/
// если не получилось открыть - говорим об этом и завераем программу
if (file == 0)
{
printf("Failed to open a file\n");
return -1;
}
// считываем n и k
fscanf(file, "%u %u", &n, &k);
students = (Student*) malloc(n * sizeof(Student)); // выделяем память на всех студентов
// считываем данные
for (unsigned i = 0; i < n; ++i)
{
fscanf(file, "%s %u", &students[i].name, &students[i].mark);
}
/*
// Печатаем всех
for (i = 0; i < n; ++i)
{
printf("%s %u\n", students[i].name, students[i].mark);
}
*/
qsort(students, n, sizeof(Student), compare); // сортируем
// Печатаем лучших
for (unsigned i = 0; i < k; ++i)
{
printf("%s %u\n", students[i].name, students[i].mark);
}
free(students); // освобождаем память
fclose(file); // закрываем файл
return 0;
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.