Средний балл класса
Учитель хочет понять, как в целом прошёл тест: сколько баллов ученики набрали в среднем. Средний балл — это сумма результатов, делённая на количество учеников. Сумма — это приём из урока о циклах: переменная, которая начинается с 0, и цикл, который прибавляет к ней каждое значение. Здесь достаточно цикла for (int score : scores), потому что нужны только результаты.
Посчитает среднее новая функция average(). Она получает вектор как const std::vector<int>&, как и printResults(): без копии и только для чтения. Она возвращает десятичное число, поэтому её тип — double.
Остерегайтесь целочисленного деления. Когда целое число делится на целое, C++ отбрасывает остаток, и результат снова получается целым: 7 / 2 — это 3. Сумма, хранящаяся в переменной int и делённая на scores.size(), дала бы 33 вместо 33.8. Десятичный результат получается, когда хотя бы одно из чисел десятичное (7.0 / 2 — это 3.5). Проще всего сразу складывать значения в переменной double:
std::vector<int> temperatures = {18, 21, 23, 19};
double sum = 0;
for (int t : temperatures) {
sum += t;
}
std::cout << "Средняя температура: " << sum / temperatures.size() << std::endl;Средняя температура: 20.25Ещё одна ловушка: return стоит после цикла. Внутри цикла он завершил бы функцию уже на первом проходе, и среднее считалось бы только по результату первого ученика.
Задание
- 1
Над
printResults()напишите функциюdouble average(const std::vector<int>& scores), которая складывает все элементыscoresи возвращает сумму, делённую на их количество. - 2
В конце
printResults(), после цикла (не внутри него), выведите среднее, которое вычислилаaverage(). Под результатами учеников появится новая строка:Средний балл: 33.8Если вы видите
33, значит, складываете в переменнойint. Если видите8.4, значит,returnстоит внутри цикла.