成绩60分及以上的课程才予以计算绩点
绩点计算公式:[(课程成绩-50) / 10 ] * 学分
学生总绩点为所有绩点之和除以10
输入格式:
班级数
课程数 各个课程的学分
班级人数
姓名 各科成绩
输出格式:
class 班级号:
姓名(占10个字符,左对齐) 绩点
先按绩点排序,再按姓名ASCII码排序。
输入样例:
1
3 3 4 3
3
张三 89 62 71
Smith 98 50 80
王五 67 88 91
输出样例
class 1:
王五 3.26
Smith 2.34
张三 2.28
#include<iostream>
#include<fstream>
#include<vector>
#include<set>
#include<string>
#include<iomanip>
using namespace std;struct Student{string name;double score;Student(string n, double s):name(n),score(s){}bool operator<(const Student& s) const {if(this->score != s.score)return this->score > s.score;elsereturn this->name < s.name;}
}; int main(){ifstream cin("data.txt");//读取班级数,并对每个班级的数据进行操作 int classNum = 0;while(cin >> classNum){cout << "class #:" << classNum<< endl;//读入课程数,并记录课程的学分 int courseNum = 0;cin >> courseNum;vector<int> xuefenVec(courseNum);for(int i = 0; i < courseNum; ++i)cin >> xuefenVec[i];//读入学生数,并将学生用set进行排序 int stuNum = 0;cin >> stuNum;set<Student> stuSet; for(int i = 0; i < stuNum; ++i){string name;cin >> name;double sum = 0;for(int j = 0; j < courseNum; ++j){double score = 0;cin >> score;if (score >= 60){sum += ((score-50)/10)*xuefenVec[j];}}Student s(name, sum/10);stuSet.insert(s); } //按序输出学生信息 for(set<Student>::iterator it = stuSet.begin(); it != stuSet.end(); ++it){cout << left << setw(10);cout << it->name << it->score << endl;}cout << endl;}return 0;
}