考试成绩分布分析(单科成绩排序结构体专题)
有一学生成绩表,包括学号、姓名、3门课程成绩请按要求排序输出:若输入1,则按第1门课成绩降序输出成绩表,若输入为i(1<=i<=3),则按第i门课成绩降序输出成绩表,今天小编就来聊一聊关于考试成绩分布分析?接下来我们就一起去研究一下吧!
考试成绩分布分析
ICPC--1193: 单科成绩排序(结构体专题)题目描述有一学生成绩表,包括学号、姓名、3门课程成绩。请按要求排序输出:若输入1,则按第1门课成绩降序输出成绩表,若输入为i(1<=i<=3),则按第i门课成绩降序输出成绩表。
输入首先输入一个整数n(1<=n<=100),表示学生人数; 然后输入n行,每行包含一个学生的信息:学号(12位)、姓名(不含空格且不超过20位),以及3个整数,表示3门课成绩,数据之间用空格隔开。 最后一行输入一个整数i,表示要求按第i门课成绩降序排序输出,若该门课成绩相同,则按学号升序。
输出输出按第i门课降序排序的结果,格式见样例。
样例输入
3
541207010188 Zhangling 89 78 95
541207010189 Wangli 85 87 99
541207010190 Fangfang 85 68 76
1
541207010188 Zhangling 89 78 95
541207010189 Wangli 85 87 99
541207010190 Fangfang 85 68 76
#include<stdio.h>
typedef struct xuesheng
{
char xuehao[13];
char name[20];
int a, b, c;
}Student;
void sort(Student *s,int num,int (*cmp)(Student s1,Student s2)){
Student temp;
for (int i = 0; i < num-1; i )
{
for (int j = i 1; j < num; j )
{
if (cmp(s[i], s[j])>0){ //这必须>0 strcmp(串1,串2),若串1<串2 ,返回-1
temp = s[i]; //无序对调,返回1对调
s[i] = s[j];
s[j] = temp;
}
}
}
}
int cmp1(Student s1, Student s2){
if (s1.a!=s2.a)
{
if (s2.a>s1.a)
{
return 1;
}
else{
return 0;
}
}
else{
return strcmp(s1.xuehao,s2.xuehao);
}
}
int cmp2(Student s1, Student s2){
if (s1.b != s2.b)
{
if (s2.b>s1.b)
{
return 1;
}
else{
return 0;
}
}
else{
return strcmp(s1.xuehao, s2.xuehao);
}
}
int cmp3(Student s1, Student s2){
if (s1.c != s2.c)
{
if (s2.c>s1.c)
{
return 1;
}
else{
return 0;
}
}
else{
return strcmp(s1.xuehao, s2.xuehao);
}
}
int main(){
Student s[100], temp;
int num,op;
scanf("%d",&num);
for (int i = 0; i < num; i )
{
scanf("%s %s %d %d %d",s[i].xuehao,s[i].name,&s[i].a,&s[i].b,&s[i].c);
}
scanf("%d",&op);
switch (op)
{
case 1:
sort(s,num,cmp1);
break;
case 2:
sort(s,num,cmp2);
break;
case 3:
sort(s,num,cmp3);
break;
default:
break;
}
for (int i = 0; i < num; i )
{
printf("%s %s %d %d %d\n",s[i].xuehao,s[i].name,s[i].a,s[i].b,s[i].c);
}
return 0;
}
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com