6-1 表彰优秀学生(多态) (20分)
学期结束,班主任决定表彰一批学生,已知该班学生数在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分)相关推荐
- 7-4 输出学生成绩 (20 分)
7-4 输出学生成绩 (20 分) 本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩.最高成绩和最低成绩.建议使用动态内存分配来实现. 输入格式: 输入第一行首先给出一个正整数N,表示学 ...
- C++学习之路 | PTA乙级—— 1038 统计同成绩学生 (20 分)(精简)
1038 统计同成绩学生 (20 分) 本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第 1 行给出不超过 10 5 的正整数 N,即学生总人数.随后一 ...
- 【PAT乙】1038 统计同成绩学生 (20分) 裸桶排序
problem 1038 统计同成绩学生 (20分) 本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第 1 行给出不超过 10 5 的正整数 N,即学生 ...
- 2-2 学生成绩链表处理 (20 分)
2-2 学生成绩链表处理 (20 分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表:另一个将成绩低于某分数线的学生结点从链表中删除. 函数接口定义: struct stud_node * ...
- 6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。 函数接口定义: ```cpp struct stu
6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表:另一个将成绩低于某分数线的学生结点从链表中删除. 函数接口定义: struct stud_node *c ...
- 6-2 学生、大学生、研究生类 (20分)
java旧题复习 作业4 6-2 学生.大学生.研究生类 (20分) 定义Student学生类,拥有学号.姓名.性别属性,提供构造函数,以及相应属性的get set函数,提供函数attendClass ...
- 查询各个年级的平均分_艰难困苦终生志,玉汝于成竟英才——高三年级期中考试总结暨优秀学生表彰会...
"慷慨少年志,可以耀锋芒."开学半学期以来,同学们用自己的努力和实力证实了"相信就能看见,努力就能实现"的壮志豪言.2020年11月29日晚自习,高三年级全体学 ...
- 2020中考可不可以用计算机,2020中考必读 | 中考电脑阅卷流程“潜规则”!读完孩子少丢20分!(转给中考生)...
今天和大家来聊一聊考试阅卷的那些事情... 现在的考试都趋于正规.公平化,特别是中考和高考这两场重要的升学考试,全国统一采取电子阅卷的方式来给学生阅卷. 而大部分平时的模拟考试都不是电脑阅卷,又加上很 ...
- 2020中考计算机统考答案,2020中考必读 | 中考电脑阅卷流程“潜规则”!读完孩子少丢20分!(转给中考生)...
今天和大家来聊一聊考试阅卷的那些事情... 现在的考试都趋于正规.公平化,特别是中考和高考这两场重要的升学考试,全国统一采取电子阅卷的方式来给学生阅卷. 而大部分平时的模拟考试都不是电脑阅卷,又加上很 ...
最新文章
- 命令行下编译Wordcount
- VC++6.0如何删除文件
- Oracle的left join中on和where的区别
- C#中的深克隆的两种方式
- ROS: Ubuntu16.04安装ROS-kinetic
- java删除字符串最后一位
- 在asp.net core 下定义统一的入参和出参格式
- 如何在Hibernate中维护表的历史记录
- 直观秒懂:这波动图全是泵,应有尽有!
- Array, Vec 与 Slice
- ssfn授权_Steam盗号木马窃取授权文件,360安全大脑强力拦截
- 如何在excel中使用REFPROP属性库
- 关于DiskGenius 克隆分区和系统迁移问题,以及如何解决缺少系统引导、双硬盘双系统引导问题,多个启动项
- [Arch]常用软件安装使用
- You Only Look Once: Unified, Real-Time Object Detection(YOLO论文中英同步翻译)
- 关于一次pkgs --update错误记录(cmd_package_update 451)
- SEBank银行项目第一个星期的进度安排
- 《管理学》第五章 组织
- 10分钟教你搭建自己的ngrok服务器
- 微机原理与接口技术(一)