代码如下:
#include<stdio.h>
#include<string.h>
#define NOLEN 12 //学号长度
#define NAMELEN 20 //姓名长度
#define SCORENUM 3 //课程数
#define CLASSSTUNUM 100 //班级人数
typedef struct stuinfo{
char num[NOLEN+1]; //学号,含'\0'
char name[NAMELEN+1]; //姓名,含'\0'
int score[SCORENUM];
}stuInfo;
typedef struct classinfo{
stuInfo stu[CLASSSTUNUM];
int classstunum;
}classInfo;
void sortStuScore(classInfo democlass,int index,int scoreSorted[CLASSSTUNUM]){
//最后一行输入一个整数i,表示要求按第i门课成绩降序排序输出,若该门课成绩相同,则按学号升序。
//请注意这个要求“若该门课成绩相同,则按学号升序”。
int i,j,p,temp,tempScore[CLASSSTUNUM][2];
for(p=0;p<CLASSSTUNUM;p++){
tempScore[p][0]=p;
tempScore[p][1]=democlass.stu[p].score[index-1];
}
for(i=0;i<democlass.classstunum;i++)
for(j=democlass.classstunum;j>i;j--)
if(tempScore[j][1]>tempScore[i][1] || (tempScore[j][1] == tempScore[i][1] && strcpy(democlass.stu[j].num,democlass.stu[i].num)<0)){
temp=tempScore[i][1];
tempScore[i][1]=tempScore[j][1];
tempScore[j][1]=temp;
temp=tempScore[i][0];
tempScore[i][0]=tempScore[j][0];
tempScore[j][0]=temp;
}
for(i=0;i<democlass.classstunum;i++)
scoreSorted[i]=tempScore[i][0];
}
void printStuScore(classInfo democlass,int scoreSorted[CLASSSTUNUM]){
int i;
i=0;
printf("score scoted:\n");
while(i<democlass.classstunum){
printf("%s %s %d %d %d\n",democlass.stu[scoreSorted[i]].num,democlass.stu[scoreSorted[i]].name,democlass.stu[scoreSorted[i]].score[0],democlass.stu[scoreSorted[i]].score[1],democlass.stu[scoreSorted[i]].score[2]);
i++;
}
}
void main(){
classInfo demoClass;
int i,scoreSorted[CLASSSTUNUM];
char temp[NAMELEN];
memset(temp,0,NAMELEN);
printf("please input the info by valid format:\n");
scanf("%d",&demoClass.classstunum);
if(demoClass.classstunum>0){
for(i=0;i<demoClass.classstunum;i++){
memset(demoClass.stu[i].num,0,CLASSSTUNUM);
memset(demoClass.stu[i].name,0,NAMELEN);
scanf("%s %s %d %d %d",&demoClass.stu[i].num,&demoClass.stu[i].name,&demoClass.stu[i].score[0],&demoClass.stu[i].score[1],&demoClass.stu[i].score[2]);
}
scanf("%d",&i);
if(i>0){
sortStuScore(demoClass,i,scoreSorted);
printStuScore(demoClass,scoreSorted);
}
}
}
测试数据:
3
541207010190 Fangfang 85 68 76
541207010189 Wangli 85 87 99
541207010188 Zhangling 89 78 95
1
输出结果:
score scoted:
541207010188 Zhangling 89 78 95
541207010189 Wangli 85 87 99
541207010190 Fangfang 85 68 76
请按任意键继续. . .
运行截图: