Да, любое число, кроме -1,0 или 1, вероятно, является магическим числом.
Если вы не настоящий гуру, то вам, вероятно, также разрешено свободно использовать полномочия двух: -)
Кроме того, вы могли бы, вероятно, реорганизовать этот код, чтобы он был немного более понятным, что-то вроде:
string CalcGrade (int s1, int s2, int s3, double median) {
// Grade lookup arrays. If grade is >= limit[n], string is grades[n].
// Anything below D- is a fail.
static const int Limits[] = {400, 380, 360, 340,320, 300, 280,260, 240, 220,200,180 };
static const int Grades[] = {"A+","A","A-","B+","B","B-","C+","C","C-","D+","D","D-"};
double finalGrade = s1 + s2 + s3 + median;
// Check each element of the array and, if the final grade is greater
// than or equal to, return the grade string.
for (int i = 0; i < sizeof(Limits) / sizeof(*Limits); i++)
if (finalGrade >= Limits[i])
return Grades[i];
// Otherwise, failed.
return "Fail";
}
Это удаляет магические числа, разбросанные по всему коду, в область, где сразу видно, как они работают (при условии, что вы правильно их выровняете).
Это также устраняет проблему с вашим исходным решением в отношении того, что мы делаем с кем-то, кто набрал 380,5 баллов - это не действительно справедливо, если эти тела не пройдут :-) Или присвоить оценку ""
для тех, кто превышает 400 (поскольку, похоже, нет способа вернуть "A+"
).