采用动态内存分配方法设计一个学生处理程序,要求输入任意数量学生的学号、姓名和四门课的成绩,并按平均成绩高低输出每个学生的姓名和成绩。帮我用C++写一下
时间: 2024-09-10 14:15:13 浏览: 79
1_lower7y7_定义一个包含学生信息(学号_成绩)的顺序表和链表(二选一)_姓名_使其具有如下功能_
5星 · 资源好评率100%
在C++中,我们可以使用结构体定义学生信息,并通过动态内存分配来处理任意数量的学生。这里是一个简单的示例:
```cpp
#include <iostream>
#include <string>
#include <vector>
// 定义学生结构体
struct Student {
int id;
std::string name;
double scores[4]; // 存储四门课的成绩
double average; // 平均成绩
};
// 动态添加学生到 vector 中
void addStudent(std::vector<Student>& students) {
int id;
std::string name;
std::cout << "请输入学生学号:";
std::cin >> id;
std::cout << "请输入学生姓名:";
std::cin >> name;
for (int i = 0; i < 4; ++i) {
std::cout << "请输入第" << (i + 1) << "门课程的成绩:";
std::cin >> students.back().scores[i];
}
// 计算并设置平均成绩
students.back().average = calculateAverage(scores);
std::cout << "学生信息已添加:" << std::endl;
displayStudent(students.back());
}
// 计算平均分函数
double calculateAverage(double scores[]) {
if (sizeof(scores) == 0) return 0; // 防止除以0的情况
double sum = 0;
for (auto score : scores)
sum += score;
return sum / 4;
}
// 打印学生信息
void displayStudent(const Student& student) {
std::cout << "学号: " << student.id << ", 姓名: " << student.name
<< ", 平均成绩: " << student.average << std::endl;
}
int main() {
std::vector<Student> students;
char cont;
do {
addStudent(students);
// 询问用户是否继续添加更多学生
std::cout << "是否还要添加其他学生?(y/n): ";
std::cin >> cont;
} while (cont == 'y' || cont == 'Y');
// 按照平均成绩排序并输出
std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) { return a.average > b.average; });
std::cout << "按照平均成绩从高到低排列的学生信息:\n";
for (const auto& student : students)
displayStudent(student);
return 0;
}
```
在这个程序中,我们首先定义了一个`Student`结构体,然后实现了添加学生、计算平均分以及显示学生信息的功能。在主函数中,用户可以连续添加学生直到选择退出,最后我们会根据平均成绩对所有学生进行排序并输出。
阅读全文