某中学期末考试共有5门课程,需要录入每个学生5门课程的成绩,并计算每个学生每门课程成绩的排名,并输出成绩和排名信息。为完成该任务,表示学生课程成绩和排名的成绩记录结构体定义如下:
struct Student
{
int number; //学号
char name[10]; //姓名
int score[5]; //5门课程成绩
int rank[5]; //5门课程排名
};
指针数组排序函数如下:
函数接口定义:
按课程which的成绩从大到小排序
void SortStudentPtr(struct Student* arrStuPtr[], int n, int which);
其中 arrStuPtr
是用户传入的指向所有学生成绩记录的指针数组。 n
的表示学生的个数; which
是[0, 4]区间的整数,表示第几门课程。
裁判测试程序样例:
#include <stdio.h>
struct Student
{
int number; //学号
char name[10]; //姓名
int score[5]; //5门课程成绩
int rank[5]; //5门课程排名
};
void SortStudentPtr(struct Student* arrStuPtr[], int n, int which);
int main()
{
int i, c;
struct Student arrStu[10] = {
{1001, "zhangsan", 95, 84, 64, 75, 75},
{1002, "lisi", 87, 82, 82, 85, 76},
{1003, "wangwu", 92, 93, 73, 65, 93},
{1004, "zhaoliu", 90, 91, 89, 92, 87},
{1005, "sunqian", 85, 82, 86, 81, 85},
{1006, "wuge", 78, 74, 92, 79, 83},
{1007, "yaoyuan", 91, 69, 68, 83, 78},
{1008, "zhenghao", 67, 61, 71, 93, 86},
{1009, "guojing", 78, 72, 78, 95, 67},
{1010, "daigao", 80, 87, 88, 76, 96}
};
struct Student* arrStuPtr[10];
for (i = 0; i < 10; i++)
arrStuPtr[i] = arrStu + i;
for (c = 0; c < 5; c++)
{
SortStudentPtr(arrStuPtr, 10, c);
for (i = 0; i < 10; i++)
arrStuPtr[i]->rank[c] = i + 1;
}
printf("number\t name \tscore1\trank1\tscore2\trank2\tscore3\trank3\tscore4\trank4\tscore5\trank5\n");
for (i = 0; i < 10; i++)
{
printf("%d\t%10s\t", arrStu[i].number, arrStu[i].name);
for (c = 0; c < 5; c++)
printf("%d\t%d\t", arrStu[i].score[c], arrStu[i].rank[c]);
printf("\n");
}
return 0;
}
/* 请在这里填写答案 */
输入样例:
无
输出样例:
number name score1 rank1 score2 rank2 score3 rank3 score4 rank4 score5 rank5
1001 zhangsan 95 1 84 4 64 10 75 9 75 9
1002 lisi 87 5 82 5 82 5 85 4 76 8
1003 wangwu 92 2 93 1 73 7 65 10 93 2
1004 zhaoliu 90 4 91 2 89 2 92 3 87 3
1005 sunqian 85 6 82 6 86 4 81 6 85 5
1006 wuge 78 9 74 7 92 1 79 7 83 6
1007 yaoyuan 91 3 69 9 68 9 83 5 78 7
1008 zhenghao 67 10 61 10 71 8 93 2 86 4
1009 guojing 78 8 72 8 78 6 95 1 67 10
1010 daigao 80 7 87 3 88 3 76 8 96 1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
void SortStudentPtr(struct Student* arrStuPtr[], int n, int which)
{
int x;
for(int i=0;i<n-1;i++)
{
x=i;
for(int j=i+1;j<n;j++)
{
if(arrStuPtr[x]->score[which]<arrStuPtr[j]->score[which])
{
x=j;
}
}
struct Student* tem=arrStuPtr[x];
arrStuPtr[x]=arrStuPtr[i];
arrStuPtr[i]=tem;
}
}