// assn2.cpp // This program is intended to read in student grade data and calculate final // grades according to the syllabus for the class. // This function accumulates the class values by passing variables that // are local to main into the recursive function by reference. #include #include double min(double n1,double n2); int recursiveRead(int &As,int &Bs,int &Cs,int &Ds,int &Fs,double &sum); void main(void) { int numAs=0; int numBs=0; int numCs=0; int numDs=0; int numFs=0; double gradeSum=0.0; int numStudents=recursiveRead(numAs,numBs,numCs,numDs,numFs,gradeSum); // Do final output. cout << "There were " << numStudents << " students in the class.\n"; if(numStudents>0) { cout << "The average grade was " << gradeSum/numStudents << ".\n"; cout << "There were " << numAs << " students with As.\n"; cout << "There were " << numBs << " students with Bs.\n"; cout << "There were " << numCs << " students with Cs.\n"; cout << "There were " << numDs << " students with Ds.\n"; cout << "There were " << numFs << " students with Fs.\n"; } else { cout << "With no students there was no average and no grades of any type.\n"; } } double min(double n1,double n2) { return(n1> firstName; if(firstName=="quit") return 0; cin >> lastName; // Variables for storing the assignment grades. double assn1; double assn2; double assn3; double assn4; double assn5; double assn6; double assn7; double assn8; // Variables for storing the quiz grades. double quiz1; double quiz2; double quiz3; double quiz4; double quiz5; double quiz6; // Variables for storing the test grades. double test1; double test2; double classParticip; // Read all the data in. cin >> assn1 >> assn2 >> assn3 >> assn4 >> assn5 >> assn6 >> assn7 >> assn8; cin >> quiz1 >> quiz2 >> quiz3 >> quiz4 >> quiz5 >> quiz6; cin >> test1 >> test2; cin >> classParticip; // Calculate assignment average. double assnAverage=(assn1+assn2+assn3+assn4+assn5+assn6+assn7+assn8)/8.0; // Calculate quiz average. double quizMin=min(quiz1,min(quiz2,min(quiz3,min(quiz4,min(quiz5,quiz6))))); double quizAverage=(quiz1+quiz2+quiz3+quiz4+quiz5+quiz6-quizMin)/5.0; // Calculate test average. double testAverage=(test1+test2)/2.0; // Calculate final average. double finalAverage=0.5*assnAverage+0.3*testAverage+0.1*quizAverage+0.1*classParticip; // Output line for student. cout << firstName << " " << lastName << " " << finalAverage << endl; // Increment the sum of the grades. sum+=finalAverage; // Decide grade type and increment. if(finalAverage>=90.0) { As++; } else if(finalAverage>=80.0) { Bs++; } else if(finalAverage>=70.0) { Cs++; } else if(finalAverage>=60.0) { Ds++; } else { Fs++; } return recursiveRead(As,Bs,Cs,Ds,Fs,sum)+1; }