编写程序设计一个学生类 Student,该类包含姓名 name、数学成绩 math、语文成绩 chinese、英语成绩 english 四个数据成员,成员函数包括:showName()用于输出姓名、sum()用于统计总成绩、avg()用于统计平均成绩,并包含无参构造函数、有参构造函数和析构函数。在主函数 main()中定义一个包含 5 个学生对象的数组,实现 5 个学生对象信息录入,在数组中查找总成绩最高的学生,输出该学生的姓名、总成绩和平均成绩。
[输入样例]:
请输入学生的姓名、语文成绩、数学成绩、英语成绩:
张三 87 98 88.5
李四 89 99 89
王五 78 92 86
赵六 76 90 83.5
陈七 95 83 80
[输出样例]:
总成绩第一名:
学生姓名:李四
总成绩:277
平均成绩:92.3333
using namespace std;
class Student {
private:
string name;
int math, chinese, english;
public:
Student() {}
//无参构造函数 不需要体现,自动生成的 不显式声明也可以用 这里是为了安全性考虑 显式声明一下
Student(string a, int b, int c, int d) //有参构造函数 定义一个包含 5 个学生对象的数组,实现 5 个学生对象信息录入,在数组中查找总成绩最高的学生,输出该学生的姓名、总成绩和平均成绩。
{ name = a; math = b; chinese = c; english = d; }
~Student() {} //析构函数 因为是动态内存分配 所以使用delete对对象进行回收
void showName() { cout << "name is " << name << endl;}
int sum(){return math + chinese + english;}
float avg(){return (float)(math + chinese + english)/3;}
//平均分是浮点型 所以返回float 需要强制转化int->float 防止整型相除得到0.00 返回int应该也行 只是会失去小数部分而已 这里是为了安全性考虑 用float来返回 别忘了加上(float)强制转化标志 不然会报warning告诉你可能会失去小数部分 直接返回int也可以 看你的意愿了
我这里就直接用float吧,好像本来就应该用float来表示平均分吧~当然浮点型也可以表示int double看你情况考虑吧
如果不想失去小数部分就用double或者float如果想保留小数部分并且带有大量的小数位 别问我为什么会带有大量的小数位 这样会占用大量内存 那你就直接申请一片内存来储存大量的浮点型吧void* p=malloc(sizeof(double)10000); double q=(double*)p;q[0]=1.23456789012345678901234567890...然后free(p)之前要先赋值NULL p=NULL free(p)避免出问题
#include<iostream>
using namespace std;
#include <string>
class Student
{
protected:
string name;
float math;
float chinese;
float english;
public:
Student() {}
Student(string n,float m,float c,float e) : name(n),math(m),chinese(c),english(e) {}
Student(const Student &s)
{
name = s.name;
math = s.math;
chinese = s.chinese;
english = s.english;
}
~Student() {}
string getName() {return name;}
float sum() {return math+chinese+english;}
float avg() {return sum()/3;}
};
int main()
{
cout<<"请输入学生的姓名、语文成绩、数学成绩、英语成绩:"<<endl;
Student s[5];
string name;
float m,c,e;
int max;
for(int i=0;i<5;i++)
{
cin>>name>>m>>c>>e;
s[i] = Student(name,m,c,e);
if(i==0 || s[i].sum() > s[max].sum())
max = i;
}
cout<<"姓名:"<<s[max].getName()<<endl;
cout<<"总成绩:"<<s[max].sum()<<endl;
cout<<"平均成绩:"<<s[max].avg()<<endl;
}
#include <iostream>
#include <string>
using namespace std;
class Student{
public:
Student(){}
Student(string name_,double math_,double chinese_,double english_):name(name_),math(math_),chinese(chinese_),english(english_){}
~Student(){};
void showName(){
cout<<name<<" ";
}
double sum();
double avg();
void in();
private:
string name;
double math;
double chinese;
double english;
};
double Student::sum(){
return math+chinese+english;
}
double Student::avg(){
return (math+chinese+english)/3;
}
void Student::in(){
cin>>name;
cin>>chinese;
cin>>math;
cin>>english;
}
int main(){
Student stu[5];
cout<<"请输入学生的姓名、语文成绩、数学成绩、英语成绩:"<<endl;
Student first=stu[0];
for(int i=0;i<5;i++){
stu[i].in();
if(stu[i].sum()>first.sum()){
first=stu[i];
}
}
cout<<"总成绩第一名:"<<endl;
cout<<"学生姓名:";
first.showName();
cout<<endl;
cout<<"总成绩:"<<first.sum()<<endl;
cout<<"平均成绩:"<<first.avg()<<endl;
return 0;
}