// ****************************************************************** // // Grades.cpp // // This program computes student grades. For each student, two // quiz grades (graded on a 10 point basis), one midterm exam grade // and one final exam grade (each on a 100 point basis) are read // in. The final numeric grade is computed weighing the final // exam 50%, the midterm 25%, and the quizzes 25%. The numeric // grade and corresponding letter grade are output. // // ****************************************************************** #include using namespace std; // // Structure for a student record // struct StudentRecord { int quiz1, quiz2, midtermExam, finalExam; double courseAverage; char letterGrade; }; // function declaration a.k.a function prototype void inputRecord (StudentRecord& recordFormalParameter); void outputRecord (StudentRecord recordFormalParameter); void computeAverage (StudentRecord& recordFormalParameter); char letterGrade (double numericGradeFormalParameter); int main () { StudentRecord pupilRecord; inputRecord (pupilRecord); computeAverage (pupilRecord); outputRecord (pupilRecord); return 0; } void inputRecord (StudentRecord& record) { cout << "\nEnter first quiz score: "; cin >> record.quiz1; cout << "\nEnter second quiz score: "; cin >> record.quiz2; cout << "\nEnter mid-term exam score: "; cin >> record.midtermExam; cout << "\nEnter final exam score: "; cin >> record.finalExam; cout << endl; } // -------------------------------- // --------- END USER CODE -------- // -------------------------------- void outputRecord (StudentRecord record) { cout << endl; cout << "Quiz Scores: " << record.quiz1 << " " << record.quiz2 << endl; cout << "Midterm Exam Score: " << record.midtermExam << endl; cout << "Final Exam Score: " << record.finalExam << endl; cout << endl; cout << "Course Average: " << record.courseAverage << endl; cout << "Final Letter Grade: " << record.letterGrade << endl; cout << endl; } void computeAverage (StudentRecord& record) { const double EXAM_WT = 0.5; const double MIDTERM_WT = 0.25; const double QUIZ_WT = 0.25; double quiz1Percent, quiz2Percent; // // Convert the 10 point quizzes to a percent, then find the average // quiz1Percent = 100 * record.quiz1 / 10.0; quiz2Percent = 100 * record.quiz2 / 10.0; double quizAvg = (quiz1Percent + quiz2Percent) / 2; // // Compute the weighted average to get the numeric course grade // record.courseAverage = quizAvg * QUIZ_WT + record.midtermExam * MIDTERM_WT + record.finalExam * EXAM_WT; // // Call the letterGrade function to find the corresponding letter grade record.letterGrade = letterGrade (record.courseAverage); } char letterGrade (double numericGrade) { char letter; if (numericGrade < 60) letter = 'F'; else if (numericGrade < 70) letter = 'D'; else if (numericGrade < 80) letter = 'C'; else if (numericGrade < 90) letter = 'B'; else letter = 'A'; return letter; } /* * Example 1: * Enter first quiz score: 10 Enter second quiz score: 10 Enter mid-term exam score: 100 Enter final exam score: 100 Quiz Scores: 10 10 Midterm Exam Score: 100 Final Exam Score: 100 Course Average: 100 Final Letter Grade: A Press any key to continue . . . * * Example 2: * Enter first quiz score: 6 Enter second quiz score: 7 Enter mid-term exam score: 40 Enter final exam score: 70 Quiz Scores: 6 7 Midterm Exam Score: 40 Final Exam Score: 70 Course Average: 61.25 Final Letter Grade: D Press any key to continue . . . */