任务描述
编写函数 Sort_by_score(),生成根据分数由高到低顺序排列学生信息的表格。在表格中生成新的一列,存放排名情况。参数列表不作限制。
编程要求
根据提示,在右侧编辑器补充代码,完成成绩排名,并输出全部排名。
测试说明
输入说明: 一系列学生信息。
输出说明: 排序后的新表格。分数相同的同学名次并列,按照学号顺序输出。
平台会对你编写的代码进行测试:
测试输入:
Jingyu LI 202100000000 85
Jy LEE 202100100000 89
Jxxxyx Leeeee 202000100000 100
Jingyu11 LI 202100000001 85
Jingyuuuu LI 202100000900 59
Jingyuuuu Lous 202000000900 49
Asss Dccc 202112344321 84
Asssd Dccec 202112244321 83
预期输出:
Name_f Name_l stu_id score Rank
Jxxxyx Leeeee 202000100000 100 1
Jy LEE 202100100000 89 2
Jingyu LI 202100000000 85 3
Jingyu11 LI 202100000001 85 3
Asss Dccc 202112344321 84 5
Asssd Dccec 202112244321 83 6
Jingyuuuu LI 202100000900 59 7
Jingyuuuu Lous 202000000900 49 8
代码实现:
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
//=======begin=======
struct Information
{
char first_name[20];
char last_name[20];
char id[20];
int score;
int ranking;
}stu[110]={
{"Jingyu", "LI", "202100000000", 85},
{"Jy", "LEE", "202100100000", 89},
{"Jxxxyx", "Leeeee", "202000100000", 100},
{"Jingyu11", "LI", "202100000001", 85},
{"Jingyuuuu", "LI", "202100000900", 59},
{"Jingyuuuu", "Lous", "202000000900", 49},
{"Asss", "Dccc", "202112344321", 84},
{"Asssd", "Dccec", "202112244321", 83}};
void Sort_by_score(int n)
{
struct Information zan;
for (int i=0;i<n;i++){
for(int k=i+1;k<n;k++){
if(stu[i].score<stu[k].score){
zan=stu[i];
stu[i]=stu[k];
stu[k]=zan;
}
}
}
}
void ranking(int n)
{
stu[0].ranking=1;
int rank=1;//追踪当前排名用的
for(int i=1;i<n;i++){
if (stu[i].score==stu[i-1].score){
stu[i].ranking= stu[i-1].ranking;
}
else{
rank = i + 1; // 分数不同,更新排名
stu[i].ranking = rank;
}
}
}
int main(){
printf("Name_f Name_l stu_id score Rank\n");
int n = 0;
while (~scanf("%s%s%s%d", stu[n].first_name, stu[n].last_name, stu[n].id, &stu[n].score)){
n++;
Sort_by_score(n);
ranking(n);
}
for (int i = 0; i < n; i++){
printf("%s %s %s %d %d\n", stu[i].first_name, stu[i].last_name, stu[i].id, stu[i].score, stu[i].ranking);
}
return 0;
}