如何在c ++

时间:2016-12-08 16:14:20

标签: c++ arrays struct

所以我编写了一个程序来使用结构和数组来计算文件中学生的最大/最小成绩(很快就是平均成绩)。虽然我确定了最低和最高等级,但我还想添加哪个学生的成绩最高,成绩最低。我怎样才能找到阵列并显示结构的.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;
}

2 个答案:

答案 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进行类似的更改。