考試成績分布分析?有一學生成績表,包括學号、姓名、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;
}