学生数据排序
Description
某班 有n个学生(不超过100),每个学生的信息包括学号(long no),姓名(char name[9])和三门课的成绩(int score[4],其中score[0]~score[3]分别用来存放总分,语文,数学和英语的成绩)。
编写程序,录入n个学生的信息,然后按照总分降序排序(如果总分相同的按照学号小的在前),最后输出排序后的学生信息。
注意:main函数已经给定(如下所示)。
请将程序补充完整。
提交时只需要提交自己补充的代码部分,不需要提交给定的main函数的代码部分。
#include<stdio.h>
int main()
{
int n;
struct student stu[100];
while(scanf("%d",&n)!=EOF)
{
input(stu,n); //读入n个学生的数据
sort(stu,n); //按照总分降序排序,如果总分相同的学号小的在前面
print(stu,n); //输出n个学生的信息
}
return 0;
}
Input
包含多组测试数据,每组测试数据第一行包含1个整数n(大于1小于等与100),表示学生人数。接下来的n行为n个学生的详细信息,包括学号,姓名,语文,数学和英语的分数,个数据之间用空格隔开。
Output
每组测试数据输出占n行,每行输出一个学生的信息。每一行的输出数据依次为:排名,学号,姓名,总分,英文成绩,数学成绩和英语成绩。各部分数据之间用空格隔开。(具体详见样例输出)
Sample Input
5 1001 aaa 54 85 65 1002 bbb 54 65 85 1003 ccc 88 99 99 1004 ddd 35 50 50 1005 eee 99 99 99
Sample Output
1 1005 eee 297 99 99 99 2 1003 ccc 286 88 99 99 3 1001 aaa 204 54 85 65 4 1002 bbb 204 54 65 85 5 1004 ddd 135 35 50 50
题目分析:
仔细读题,能读懂这题的意思,一个结构体的好例题。
C语言中结构体的用法:
参考https://blog.csdn.net/eric_e/article/details/79340947
涉及到结构体的互换,需要另外定义一个结构体来交换。(详见代码中的 “ t ” )
我用的冒泡排序(因为不想手打快排,说白了就是懒。。)
打代码的时候一定要仔细……结构体看得眼花……
以下提供完整代码,抄作业是不对的哟~
#include<stdio.h>
struct student
{
char name[9];
long no;
int score[4];
};
void input(struct student stu[100],int n)
{
int i;
for(i=1;i<=n;i++)
{
scanf("%ld %s %d %d %d",&stu[i].no,&stu[i].name,&stu[i].score[1],&stu[i].score[2],&stu[i].score[3]);
stu[i].score[0]=stu[i].score[1]+stu[i].score[2]+stu[i].score[3];
}
return;
}
void sort(struct student stu[100],int n)
{
struct student t;
int i,j;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
{
if(stu[i].score[0]<stu[j].score[0] || stu[i].score[0]==stu[j].score[0] && stu[i].no>stu[j].no)
{
t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
}
return;
}
void print(struct student stu[100],int n)
{
int i;
for(i=1;i<=n;i++)
{
printf("%d ",i);
printf("%ld %s %d %d %d %d\n",stu[i].no,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3]);
}
return;
}
int main()
{
int n;
struct student stu[100];
while(scanf("%d",&n)!=EOF)
{
input(stu,n); //读入n个学生的数据
sort(stu,n); //按照总分降序排序,如果总分相同的学号小的在前面
print(stu,n); //输出n个学生的信息
}
return 0;
}