[问题描述]
给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名以及各科成绩组成。对学生的考试成绩进行有关统计,并打印统计表。
[基本要求]
(1)按总分数高低次序,打印出名次表,分数相同的为同一名次; (2)按名次打印出每个学生的学号、姓名、总分以及各科成绩。
[测试数据]
由学生依据软件工程的测试技术自己确定。注意测试边界数据。
[选作内容]
对各科成绩设置不同的权值。
参考样例
5
2020214111 王五 12 52 67 84
2020214113 赵六 15 63 45 95
2020214131 李四 33 65 84 75
2020214131 丁二 66 59 89 74
2020214131 心意 100 100 100 100
心意就是要全满分!hhh
代码实现:
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
const int N=1e4+50;
struct ss
{
char xuehao[15],name[10];//
int wuli,shuju,shuzi,xiandai,yingyu;
double zongfen;//物理,数据结构,数字逻辑,英语,总分
//各科权值 数据结构占50% 线性代数占20% 数字逻辑占20% 英语占10%
}s[N];
bool cmp1(struct ss a,struct ss b)
{
return a.zongfen>b.zongfen;
}
int main()
{
int i,n;
printf("请输入学生人数:\n");
scanf("%d",&n);
printf("请依此输入学生的学号、姓名、各科成绩(物理、数据结构、数字逻辑、英语)\n");
for(i=1;i<=n;i++)
{
scanf("%s %s %d%d%d%d",&s[i].xuehao,&s[i].name,&s[i].wuli,&s[i].shuju,&s[i].xiandai,&s[i].yingyu);
s[i].zongfen=s[i].wuli*0.2+s[i].shuju*0.2+s[i].xiandai*0.5+s[i].yingyu*0.1;
}
sort(s+1,s+n+1,cmp1);
printf("\n名次表:\n");
for(i=1;i<=n;i++)
printf("%d %s %.2lf\n",i,s[i].name,s[i].zongfen);
printf("\n成绩单:\n");
for(i=1;i<=n;i++)
printf("%s %s %.2lf %d %d %d %d\n",s[i].xuehao,s[i].name,s[i].zongfen,s[i].wuli,s[i].shuju,s[i].xiandai,s[i].yingyu);
return 0;
}