#include #include using namespace std; const int NUM_EXAMS = 3; struct student { string name; double ave; char grade; int examScores[NUM_EXAMS]; }; // function prototypes void readAllStu(student[], int&, int); void readOneStu(student&, int); void calcStuAverage(student[], int, int); void calcClassAverage(student[], int, double[], int); void display(student[], int, double[], int); void assignGrade(student[], int, int[]); double calcAve(int[], int); int main() { const int SIZE = 20; student cis67[SIZE]; const int NUM_EXAMS = 3; double classAve[NUM_EXAMS]; int minScore[4] = {90, 80, 70, 60}; int numStu; // Read all student data readAllStu(cis67, numStu, NUM_EXAMS); // Calculate each student's exam ave calcStuAverage(cis67, numStu, NUM_EXAMS); // Calculate class ave for each exam calcClassAverage(cis67, numStu, classAve, NUM_EXAMS); // Assign a letter grade. assignGrade(cis67, numStu, minScore); // Display all results display(cis67, numStu, classAve, NUM_EXAMS); // cout << cis67[0].name << cis67[0].ave << endl; // cout << classAve[0] << " " << classAve[1] << " " << classAve[2] << endl; return 0; } void assignGrade(student cis67[], int numStu, int minScore[4]) { for (int nextStu = 0; nextStu < numStu; nextStu++) { if (cis67[nextStu].ave >= minScore[0]) cis67[nextStu].grade = 'A'; else if (cis67[nextStu].ave >= minScore[1]) cis67[nextStu].grade = 'B'; else if (cis67[nextStu].ave >= minScore[2]) cis67[nextStu].grade = 'C'; else if (cis67[nextStu].ave >= minScore[3]) cis67[nextStu].grade = 'D'; else cis67[nextStu].grade = 'F'; } } void readOneStu(student& aStu, int NUM_EXAMS) { cout << "Enter name and " << NUM_EXAMS << " exams" << endl; cin >> aStu.name; for (int i = 0; i < NUM_EXAMS; i++) cin >> aStu.examScores[i]; cin.ignore(20, '\n'); // skip end of line } void readAllStu(student cis67[], int& numStu, int NUM_EXAMS) { cout << "How many students > "; cin >> numStu; for (int i = 0; i < numStu; i++) readOneStu(cis67[i], NUM_EXAMS); } void calcStuAverage(student cis67[], int numStu, int NUM_EXAMS) { for (int nextStu = 0; nextStu < numStu; nextStu++) { cis67[nextStu].ave = calcAve(cis67[nextStu].examScores, NUM_EXAMS); } } double calcAve(int x[], int size) { int sum = 0; for (int i = 0; i < size; i++) sum += x[i]; return (double) sum / size; } void calcClassAverage(student cis67[], int numStu, double classAve[], int NUM_EXAMS) { int sum; for (int nextExam = 0; nextExam < NUM_EXAMS; nextExam++) { sum = 0; for (int nextStu = 0; nextStu < numStu; nextStu++) sum += cis67[nextStu].examScores[nextExam]; classAve[nextExam] = (double) sum / numStu; } } void displayOneStu(student aStu, int NUM_EXAMS) { cout << aStu.name << " "; for (int i = 0; i < NUM_EXAMS; i++) cout << aStu.examScores[i] << " "; cout << aStu.ave << " " << aStu.grade << endl; } void display(student cis67[], int numStu, double classAve[], int NUM_EXAMS) { for (int nextStu = 0; nextStu < numStu; nextStu++) { displayOneStu(cis67[nextStu], NUM_EXAMS); } cout << "average "; for (int nextExam = 0; nextExam < NUM_EXAMS; nextExam++) cout << classAve[nextExam] << " "; cout << endl; }