【问题标题】:Average of an array (struct)数组(结构)的平均值
【发布时间】:2011-11-19 18:09:15
【问题描述】:

我一直在做这件事,但似乎找不到正确的方法。我只留下了有效的代码,因为其余的只是令人尴尬...

使用 2 个数组创建一个程序,其中包含 10 个学生的班级数据集: 第一个数组包含学生的名字和姓氏(在不同的单元格中) 第二个数组保存每个学生的成绩(共 5 个) 创建适当的函数来加载和显示数组,包括平均值 和学生的字母等级。从学生的平均成绩中去掉最低分。

我不是要求别人为我做这件事,我只是想要一些帮助。

#include <cstdlib>
#include <iostream>

using namespace std;

const int CLASSIZE = 1;

struct student
{
    string firstName;
    string lastName;

    void printTheInfo()
    {
        cout << "Name: " << firstName << " " << lastName;
    }
    void loadMe()
    {
        cout << "First Name: ";
        cin >> firstName;
        cout << "Last Name: ";
        cin >> lastName;
    }
};
struct grades
{
    int grade1;
    int grade2;
    int grade3;
    int grade4;
    int grade5;

    void printTheGrades()
    {
        cout << " Grades: " << grade1 << " " << grade2 << " " << grade3
             << " " << grade4 << " " << grade5 << endl;
    }
    void loadGrades()
    {
        cout << "Grade 1: ";
        cin >> grade1;
        cout << "Grade 2: ";
        cin >> grade2;
        cout << "Grade 3: ";
        cin >> grade3;
        cout << "Grade 4: ";
        cin >> grade4;
        cout << "Grade 5: ";
        cin >> grade5;
    }
};

void printAllStudents(student [], grades [], int);
void loadAllStudents(student [], grades [], int);

int main(int argc, char *argv[])
{    
    student theStudent[CLASSIZE];
    grades theGrade[CLASSIZE];

    loadAllStudents(theStudent, theGrade, CLASSIZE);
    printAllStudents(theStudent, theGrade, CLASSIZE);

    system("PAUSE");
    return EXIT_SUCCESS;
}

void loadAllStudents(student theStudents[], grades theGrades[], int s) 
{
    for(int i = 0; i < s; i++)
    {
        theStudents[i].loadMe();
        theGrades[i].loadGrades();
    }
}
void printAllStudents(student theStudents[], grades theGrades[], int s) 
{
    for(int i = 0; i < s; i++)
    {
        theStudents[i].printTheInfo(); 
        theGrades[i].printTheGrades();
    }
}

【问题讨论】:

  • 重新标记以删除“C”。此代码使用 C++ 字符串和流,与 C 不兼容。
  • +1 以获得出色的代码格式。
  • 你还没有说等级数组有什么问题所以我不知道如何更正它,但是要计算单个平均值并显示它们,只需在grades::PrintTheGrades添加一些代码即可添加grade1 + grade2 + ... + grade5 加在一起除以 5 得到平均值,并显示出来。 Basile 也是对的,拥有像 int allgrades[5] 这样的整数数组而不是 int grade1; int grade2; ... 会更容易,这样您就可以使用循环将所有成绩加在一起。
  • 这里是一个例子:codepad.org/3fFXzDT7
  • 您应该使用签名char letterGrade(double d) 创建一个函数并将其传递给双倍的成绩。 letterGrade 应该返回代表等级的字符,然后您只需显示它。例如,如果您想显示字母而不是数字,在我的示例中,您可以将 cout &lt;&lt; endl &lt;&lt; " Average: " &lt;&lt; (average / NUMBER_OF_GRADES) &lt;&lt; endl; 更改为 cout &lt;&lt; endl &lt;&lt; " Average: " &lt;&lt; letterGrade(average / NUMBER_OF_GRADES) &lt;&lt; endl;

标签: c++ arrays struct average


【解决方案1】:

首先创建一个成绩数组。您可以为此使用 double : 双等级[5],而不是等级1,...,等级5。 那么计算平均值就更容易了。 在计算每个学生的平均值时,您可以将当前最小值存储在一个变量中。

【讨论】:

    猜你喜欢
    • 2018-07-19
    • 2016-08-16
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2013-10-25
    • 2017-10-11
    相关资源
    最近更新 更多