Оценки
Каждому среднему баллу ставится оценка. Учитель ставит её так:
- средний балл 45 и выше: A
- 38 и выше: B
- 30 и выше: C
- 20 и выше: D
- меньше 20: F
Это выбор из нескольких вариантов, а для него и нужен else if. Вынесите его в функцию, которая получает средний балл и возвращает оценку. В функции может быть несколько return, а какой из них выполнится, решает условие. Оценка — это буква, поэтому функция возвращает char: напишите char перед её именем, а буквы возвращайте в одинарных кавычках, например 'A'. Вот пример с размерами футболок:
#include <stdio.h>
char shirt_size(int height) {
if (height < 150) {
return 'S';
} else if (height < 175) {
return 'M';
} else {
return 'L';
}
}
int main(void) {
printf("%c\n", shirt_size(140));
printf("%c\n", shirt_size(160));
printf("%c\n", shirt_size(185));
return 0;
}S
M
LПорядок условий важен. Программа проверяет их сверху вниз и выполняет только первое истинное. Поэтому каждое следующее условие проверяется, только если ни одно из предыдущих не было истинным. Человек ростом 140 см подходит и под height < 175, но до этого условия программа не доходит. В grade() начните с самой высокой границы. Если бы первым стояло условие avg >= 20, оно было бы истинным и для Finn со средним баллом 48.3, и он получил бы D.
Следите и за границами: средний балл ровно 38 — это ещё B, поэтому условие avg >= 38, а не avg > 38.
И следите за кавычками: "A" в двойных кавычках — это строка, а не char, и компилятор сообщит об ошибке:
main.c:21:16: error: incompatible pointer to integer conversion returning 'char[2]' from a function with result type 'char' [-Wint-conversion]В каждой строке средний балл нужен дважды: чтобы вывести его и чтобы определить оценку. Поэтому сохраните его в переменную, double avg = average(students[i]);, и average() будет вызываться только один раз.
Задание
- 1
Над
print_report()напишите функциюchar grade(double avg), которая возвращает'A'при среднем балле 45 и выше,'B'при 38 и выше,'C'при 30 и выше,'D'при 20 и выше и'F'в остальных случаях. - 2
В
print_report()сохраните средний балл ученика в переменнуюavg, а в конце строки выведите его, два пробела и оценку изgrade():printf("%6.1f %c\n", avg, grade(avg));. Программа выведет:ИТОГИ ПО МАТЕМАТИКЕ Adam 42 38 45 41.7 B Emma 36 33 38 35.7 C Finn 48 50 47 48.3 A Jack 14 22 17 17.7 F Lucy 27 40 41 36.0 CЕсли у Finn получилось D, проверьте порядок условий: самая высокая граница идёт первой.