一道c++的程序题!!200分重赏

来源:百度知道 编辑:UC知道 时间:2024/05/23 17:29:16
题目 如下

某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。
任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前5名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分)是:
7 279
5 279
这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是279(总分等于输入的语文、数学、英语三科成绩之和),但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是:
5 279
7 279
则按输出错误处理,不能得分。

注意 请把完整程序发上来 就是我复制了以后可以直接在devc++里编译
包括#include<iostream>这些都不能漏

已经编译运行确认:

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<iostream>

using namespace std;

struct Score{
int ID;
int yuwen;
int shuxue;
int yingyu;
int total;
};

void sort(Score *p,int n)
{
int i,j;
Score t;

for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if( p[i].total>p[j].total )
{
t = p[i];
p[i]=p[j];
p[j]=t;
}
else if( p[i].total==p[j].total )
{
if( p[i].yuwen>p[j].yuwen )
{
t = p[i];
p[i]=p[j];
p[j]=t;
}
else if( p[i].yuwen==p[j].yuwen )
{
if( p[i].ID<p[j].ID )
{
t = p[i];
p[i]=p[j];
p[j]=t;
}
}
}
}

}

int main()
{
int i,n;
Score *p;

cout<<"Please input the number of the students: "