学期结束,班主任决定表彰一批学生,已知该班学生数在6至50人之间,有三类学生:普通生,特招运动员,学科专长生,其中学科专长生不超过5人。

主函数根据输入的信息,相应建立GroupA, GroupB, GroupC类对象。

GroupA类是普通生,有2门课程的成绩(均为不超过100的非负整数);

GroupB类是特招运动员,有2门课程的成绩(均为不超过100的非负整数),1次运动会的表现分,表现分有:A、B、C、D共4等。

GroupC类是学科专长生,有5门课程的成绩(均为不超过100的非负整数)。

表彰人员至少符合以下3个条件中的一个:

(1)2门课程平均分在普通生和特招运动员中,名列第一者。

a.该平均分称为获奖线。

b.存在成绩并列时,则全部表彰,例如某次考试有2人并列第1,则他们全部表彰。

(2)5门课程平均分达到或超过获奖线90%的学科专长生,给予表彰。

(3)2门课程平均分达到或超过获奖线70%的特招运动员,如果其运动会表现分为A,给予表彰。

输入格式:每个测试用例占一行,第一项为类型,1为普通生,2为特招运动员,3为学科专长生, 输入0表示输入的结束。第二项是学号,第三项是姓名。对于普通生来说,共输入5项,第4、5项是课程成绩。对于特招运动员来说,共输入6项,第4、5项是课程成绩,第6项是运动会表现。对于学科专长生来说,共输入8项,第4、5、6、7、8项是课程成绩。

输出时,打印要表彰的学生的学号和姓名。(输出顺序与要表彰学生的输入前后次序一致)

函数接口定义:
以Student为基类,构建GroupA, GroupB和GroupC三个类

裁判测试程序样例:
#include
#include
using namespace std;

/* 请在这里填写答案 */

int main()
{
const int Size=50;
string num, name;
int i,ty,s1,s2,s3,s4,s5;
char gs;
Student *pS[Size];
int count=0;
for(i=0;i<Size;i++){
cin>>ty;
if(ty==0) break;
cin>>num>>name>>s1>>s2;
switch(ty){
case 1:pS[count++]=new GroupA(num, name, s1, s2); break;
case 2:cin>>gs; pS[count++]=new GroupB(num, name, s1,s2, gs); break;
case 3:cin>>s3>>s4>>s5; pS[count++]=new GroupC(num, name, s1,s2,s3,s4,s5); break;
}
}
for(i=0;i<count;i++) {
pS[i]->display();
delete pS[i];
}
return 0;
}

输入样例:
1 001 AAAA 96 80
2 009 BBB 82 75 A
1 007 CC 100 99
3 012 CCCC 97 95 90 99 93
1 003 DDD 62 50
1 022 ABCE 78 92
2 010 FFF 45 40 A
3 019 AAA 93 97 94 82 80
0

输出样例:
009 BBB
007 CC
012 CCCC

class Student
{protected:string m_num;string m_name;
public:static double max;//用来判断名列第一者Student(string num,string name):m_num(num),m_name(name){}virtual double average()=0;//各类学生的平均分virtual void display()=0;//观察主函数中得来,函数名不可改变
};
double Student::max=0;
class GroupA:public Student
{//普通生,有2门课程的成绩(均不超过100)int m_score1,m_score2;
public:GroupA(string num,string name,int score1,int score2):Student(num,name),m_score1(score1),m_score2(score2){//查找最高分if(average()>Student::max)Student::max=average();}
//同名函数在基类中声明过是虚函数则此处可省略virtual关键字
//但为了程序的可读性,还是写上virtualvirtual double average()//得到平均分{return(m_score1+m_score2)*1.0/2;}virtual void display(){if(average()==Student::max)//表彰所有最高分者{cout<<m_num<<" "<<m_name<<endl;}}
};
class GroupB:public Student//特招运动员,有2门课程成绩,1次运动会表现分ABCD
{int m_score1,m_score2;char m_grade;
public:GroupB(string num,string name,int score1,int score2,char grade):Student(num,name),m_score1(score1),m_score2(score2),m_grade(grade){         if(average()>Student::max)Student::max=average();}virtual double average(){return (m_score1+m_score2)*1.0/2;}virtual void display(){if(average()==Student::max){cout<<m_num<<" "<<m_name<<endl;}else if(average()>=Student::max*0.7&&m_grade=='A')cout<<m_num<<" "<<m_name<<endl;}
};
class GroupC:public Student{//学科专长生,有5门课程的成绩int m_score1,m_score2,m_score3,m_score4,m_score5;
public:GroupC(string num,string name,int score1,int score2,int score3,int score4,int score5):Student(num,name),m_score1(score1),m_score2(score2),m_score3(score3),m_score4(score4),m_score5(score5){}virtual double average(){return (m_score1+m_score2+m_score3+m_score4+m_score5)*1.0/5;}virtual void display(){if(average()>=Student::max*0.9){cout<<m_num<<" "<<m_name<<endl;}}
};

2020/4/26
By Suki

6-1 表彰优秀学生(多态) (20分)相关推荐

  1. 7-4 输出学生成绩 (20 分)

    7-4 输出学生成绩 (20 分) 本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩.最高成绩和最低成绩.建议使用动态内存分配来实现. 输入格式: 输入第一行首先给出一个正整数N,表示学 ...

  2. C++学习之路 | PTA乙级—— 1038 统计同成绩学生 (20 分)(精简)

    1038 统计同成绩学生 (20 分) 本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第 1 行给出不超过 10 ​5 ​​ 的正整数 N,即学生总人数.随后一 ...

  3. 【PAT乙】1038 统计同成绩学生 (20分) 裸桶排序

    problem 1038 统计同成绩学生 (20分) 本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第 1 行给出不超过 10 ​5 ​​ 的正整数 N,即学生 ...

  4. 2-2 学生成绩链表处理 (20 分)

    2-2 学生成绩链表处理 (20 分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表:另一个将成绩低于某分数线的学生结点从链表中删除. 函数接口定义: struct stud_node * ...

  5. 6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。 函数接口定义: ```cpp struct stu

    6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表:另一个将成绩低于某分数线的学生结点从链表中删除. 函数接口定义: struct stud_node *c ...

  6. 6-2 学生、大学生、研究生类 (20分)

    java旧题复习 作业4 6-2 学生.大学生.研究生类 (20分) 定义Student学生类,拥有学号.姓名.性别属性,提供构造函数,以及相应属性的get set函数,提供函数attendClass ...

  7. 查询各个年级的平均分_艰难困苦终生志,玉汝于成竟英才——高三年级期中考试总结暨优秀学生表彰会...

    "慷慨少年志,可以耀锋芒."开学半学期以来,同学们用自己的努力和实力证实了"相信就能看见,努力就能实现"的壮志豪言.2020年11月29日晚自习,高三年级全体学 ...

  8. 2020中考可不可以用计算机,2020中考必读 | 中考电脑阅卷流程“潜规则”!读完孩子少丢20分!(转给中考生)...

    今天和大家来聊一聊考试阅卷的那些事情... 现在的考试都趋于正规.公平化,特别是中考和高考这两场重要的升学考试,全国统一采取电子阅卷的方式来给学生阅卷. 而大部分平时的模拟考试都不是电脑阅卷,又加上很 ...

  9. 2020中考计算机统考答案,2020中考必读 | 中考电脑阅卷流程“潜规则”!读完孩子少丢20分!(转给中考生)...

    今天和大家来聊一聊考试阅卷的那些事情... 现在的考试都趋于正规.公平化,特别是中考和高考这两场重要的升学考试,全国统一采取电子阅卷的方式来给学生阅卷. 而大部分平时的模拟考试都不是电脑阅卷,又加上很 ...

最新文章

  1. 命令行下编译Wordcount
  2. VC++6.0如何删除文件
  3. Oracle的left join中on和where的区别
  4. C#中的深克隆的两种方式
  5. ROS: Ubuntu16.04安装ROS-kinetic
  6. java删除字符串最后一位
  7. 在asp.net core 下定义统一的入参和出参格式
  8. 如何在Hibernate中维护表的历史记录
  9. 直观秒懂:这波动图全是泵,应有尽有!
  10. Array, Vec 与 Slice
  11. ssfn授权_Steam盗号木马窃取授权文件,360安全大脑强力拦截
  12. 如何在excel中使用REFPROP属性库
  13. 关于DiskGenius 克隆分区和系统迁移问题,以及如何解决缺少系统引导、双硬盘双系统引导问题,多个启动项
  14. [Arch]常用软件安装使用
  15. You Only Look Once: Unified, Real-Time Object Detection(YOLO论文中英同步翻译)
  16. 关于一次pkgs --update错误记录(cmd_package_update 451)
  17. SEBank银行项目第一个星期的进度安排
  18. 《管理学》第五章 组织
  19. 10分钟教你搭建自己的ngrok服务器
  20. 微机原理与接口技术(一)

热门文章

  1. 单连通和多(复)连通
  2. S9306基本的DHCP-RELAY的应用
  3. 大厂都喜欢这样问Redis,哨兵、持久化、主从、手撕LRU,我都整理好了
  4. 20万粉丝的技术大V是怎样练成的--胡忠想访谈
  5. 微服务连载(二)漫谈何时从单体架构迁移到微服务?
  6. 7 DICOM成像协议编码实现-有损压缩和无损压缩解压
  7. 解决NPM下载速度贼慢的方法
  8. SAP激活中文语言包
  9. echart 世界地图发光_Echarts世界地图中国分区显示
  10. 微信小程序:地图导航功能实现完整源代码附效果图,讲解