我正在为我的编程课程完成一项任务:实现课堂上讨论的成绩平均课程。成绩信息将在输入文件中,其中每个学生的信息分为两行:第一行是学生姓名,其名称为姓名中间名,第二行是学生成绩,即整数。 (学生可能没有中间名。)最多可以有20名学生,每名学生将有10个年级。程序应该从用户请求输入文件的名称。对于每个学生,计算他们的总体平均值(假设每个任务的价值相同)。将信息输出到屏幕,每个学生一行,每行是他们的“名字”(在姓氏,名字中间名,10个等级,平均值,按姓氏排序。平均值应在两个小数位上进行两次显示(即3.1将输出为3.10)。您应该使用三个数组来解决这个问题,并使用一组合理的函数。这就是我到目前为止所做的。
#include <iostream>
#include <string>
#include <fstream>
#include <climits>
#include <iomanip>
using namespace std;
const int NGrades= 10;
const int maxStudents=20;
string reformat(string& s);
int main(){
int num_of_students = 0;
string fullName;
double sum=0;
string names[maxStudents];
int grades[maxStudents][NGrades];
double average[maxStudents];
string fileName;
ifstream inputFile;
cout<< "Please type the file name including extension(such as .txt)."<<endl;
cout<< "If your file is in a different directory please specify the path:"; //asking user for file name. seperated into two cout statments for readibility
getline(cin,fileName);
inputFile.open(fileName.c_str());
if (!inputFile){ //produce an error if the file name is invalid
cout<<"Cannot open "<<fileName<<"."<<endl;
return 1;
}
while(getline(inputFile, fullName)){
names[num_of_students]=reformat(fullName);
cout << setw(20)<< names[num_of_students]<<" "<< setw(20);
for (int i = 0; i < NGrades; ++i){
inputFile >> grades[num_of_students][i];
cout <<setw(4)<<grades[num_of_students][i];
sum = sum + grades[num_of_students][i];
}
average[num_of_students]= sum/NGrades;
sum=0;
cout <<setw(15);
cout<< fixed << showpoint;
cout << setprecision(2);
cout <<average[num_of_students]<< endl;
inputFile.ignore(INT_MAX, '\n');
++num_of_students;
}
inputFile.close();
return 0;
}
string reformat(string& s){
int pos, posTwo;
string first_Middle;
string lastname;
string finished;
pos = s.find_first_of(' ');
first_Middle=s.substr(0,pos+2);
posTwo=s.find_first_of(' ', pos+1);
lastname=s.substr(posTwo+1);
finished=lastname+ ", "+first_Middle;
return finished;
}
我现在需要做的是使用swap按姓氏的字母顺序排列名称。我不允许使用结构或类似的东西。
答案 0 :(得分:0)
首先阅读: http://en.wikipedia.org/wiki/Selection_sort
您应该将所有数据存储在三个数组容器中;然后,使用排序算法,您的程序应该正确打印输出。
询问更具体的问题,比如如何比较字符串。如果有人重写您的代码,您将无法获得知识。