【发布时间】:2016-12-08 16:14:19
【问题描述】:
所以我编写了一个程序来使用结构和数组来计算文件中学生的最高/最低成绩(很快就会是平均成绩)。虽然我确实计算出了最低和最高成绩,但我还想添加最高成绩和最低成绩的学生。如何找到数组行并显示结构的 .first 和 .last?
#include <iostream>
#include <string>
#include <fstream>
#include <array>
using namespace std;
struct student {
int id;
string first;
string last;
float grade;
};
string getFileName();
void fillArrayFromFile(ifstream&, student[], int&);
float calculateMaximumGrade(student[], int);
float calculateMinimumGrade(student[], int);
float calculateAverageGrade(student[], int);
int main() {
int numofStudents = 5;
const int NUM_VALS = 5;
student studentArray[NUM_VALS];
ifstream filename;
//filename.open(getFileName() + ".txt");
fillArrayFromFile(filename, studentArray, numofStudents);
cout << "Highest grade: " << calculateMaximumGrade(studentArray, numofStudents) << endl;
cout << "Lowest grade: " << calculateMinimumGrade(studentArray, numofStudents) << endl;
//cout << "Average grade: " << calculateAverageGrade(studentArray, numofStudents) << endl;
return 0;
}
string getFileName()
{
// To be completed
return 0;
}
void fillArrayFromFile(ifstream& ins, student studentArray[], int& numberOfStudents)
{
ins.open("input.txt");
for (int i = 0; i < numberOfStudents; i++) {
ins >> studentArray[i].id;
ins >> studentArray[i].first;
ins >> studentArray[i].last;
ins >> studentArray[i].grade;
}
ins.close();
return;
}
// calculate the maximum grade in the array
float calculateMaximumGrade(student studentArray[], int numberOfStudents)
{
float max = 0;
max = studentArray[0].grade;
for (int i = 0; i < numberOfStudents; i++) {
if (studentArray[i].grade > max) {
max = studentArray[i].grade;
}
}
return max;
}
// calculate the minimum grade in the array
float calculateMinimumGrade(student studentArray[], int numberOfStudents)
{
float min = 0;
min = studentArray[0].grade;
for (int i = 0; i < numberOfStudents; i++) {
if (studentArray[i].grade < min) {
min = studentArray[i].grade;
}
}
return min;
}
// calculate the average grade in the array
float calculateAverageGrade(student studentArray[], int numberOfStudents)
{
// To be completed
return 0;
}
【问题讨论】:
-
最后是 studentArray[numberOfStudents - 1],首先是 studentArray[0]
-
您可以执行以下操作 .... 在评估最大值时,不仅要跟踪最大值,还要跟踪您分配给 max 变量的等级的对象。为此,创建一个学生类型的对象 letSay MaxObject 并在 if 旁边的 max = ... 下分配 MaxObject = student[i],然后循环显示您创建的对象的字段。如果您不想在该函数中显示,那么您可以将对学生对象的引用传递给此函数,并且在此函数结束后,您发送的引用对象将保存最大学生的值。与显示 Min Student 相同