#include <iostream> #include <iomanip> #include <string.h> #include <cmath> #define M 3 // 课程门数 #define N 4 //学生数组中的学生个数 using namespace std; class Student { public: Student() {} Student(const Student&); void input_info() { cin>>id; cin>>name; for(int i=0; i<3; i++) cin>>score[i]; isFail=false; for(int i=0; i<3; i++) if(score[i]<60) isFail=true; } void input_lesson_ids() { for(int i=0; i<M; i++) cin>>lesson_id[i]; } void show_info() { cout<<"Student id:"<<id<<endl; cout<<"Student name:"<<name<<endl; cout<<setw(10)<<"lesson_id "; for(int i=0; i<M; i++) cout<<setw(10)<<lesson_id[i]; cout<<setw(10)<<"Average"; cout<<endl; cout<<setw(10)<<"scores "; for(int i=0; i<M; i++) cout<<setw(10)<<score[i]; cout<<setw(10)<<ave(); cout<<endl; if(isFail) cout<<"The student failed."<<endl; else cout<<"The student didn\'t fail."<<endl; cout<<"------华丽的分割线--------"<<endl; } float ave()//求平均成绩 { //实现求平均成绩并返回 ...... } string get_name() { return name; }private: int id; string name; bool isFail; static int lesson_id[M]; float score[M]; }; int Student::lesson_id[M]; Student::Student(const Student& s) { //完成拷贝构造函数的实现,拷贝出的对象和原对象一致 ...... } int main() { Student cs[N]; cs[0].input_lesson_ids();// 用一个学生对象对静态数组成员赋值 for(int i=0; i<N; i++) cs[i].input_info(); //求出最高平均成绩并按要求格式输出相关语句 ...... //求出最低平均成绩并按要求格式输出相关语句 ...... //按照平均成绩的高低对学生数组进行排序 ...... for(int i=0; i<N; i++)//输出排序后的结果 cs[i].show_info(); return 0; }补全
时间: 2024-03-16 09:43:29 浏览: 27
下面是完整的代码,包括拷贝构造函数的实现、求最高平均成绩和最低平均成绩、排序等功能:
```
#include <iostream>
#include <iomanip>
#include <string.h>
#include <cmath>
#define M 3 // 课程门数
#define N 4 // 学生数组中的学生个数
using namespace std;
class Student {
public:
Student() {}
Student(const Student&);
void input_info() {
cin >> id;
cin >> name;
for(int i = 0; i < 3; i++)
cin >> score[i];
isFail = false;
for(int i = 0; i < 3; i++)
if(score[i] < 60) isFail = true;
}
void input_lesson_ids() {
for(int i = 0; i < M; i++)
cin >> lesson_id[i];
}
void show_info() {
cout << "Student id: " << id << endl;
cout << "Student name: " << name << endl;
cout << setw(10) << "lesson_id ";
for(int i = 0; i < M; i++)
cout << setw(10) << lesson_id[i];
cout << setw(10) << "Average";
cout << endl;
cout << setw(10) << "scores ";
for(int i = 0; i < M; i++)
cout << setw(10) << score[i];
cout << setw(10) << ave();
cout << endl;
if(isFail)
cout << "The student failed." << endl;
else
cout << "The student didn't fail." << endl;
cout << "------华丽的分割线--------" << endl;
}
float ave() { // 求平均成绩
float sum = 0.0;
for(int i = 0; i < M; i++)
sum += score[i];
return sum / M;
}
string get_name() {
return name;
}
private:
int id;
string name;
bool isFail;
static int lesson_id[M];
float score[M];
};
int Student::lesson_id[M];
Student::Student(const Student& s) {
id = s.id;
name = s.name;
isFail = s.isFail;
for(int i = 0; i < M; i++) {
lesson_id[i] = s.lesson_id[i];
score[i] = s.score[i];
}
}
void find_max_min(Student cs[], float& max_ave, float& min_ave, int& max_index, int& min_index) {
max_ave = min_ave = cs[0].ave();
max_index = min_index = 0;
for(int i = 1; i < N; i++) {
if(cs[i].ave() > max_ave) {
max_ave = cs[i].ave();
max_index = i;
}
if(cs[i].ave() < min_ave) {
min_ave = cs[i].ave();
min_index = i;
}
}
}
void Sort(Student cs[], int n) {
for(int i = 0; i < n; i++) {
for(int j = i + 1; j < n; j++) {
if(cs[i].ave() < cs[j].ave()) {
Student tmp = cs[i];
cs[i] = cs[j];
cs[j] = tmp;
}
}
}
}
int main() {
Student cs[N];
cs[0].input_lesson_ids(); // 用一个学生对象对静态数组成员赋值
for(int i = 0; i < N; i++)
cs[i].input_info();
// 求出最高平均成绩并按要求格式输出相关语句
float max_ave;
int max_index;
find_max_min(cs, max_ave, max_ave, max_index, max_index);
cout << "The highest average score is " << max_ave << " by " << cs[max_index].get_name() << endl;
// 求出最低平均成绩并按要求格式输出相关语句
float min_ave;
int min_index;
find_max_min(cs, min_ave, min_ave, min_index, min_index);
cout << "The lowest average score is " << min_ave << " by " << cs[min_index].get_name() << endl;
// 按照平均成绩的高低对学生数组进行排序
Sort(cs, N);
// 输出排序后的结果
for(int i = 0; i < N; i++)
cs[i].show_info();
return 0;
}
```