Вы не хотели бы использовать оператор switch, чтобы определить, где значение попадает в набор диапазонов.
Если вы хотите немного обобщить и избежать нескольких операторов if / else с жестко закодированными условиями, вы можете создать карту. то есть вы, по сути, сопоставляете набор целых чисел с набором оценок.
Ниже приведен простой пример, который использует поиск по таблице для сопоставления оценок с оценками. Вы также можете создать закрытую математическую формулу, которая сопоставляет оценки с оценками, и просто вычислять оценку непосредственно из оценки, а не просматривать ее через таблицу. например f (x) = floor (2 * (x-50) / 20) отображает оценки от [0,100] на целые оценки в диапазоне [0,5]
typedef struct
{
int rangeLow;
char grade;
} RangeToGradeMap;
RangeToGradeMap[] scoreToGradeMapping =
{
{ 90, 'A' }
{ 85, 'B' },
{ 70, 'C' },
{ 60, 'D' },
{ 0, 'F' },
};
char GradeLookup(int score)
{
size_t N = sizeof(scoreToGradeMapping)/sizeof(RangeToGradeMap);
for (size_t i = 0; i < N; ++i)
{
if (score >= scoreToGradeMapping[i].rangeLow)
{
return scoreToGradeMapping[i].grade;
}
}
// If we got here, there was an error - we didn't find the range
return '?';
}
int main(int argc, char** argv)
{
char grade = GradeLookup(87);
return 0;
}