#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; 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]; } } int main() { Student cs[N]; cs[0].input_lesson_ids();// 用一个学生对象对静态数组成员赋值 for (int i = 0; i < N; i++) cs[i].input_info(); //求出最高平均成绩并按要求格式输出相关语句 int max_ave_index = 0; float max_ave = cs[0].ave(); for (int i = 1; i < N; i++) { float ave = cs[i].ave(); if (ave > max_ave) { max_ave = ave; max_ave_index = i; } } cout << "Student " << cs[max_ave_index].get_name() << " got the highest average score as " << fixed << setprecision(4) << max_ave << endl; //求出最低平均成绩并按要求格式输出相关语句 int min_ave_index = 0; float min_ave = cs[0].ave(); for (int i = 1; i < N; i++) { float ave = cs[i].ave(); if (ave < min_ave) { min_ave = ave; min_ave_index = i; } } cout << "Student " << cs[min_ave_index].get_name() << " got the lowest average score as " << fixed << setprecision(4) << min_ave << endl; //按照平均成绩的高低对学生数组进行排序 for (int i = 0; i < N - 1; i++) { for (int j = i + 1; j < N; j++) { if (cs[i].ave() < cs[j].ave()) { Student temp = cs[i]; cs[i] = cs[j]; cs[j] = temp; } } } for (int i = 0; i < N; i++)//输出排序后的结果 cs[i].show_info(); return 0; }
时间: 2024-03-11 13:45:15 浏览: 18
这段程序定义了一个名为Student的类,用于表示学生的信息,包括学生的id、姓名、每门课的成绩、是否挂科等内容,并且提供了输入、输出、求平均成绩、获取姓名等方法。此外,程序还定义了一个静态成员变量lesson_id,表示每门课程的id。在程序的主函数中,使用Student类创建了一个大小为N的学生数组,并对其进行赋值、输出、排序等操作。
相关问题
#include<iostream> #include<stdlib.h> #include<time.h> #include<windows.h> #define+M+100+ using+name
这段代码是C++代码,它包含了一些头文件和宏定义,并定义了一个main函数。在main函数中,它使用了一个while循环来读取输入的半径值,并计算圆的面积,然后输出结果。代码中使用了cmath库中的pow函数来计算半径的平方,使用了iomanip库中的setprecision函数来设置输出结果的精度。
这段代码的功能是计算输入半径的圆的面积,并输出结果。
以下是这段代码的解释和演示:
```cpp
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#define M 100
using namespace std;
int main(void) {
int r;
while ( cin >> r && r <= 10000 && r >= 1 && r != EOF ) {
double s;
s = PI * pow(r,2);
cout << fixed << setprecision(7) << s << endl;
}
return 0;
}
```
#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; }补全c++
补全后的代码如下:
```c++
#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 < M; i++)
cin >> score[i];
isFail = false;
for (int i = 0; i < M; 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;
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];
}
}
int main()
{
Student cs[N];
cs[0].input_lesson_ids();// 用一个学生对象对静态数组成员赋值
for (int i = 0; i < N; i++)
cs[i].input_info();
float max_ave = 0, min_ave = 101;
for (int i = 0; i < N; i++)
{
max_ave = max(max_ave, cs[i].ave());
min_ave = min(min_ave, cs[i].ave());
}
cout << "the highest average score = " << max_ave << endl;
cout << "the lowest average score = " << min_ave << endl;
sort(cs, cs + N, [](const Student& a, const Student& b) {return a.ave() > b.ave(); });
for (int i = 0; i < N; i++)
cs[i].show_info();
return 0;
}
```
这段代码实现了一个学生信息管理系统,可以输入一些学生的姓名和三门课的成绩,计算并显示每个学生的平均成绩,并按照平均成绩的高低对学生数组进行排序,最后输出排序后的结果。同时,还可以求出最高平均成绩和最低平均成绩并输出。其中,使用了Lambda表达式来实现排序。