解题思路:结构体由总分,学号,语数英三部分组成,然后按照代码所示的嵌套条件进行排序。
注意事项:
参考代码:
#include<stdio.h>
typedef struct Student{
int num,max,language,math,english;
}stu;
int main(){
int n,i,j,k,l;
scanf("%d",&n);
struct Student stu[n];
struct Student temp;
for(i=0;i<n;i++){//输入三科成绩,并算出总分和记录学号
scanf("%d %d %d",&stu[i].language,&stu[i].math,&stu[i].english);
stu[i].max=stu[i].language+stu[i].math+stu[i].english;
stu[i].num=i+1;
}
for(k=0;k<n;k++){//总分从大到小排序
for(int j=0;j<n-k-1;j++){
if(stu[j].max<stu[j+1].max){
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
for(l=0;l<n-1;l++){
if(stu[l].max==stu[l+1].max){//总分相等
if(stu[l].language<stu[l+1].language){//语文大的在前
temp=stu[l];
stu[l]=stu[l+1];
stu[l+1]=temp;
}
if(stu[l].language==stu[l+1].language){//语文相等
if(stu[l].num>stu[l+1].num){//学号小的在前
temp=stu[l];
stu[l]=stu[l+1];
stu[l+1]=temp;
}
}
}
}
for(i=0;i<5;i++){
printf("%d %d\n",stu[i].num,stu[i].max);
}
}
0.0分
0 人评分