Лучший ученик
Кто лучше всех написал тесты в этой четверти? Как найти наибольшее значение, вы знаете из урока про массивы: запомнить первый элемент, а в цикле проверять, не больше ли какой-нибудь из остальных. На этот раз вы сравниваете средние баллы учеников, а узнать нужно, кто это, а не только самый высокий средний балл. Поэтому функция запоминает ученика целиком и возвращает его: функция может вернуть структуру так же, как число. Например, самый длинный прыжок на соревнованиях:
#include <stdio.h>
typedef struct {
char name[20];
int jump;
} Athlete;
Athlete longest_jump(const Athlete athletes[], int count) {
Athlete best = athletes[0];
for (int i = 1; i < count; i++) {
if (athletes[i].jump > best.jump) {
best = athletes[i];
}
}
return best;
}
int main(void) {
Athlete athletes[] = {
{"Аня", 412},
{"Борис", 455},
{"Лена", 430},
};
Athlete winner = longest_jump(athletes, 3);
printf("Самый длинный прыжок: %s, %d см\n", winner.name, winner.jump);
return 0;
}Самый длинный прыжок: Борис, 455 смПеременная best начинается с первого спортсмена, поэтому цикл может начинаться с индекса 1. Сравнение через > (а не >=) означает, что при равенстве побеждает тот, кто раньше стоит в массиве.
Обратите внимание на best = athletes[i];. Массив нельзя присвоить через =, а структуру можно: копируются все её поля, даже массив внутри неё. Поэтому в best лежит копия спортсмена, и функция возвращает эту копию. Чтобы прочитать имя и прыжок, этого достаточно.
В вашей функции сравнивайте средние баллы: average(students[i]) > average(best). В print_report() сохраните результат в переменную, например Student best = best_student(students, count);, и выведите имя и средний балл: best.name и average(best).
Задание
- 1
Под
grade()(надprint_report()) напишите функциюStudent best_student(const Student students[], int count), которая возвращает ученика с самым высоким средним баллом. - 2
В конце
print_report(), после цикла (не внутри него), выведите имя и средний балл лучшего ученика:Лучший: Finn (среднее 48.3)Если вместо него появился Jack, сравнение у вас написано не в ту сторону.