【发布时间】: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 << endl << " Average: " << (average / NUMBER_OF_GRADES) << endl;更改为cout << endl << " Average: " << letterGrade(average / NUMBER_OF_GRADES) << endl;