所以我编写了一个程序来使用结构和数组来计算文件中学生的最大/最小成绩(很快就是平均成绩)。虽然我确定了最低和最高等级,但我还想添加哪个学生的成绩最高,成绩最低。我怎样才能找到阵列并显示结构的.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;
}
答案 0 :(得分:0)
您不仅需要在import sjcl from 'sjcl';
函数中存储max
,还需要存储具有calculateMaximumGrade
等级的元素的索引。
那就是:
max
如您所见,您也不能返回int calculateMaximumGrade(student studentArray[], int numberOfStudents)
{
float max = studentArray[0].grade;
int index_of_max = 0;
for (int i = 0; i < numberOfStudents; i++) {
if (studentArray[i].grade > max) {
index_of_max = i;
max = studentArray[i].grade;
}
}
return index_of_max;
}
,而是max
。然后,您应该在index
:
main
您应该对int index_of_max = calculateMaximumGrade(studentArray, numofStudents);
cout << "Highest grade: " << studentArray[index_of_max].grade << ". Student, who got it: " << studentArray[index_of_max].first << " " << studentArray[index_of_max].last << endl;
和Average
函数执行相同操作。
答案 1 :(得分:0)
您可以更改(并重命名)您的calculateMinimumGrade
功能,以记录最低成绩的学生的索引,并返回该成绩本身而不是成绩。
// find the student with the lowest grade
int findLowestStudent(student studentArray[], int numberOfStudents)
{
int lowest = 0;
float min = 0;
min = studentArray[0].grade;
for (int i = 0; i < numberOfStudents; i++) {
if (studentArray[i].grade < min) {
min = studentArray[i].grade;
lowest = i;
}
}
return lowest;
}
然后,您可以使用该索引访问学生的成绩。
int lowest = findLowestStudent(studentArray, numofStudents);
cout << "Lowest grade: " << studentArray[lowest].grade << endl;
您可以使用相同的索引来访问学生的姓名。显然,您需要对calculateMaximumGrade
进行类似的更改。