2016-10-02 3 views
-8

У меня этот код. Мне нужно, чтобы пользователь мог ввести пять оценок в процентах, найти их среднее значение и отобразить соответствующий класс. он также должен использовать функции, которые я объявил. По какой-то причине, когда программа выполнена, все оценки букв одинаковы, даже если проценты очень разные. Может кто-нибудь, пожалуйста, скажите мне, что мне может понадобиться, чтобы изменить правильную буквенную оценку?Как создать код на C++, который позволит пользователю ввести несколько процентных оценок, а затем отобразить соответствующий класс письма?

#include <iostream> 
#include <string> 

using namespace std; 

float calculateAverage(float math, float english, float science, float history, float geography); 
std::string calculateLetterGrade(float grade); 

int main() 
{ 

    float math = 0; 
    float english = 0; 
    float science = 0; 
    float history = 0; 
    float geography = 0; 

    std::cout << "Enter math grade:\n"; 
    std::cin >> math; 
    std::cout << "Enter english grade:\n"; 
    std::cin >> english; 
    std::cout << "Enter science grade:\n"; 
    std::cin >> science; 
    std::cout << "Enter history grade:\n"; 
    std::cin >> history; 
    std::cout << "Enter geography grade:\n"; 
    std::cin >> geography; 

    float sum = (math + english + science + history + geography); 
    float Average = sum/5; 

    float grade = (math, english, science, history, geography); 
    std::string LetterGrade; 

    if (grade >= 90) 
    { 
    LetterGrade = "A+"; 
    } 
    else if (grade < 90 && grade >= 85) 
    { 
    LetterGrade = "A"; 
    } 
    else if (grade < 85 && grade >= 80) 
    { 
    LetterGrade = "A-"; 
    } 
    else if (grade < 80 && grade >= 77) 
    { 
    LetterGrade = "B+"; 
    } 
    else if (grade < 77 && grade >= 74) 
    { 
    LetterGrade = "B"; 
    } 
    else if (grade < 74 && grade >= 70) 
    { 
    LetterGrade = "B-"; 
    } 
    else if (grade < 70 && grade >= 67) 
    { 
    LetterGrade = "C+"; 
    } 
    else if (grade < 67 && grade >= 64) 
    { 
    LetterGrade = "C"; 
    } 
    else if (grade < 64 && grade >= 60) 
    { 
    LetterGrade = "C-"; 
    } 
    else if (grade < 60 && grade >= 57) 
    { 
    LetterGrade = "D+"; 
    } 
    else if (grade < 57 && grade >= 54) 
    { 
    LetterGrade = "D"; 
    } 
    else if (grade < 54 && grade >= 50) 
    { 
    LetterGrade = "D-"; 
    } 
    else 
    { 
    LetterGrade = "F"; 
    } 

    { 
    grade = math; 
    std::cout << "Math: " << math << " " << LetterGrade << std::endl; 
    } 

    { 
    grade = english; 
    std::cout << "English: " << english << " " << LetterGrade << std::endl; 
    } 

    { 
    grade = science; 
    std::cout << "Science: " << science << " " << LetterGrade << std::endl; 
    } 

    { 
    grade = history; 
    std::cout << "History: " << history << " " << LetterGrade << std::endl; 
    } 

    { 
    grade = geography; 
    std::cout << "Geography: " << geography << " " << LetterGrade << std::endl; 
    } 

    { 
    grade = Average; 
    std::cout << "Average: " << Average << " " << LetterGrade << std::endl; 
    } 

    system("pause"); 
} 
+0

Можете ли вы помочь мне понять, что это значит? -> float grade = (математика, английский, наука, история, география); – HazemGomaa

+0

Разве это даже компилируется? – Falmarri

+0

float grade = (математика, английский, наука, история, география); предполагается, что класс равен использованию полученных входных данных, чтобы оценка могла использоваться для определения LetterGrade. И да, он компилируется. Неправильная же LetterGrade для каждого объекта - единственная проблема с кодом. –

ответ

0

float grade = (math, english, science, history, geography); скомпилирует, но он ничего не принесет пользы. Подробнее здесь: How does the Comma Operator work.

Я рекомендую использовать std::string calculateLetterGrade(float grade); и имейте это в виду тяжелая атлетика.

Итак, давайте сделаем это.

std::string calculateLetterGrade(float grade) 
{ 
    std::string LetterGrade; 
    if (grade >= 90) 
    { 
    LetterGrade = "A+"; 
    } 
    else if (grade < 90 && grade >= 85) 
    { 
    LetterGrade = "A"; 
    } 
    else if (grade < 85 && grade >= 80) 
    { 
    LetterGrade = "A-"; 
    } 
    else if (grade < 80 && grade >= 77) 
    { 
    LetterGrade = "B+"; 
    } 
    else if (grade < 77 && grade >= 74) 
    { 
    LetterGrade = "B"; 
    } 
    else if (grade < 74 && grade >= 70) 
    { 
    LetterGrade = "B-"; 
    } 
    else if (grade < 70 && grade >= 67) 
    { 
    LetterGrade = "C+"; 
    } 
    else if (grade < 67 && grade >= 64) 
    { 
    LetterGrade = "C"; 
    } 
    else if (grade < 64 && grade >= 60) 
    { 
    LetterGrade = "C-"; 
    } 
    else if (grade < 60 && grade >= 57) 
    { 
    LetterGrade = "D+"; 
    } 
    else if (grade < 57 && grade >= 54) 
    { 
    LetterGrade = "D"; 
    } 
    else if (grade < 54 && grade >= 50) 
    { 
    LetterGrade = "D-"; 
    } 
    else 
    { 
    LetterGrade = "F"; 
    } 

    return LetterGrade; 
} 

Есть более эффективные способы сделать это, но это читаемо и очевидно, что происходит и какова цель. Это также просто вырезание и вставка того, что было у OP, в первую очередь, поэтому у меня нет такого ужасного чувства, которое возникает из-за того, что он делает для них домашнюю работу.

ОК. У нас есть функция. И что. Что нам с этим делать?

Что-то вроде этого:

std::cout << "Math: " << math << " " << calculateLetterGrade(math) << std::endl; 
std::cout << "English: " << english << " " << calculateLetterGrade(english) << std::endl; 

Самое главное, чтобы извлечь из этого ваше понимание языка C++ действительно, очень слабая. Вам придется потратить немного больше времени, чтобы учебник работал над проблемами до того, как материал курса станет более продвинутым, и вы получите перегруженность. Лучше, чем тяжелее бегать, чем сбежать позже.

Смежные вопросы