成绩排序,相同成绩要并列
#include<stdio.h>
int n;
struct node{
int num;
int score;
int rank;
}stu[1000];
int main(){
int sco;
n=0;
printf("请输入学生成绩(结束输入-1):\n");
while(scanf("%d",&sco)!=EOF&&sco!=-1){
stu[n].num=n+1;
stu[n].score=sco;
n++;
}
for(int i=n-1;i>0;i--){
for(int j=0;j<i;j++){
if(stu[j].score<stu[j+1].score){ //降序排序
int tmp1,tmp2;
tmp1=stu[j].num;
tmp2=stu[j].score;
stu[j].num=stu[j+1].num;
stu[j].score=stu[j+1].score;
stu[j+1].num=tmp1;
stu[j+1].score=tmp2;
}
}
}
//冒泡排序主体
for(int i=0;i<n;i++){
if(stu[i].score==stu[i-1].score){
stu[i].rank=stu[i-1].rank;
}
else{
stu[i].rank=i+1;
}
}
printf("学号\t成绩\t排名\n");
for(int i=0;i<n;i++){
printf("%d\t%d\t%d\n",stu[i].num,stu[i].score,stu[i].rank);
}
return 0;
}