奖学金评比(类和对象基础)

0|1题目描述

​ 理工大学决定一年一度的奖学金评比,为了公平起见,规则与往年有所不同,要求的是按宿舍进行名额分配,每个宿舍要评比出一名学生获得奖学金,每个宿舍的学生不超过6人;评比规则是:以高数、英语、C++三门课程的成绩为评比标准,按总分排序,如果总分一致,按高数成绩评比,如果高数一致,按英语成绩评比;数据保证一个宿舍没有完全三门课成绩一样的情况。定义一个学生类 Student,有学号,姓名,高数成绩、英语成绩、C++成绩,以及宿舍号,评比出每个宿舍的获奖学生名单。

0|2输入格式:

首先输入测试模式mode,如果mode=1,测试输入一个学生的信息,并显示该学生的信息;如果mode=2,输入接着输入两个学生的信息,并测试比较函数,显示成绩排名在前面的学生的信息;如果mode=3,则继续输入一个整型数 n (1n104),表示有 n 位同学。

紧跟着 n 行输入,每一行格式为:宿舍号(dorm)、学号(num)、姓名(name)、高数(math)、英语(english)、C++(cplus)
宿舍号的区间为 [0, 9999]的整数, 学号是10位的整数(如2021190101),name 由字母组成,长度小于 20,各科成绩均为实数[0,100]。

0|3输出格式:

mode=1,输出一个学生的信息;mode=2,输出两个学生中排名靠前的学生的信息;mode=3,按宿舍号从小到大排序,输出每间宿舍获奖的同学信息。注意,不管mode的值是多少,输出宿舍号的时候,注意宿舍号不足 4 位的,要按 4 位补齐前导 0。

1|0类和函数接口定义:

 
#include<iostream> using namespace std; #define MAX_SIZE 10000 struct Course { double math,english,cplus; void setScore(double m,double e,double c); void disp();//显示成绩 }; class Student { private: char name[20]; Course course; public: int num;//提示:学号均为非负;可用负数来表示该宿舍没有人 int dorm;//寝室编号 Student();//默认构造函数 Student(int dor,int num,char name[20],Course course); bool betterThan(Student b);//比较this和b学生的成绩,为true表示this优于b void disp();//显示该学生的信息 void input();//输入学生信息 }; //输入n个学生信息并评奖 void inputAward(Student stu[],int n); //显示获奖学生信息 void show(Student stu[]);
 

2|0裁判测试程序样例:

 
在这里给出函数被调用进行测试的例子: int main() { int n,mode; cin>>mode; Student stu[MAX_SIZE]; Student s1,s2; switch(mode) { case 1: s1.input(); s1.disp(); break; case 2: s1.input(); s2.input(); if(s1.betterThan(s2)) s1.disp(); else s2.disp(); break; case 3: //输入n个学生的数据,并评奖 cin>>n; inputAward(stu,n); //显示获奖学生的信息 show(stu); break; } return 0; } /* 请在这里填写答案 */
 

2|1输入样例1:

1 0 2021190101 Tom 95 90 88
 

2|2输出样例1:

0000 2021190101 Tom 95 90 88
 

2|3输入样例2:

2 0000 2021190101 Tom 95 90 88 0001 2021190102 Jack 89 98 87
 

2|4输出样例2:

0001 2021190102 Jack 89 98 87
 

2|5输入样例3:

3 7 0000 2021190101 Tom 95 90 88 0001 2021190102 Jack 89 98 87 0000 2021190103 Marry 95 91 87 0000 2021190104 Jerry 88 50 61 0003 2021190105 ETAF 78 89 86 0001 2021190106 Mickey 85 90 87 0001 2021190107 Hale 60 40 50
 

2|6输出样例:

0000 2021190103 Marry 95 91 87 0001 2021190102 Jack 89 98 87 0003 2021190105 ETAF 78 89 86
 
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<div id="mCSB_9" class="mCustomScrollBox mCS-minimal-dark mCSB_vertical_horizontal mCSB_outside" style="max-height: none;" tabindex="0"><div id="mCSB_9_container" class="mCSB_container mCS_y_hidden mCS_no_scrollbar_y mCS_x_hidden mCS_no_scrollbar_x" style="position: relative; top: 0px; left: 0px; width: 100%;" dir="ltr"><code-pre class="code-pre" id="pre-F6xZN7"><code-line class="line-numbers-rows"></code-line>Student::Student(){};
<code-line class="line-numbers-rows"></code-line>void Student::disp() {
<code-line class="line-numbers-rows"></code-line>    printf("%04d %d %s %.0lf %.0lf %.0lf", dorm, num, name, course.math,
<code-line class="line-numbers-rows"></code-line>           course.english, course.cplus);
<code-line class="line-numbers-rows"></code-line>}
<code-line class="line-numbers-rows"></code-line>void Student::input() {
<code-line class="line-numbers-rows"></code-line>    cin >> dorm >> num >> name >> course.math >> course.english >> course.cplus;
<code-line class="line-numbers-rows"></code-line>}
<code-line class="line-numbers-rows"></code-line>bool Student::betterThan(Student b) {
<code-line class="line-numbers-rows"></code-line>    if (this->course.cplus + this->course.english + this->course.math ==
<code-line class="line-numbers-rows"></code-line>        b.course.cplus + b.course.english + b.course.math) {
<code-line class="line-numbers-rows"></code-line>        if (this->course.math == b.course.math) {
<code-line class="line-numbers-rows"></code-line>            if (this->course.english == b.course.english) {
<code-line class="line-numbers-rows"></code-line>                return this->course.cplus > b.course.cplus;            } else {
<code-line class="line-numbers-rows"></code-line>                return this->course.english > b.course.english;            }        } else {
<code-line class="line-numbers-rows"></code-line>            return this->course.math > b.course.math;       }    } else {
<code-line class="line-numbers-rows"></code-line>        return this->course.cplus + this->course.english + this->course.math >
<code-line class="line-numbers-rows"></code-line>               b.course.cplus + b.course.english + b.course.math;    }}
<code-line class="line-numbers-rows"></code-line>void inputAward(Student stu[], int n) {
<code-line class="line-numbers-rows"></code-line>    for (int i = 0; i < n; ++i) { stu[i].input(); }
<code-line class="line-numbers-rows"></code-line>    for (int i = 0; i < n; ++i) {
<code-line class="line-numbers-rows"></code-line>        for (int j = 0; j < n - i - 1; ++j) {
<code-line class="line-numbers-rows"></code-line>            if (stu[j].dorm == stu[j + 1].dorm) {
<code-line class="line-numbers-rows"></code-line>                if (stu[j + 1].betterThan(stu[j])) {
<code-line class="line-numbers-rows"></code-line>                    Student t = stu[j + 1];
<code-line class="line-numbers-rows"></code-line>                    stu[j + 1] = stu[j];
<code-line class="line-numbers-rows"></code-line>                    stu[j] = t;                }            } else if (stu[j].dorm > stu[j + 1].dorm) {
<code-line class="line-numbers-rows"></code-line>                Student t = stu[j + 1];
<code-line class="line-numbers-rows"></code-line>                stu[j + 1] = stu[j];
<code-line class="line-numbers-rows"></code-line>                stu[j] = t;            }        }    }
<code-line class="line-numbers-rows"></code-line>    stu[n].dorm = -5;
<code-line class="line-numbers-rows"></code-line>}
<code-line class="line-numbers-rows"></code-line>void show(Student stu[]) {
<code-line class="line-numbers-rows"></code-line>    int flag = -1;
<code-line class="line-numbers-rows"></code-line>    for(int i = 0;;++i){
<code-line class="line-numbers-rows"></code-line>        if(stu[i].dorm==-5) break;
<code-line class="line-numbers-rows"></code-line>        if(stu[i].dorm!=flag){
<code-line class="line-numbers-rows"></code-line>            flag = stu[i].dorm;
<code-line class="line-numbers-rows"></code-line>            stu[i].disp();
<code-line class="line-numbers-rows"></code-line>            cout<<"\n";        }   }}
</code-pre></div></div><div id="mCSB_9_scrollbar_vertical" class="mCSB_scrollTools mCSB_9_scrollbar mCS-minimal-dark mCSB_scrollTools_vertical" style="display: none;"><div class="mCSB_draggerContainer"><div id="mCSB_9_dragger_vertical" class="mCSB_dragger" style="position: absolute; min-height: 0px; height: 0px; top: 0px;"><div class="mCSB_dragger_bar" style="line-height: 0px;"></div></div><div class="mCSB_draggerRail"></div></div></div><div id="mCSB_9_scrollbar_horizontal" class="mCSB_scrollTools mCSB_9_scrollbar mCS-minimal-dark mCSB_scrollTools_horizontal" style="display: none;"><div class="mCSB_draggerContainer"><div id="mCSB_9_dragger_horizontal" class="mCSB_dragger" style="position: absolute; min-width: 0px; width: 0px; left: 0px;"><div class="mCSB_dragger_bar"></div></div><div class="mCSB_draggerRail"></div></div></div>

  


__EOF__

本文作者寄情良玉赠旅人
本文链接https://www.cnblogs.com/xinhua23/p/16287613.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   寄情良玉赠旅人  阅读(109)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

支付宝打赏