结构体排序在成绩处理中的应用与错误分析
学生成绩排序实现
使用结构体存储学生信息,按总分降序排序,总分相同时按输入顺序排序:
#include<iostream>
#include<algorithm>
using namespace std;
struct Student {
string name;
int chinese;
int math;
int english;
int total;
int seq;
};
bool compare(Student s1, Student s2) {
if(s1.total != s2.total)
return s1.total > s2.total;
return s1.seq < s2.seq;
}
int main() {
int n;
cin >> n;
Student records[1005];
for(int i=0; i<n; i++) {
cin >> records[i].name >> records[i].chinese
>> records[i].math >> records[i].english;
records[i].total = records[i].chinese + records[i].math + records[i].english;
records[i].seq = i;
}
sort(records, records+n, compare);
cout << records[0].name << " " << records[0].chinese
<< " " << records[0].math << " " << records[0].english;
return 0;
}
成绩等级评定逻辑
计算总分和加权成绩,根据条件判断优秀等级:
#include<iostream>
using namespace std;
struct Evaluation {
int id;
int academic;
int practical;
double composite;
int total;
};
int main() {
int n;
cin >> n;
Evaluation data[1005];
for(int i=0; i<n; i++) {
cin >> data[i].id >> data[i].academic >> data[i].practical;
data[i].composite = data[i].academic*0.7 + data[i].practical*0.3;
data[i].total = data[i].academic + data[i].practical;
}
for(int i=0; i<n; i++) {
if(data[i].total > 140 && data[i].composite >= 80)
cout << "Excellent" << endl;
else
cout << "Not excellent" << endl;
}
return 0;
}
比赛评分计算修正
错误修复:最大值最小值初始化位置不当,需在循环内重置;去除极值应直接减分而非置零:
#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;
const int MAX = 1005;
double scores[MAX][MAX];
double sums[MAX];
double averages[MAX];
int main() {
int n, m;
cin >> n >> m;
for(int i=0; i<n; i++) {
int maxVal = 0, minVal = 100;
for(int j=0; j<m; j++) {
cin >> scores[i][j];
maxVal = max(maxVal, (int)scores[i][j]);
minVal = min(minVal, (int)scores[i][j]);
sums[i] += scores[i][j];
}
sums[i] -= maxVal + minVal;
averages[i] = sums[i] / (m - 2);
}
sort(averages, averages+n, greater<double>());
cout << fixed << setprecision(2) << averages[0];
return 0;
}
奖学金排序规则修正
错误修复:总分相同时未正确处理语文成绩排序:
#include<iostream>
#include<algorithm>
using namespace std;
struct Scholar {
int id;
int chinese;
int math;
int english;
int total;
};
bool comp(Scholar s1, Scholar s2) {
if(s1.total != s2.total)
return s1.total > s2.total;
if(s1.chinese != s2.chinese)
return s1.chinese > s2.chinese;
return s1.id < s2.id;
}
int main() {
int n;
cin >> n;
Scholar list[305];
for(int i=0; i<n; i++) {
cin >> list[i].chinese >> list[i].math >> list[i].english;
list[i].id = i+1;
list[i].total = list[i].chinese + list[i].math + list[i].english;
}
sort(list, list+n, comp);
for(int i=0; i<5; i++) {
cout << list[i].id << " " << list[i].total << endl;
}
return 0;
}