2014-09-23 38 views
0

我的目标是拿(3)学生,给他们每个(3)的成绩,然后每个学生的这些成绩的平均值以及字母等级。这部分运作良好。我需要的最后一部分是取这些(3)平均成绩,加上它们,然后再取平均值作为班级平均成绩。C++ |一个数组,switch语句?需要一些指导

我应该怎样才能让班级平均?阵列?切换语句?我问的原因是因为我真的不知道。我完全无能为力,因为我如何才能做到这一点。

#include <iostream> 
#include <ostream> 
#include "stdafx.h" 
using namespace std; 

// start the program 
int main() { 
    // LOCAL VARIABLES 
    // int student1, student2, student3;  //the (3) students -- NOT EVEN SURE 
    // I NEED THIS 
    int all_students; // number of students 
    double grade1, grade2, grade3; // the (3) grade variable declarations 
    double grade_total; // holds the sum of all grades 
    double grade_avg; // holds the average of the sum of grades 

    cout << "Enter the number of students in the class: "; // number of students 
                  // request 
    cin >> all_students; 

    all_students = 1; // initialize counter for the loop 

    // need to create a loop for all three students and input for 3 
    // grades/student 
    while (all_students <= 3) // start the loop for the students 
    { 
     cout << "\n\nPlease enter (3) numeric grades for student " 
      << all_students << ":"; // enters the 3 grades for student 
     cin >> grade1 >> grade2 >> 
      grade3; // the grades are stored in these 3 variables 

     grade_total = grade1 + grade2 + 
         grade3; // sum is the 3 sets of graders added together 
     grade_avg = grade_total/3; // avg. is the sum divided by 3 

     // displays the output for the student grades, grade average, and letter 
     // grade 
     cout << "Student " << all_students << " grades are \n" << grade1 << "\n" 
      << grade2 << "\n" << grade3 << "\n" 
      << "with an average of: " << grade_avg 
      << ", which is letter grade: "; // need this line to also read the 
              // letter grade for the average 
              // grade 

     if (grade_avg >= 90) // 90+ gets an A 
      cout << "A"; 
     else if (grade_avg >= 80) // 80-89 gets a B 
      cout << "B"; 
     else if (grade_avg >= 70) // 70-79 gets a C 
      cout << "C"; 
     else if (grade_avg >= 60) // 60-69 gets a D 
      cout << "D"; 
     else // anything less than a 60% is an F 
      cout << "F"; 

     // increases counter! Incrementer. 
     all_students++; // Yes, I want to increment the count after the loop. 

     //****************************************************************// 
     //  I need to figure out how to create an array to hold  // 
     //  each student average in order to calculate the overall // 
     //  class average. Or use a switch statement? Advice?  // 
     //****************************************************************// 
     //****************************************************************// 
     //****************************************************************// 
    } 
} 

回答

1

最简单的方法是有一个正在运行的平均

float classAvg = 0; 
const unit NUM_STUDENTS = 3; 
while (all_students <= NUM_STUDENTS)  //start the loop for the students 
{ 
    ... 
    classAvg += grade_avg; 
} 

classAvg /= NUM_STUDENTS 
cout<<"Class average is " << classAvg; 

我还建议让该数字年级字母等级转换成一个功能的部分。这将使您的代码更加模块化和更清晰。沿着线的东西:

void displayLetterGrade(float grade) 
{ 
     if (grade >= 90) // 90+ gets an A 
      cout << "A"; 
     else if (grade >= 80) // 80-89 gets a B 
      cout << "B"; 
     else if (grade >= 70) // 70-79 gets a C 
      cout << "C"; 
     else if (grade >= 60) // 60-69 gets a D 
      cout << "D"; 
     else // anything less than a 60% is an F 
      cout << "F"; 
} 
+0

我同意的平均值的averge。我会刚刚返回一个字符串/字符,但我不想更改他的代码太多。我会更新示例以反映您的评论。 – ventsyv 2014-09-23 17:54:44

+0

太棒了。我会重做我的代码以反映您的建议。谢谢。我会回来看看其他人是否还有其他建议。我感谢你的时间。 – 2014-09-23 17:58:14

+0

因此,在添加void函数时,编译器告诉我:错误C2601:'displayLetterGrade':本地函数定义是非法的。它告诉我,在(浮动等级)之后{<---应该有一个';',这是没有意义的。不知道该怎么做。 – 2014-09-24 15:44:20

1

您需要创建的同时与学生的最大数,那么(在它的端部)while循环外的阵列中的每个计算的平均分配到阵列中的一个条目。

然后while循环外,写一个for循环来计算阵列中的元件,其是每个学生

+0

这也有道理。虽然听起来好像我可以通过走另一条路线来简化它。无论如何,我可能需要尝试2或3种不同的选项,所以也请您给予指导。欢迎您拨打 – 2014-09-23 17:59:44

+0

,告诉我们它何时有效 – OmarGW 2014-09-23 18:09:16