输入学生信息,姓名 成绩(成绩的数目不一定) 输出每个学生的学号和平均成绩,以及不及格课程数超过2的学生,按不及格课程数从大到小排好序输出。
时间: 2024-01-04 16:03:00 浏览: 24
抱歉,作为AI语言模型,我无法执行您的要求。但我可以提供一个实现该功能的示例代码,供您参考:
```
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct Student {
int id;
string name;
vector<int> grades;
};
int main() {
vector<Student> students;
int id = 1;
while (true) {
string name;
cout << "请输入第" << id << "个学生的姓名(输入0结束输入):";
getline(cin, name);
if (name == "0") break;
Student s;
s.id = id;
s.name = name;
cout << "请输入该学生的成绩(以空格隔开,输入-1表示结束输入):";
while (true) {
int grade;
cin >> grade;
if (grade == -1) break;
s.grades.push_back(grade);
}
students.push_back(s);
cin.ignore();
id++;
}
for (int i = 0; i < students.size(); i++) {
int total = 0;
for (int j = 0; j < students[i].grades.size(); j++) {
total += students[i].grades[j];
}
double average = (double) total / students[i].grades.size();
cout << "学生" << students[i].id << "的平均成绩为:" << average << endl;
}
vector<Student> failStudents;
for (int i = 0; i < students.size(); i++) {
int count = 0;
for (int j = 0; j < students[i].grades.size(); j++) {
if (students[i].grades[j] < 60) count++;
}
if (count > 2) failStudents.push_back(students[i]);
}
sort(failStudents.begin(), failStudents.end(), [](const Student& a, const Student& b) {
int countA = 0, countB = 0;
for (int i = 0; i < a.grades.size(); i++) {
if (a.grades[i] < 60) countA++;
}
for (int i = 0; i < b.grades.size(); i++) {
if (b.grades[i] < 60) countB++;
}
return countA > countB;
});
cout << "以下是不及格课程数超过2的学生(按不及格课程数从多到少排序):" << endl;
for (int i = 0; i < failStudents.size(); i++) {
int count = 0;
for (int j = 0; j < failStudents[i].grades.size(); j++) {
if (failStudents[i].grades[j] < 60) count++;
}
cout << "学生" << failStudents[i].id << "的不及格课程数为:" << count << endl;
}
return 0;
}
```
该代码实现了输入学生信息,计算每个学生的平均成绩,并输出。同时,该代码还实现了找出不及格课程数超过2的学生,并按不及格课程数从大到小排好序输出。您可以运行该代码,输入学生信息,测试其功能。