代码如下:
#include <stdio.h>
#include <stdlib.h>
#define MAXRS 100
#define MAXKC 5
struct Student
{
int id;
int score[MAXKC];
};
int main()
{
int n,m,k;
int i,j;
float avg,mid;
struct Student stu[MAXRS],tmp;
scanf("%d%d%d",&n,&m,&k);
for (i=0;i<n;i++)
{
scanf("%d",&stu[i].id);
for(j=0;j<m;j++)
scanf("%d",&stu[i].score[j]);
}
//根据第k门成绩排序
for (i=0;i<n-1;i++)
{
for (j=0;j<n-1-i;j++)
{
if(stu[j].score[k-1] < stu[j+1].score[k-2])
{
tmp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = tmp;
}
}
}
//计算平均成绩
avg = 0;
for(i=0;i<n;i++)
avg += stu[i].score[k-1];
avg = avg/n;
//中位数
mid = stu[(n+1)/2].score[k-1];
printf("%.1f %d",avg,mid);
//根据学号排序
for (i=0;i<n-1;i++)
{
for (j=0;j<n-1-i;j++)
{
if(stu[j].id > stu[j+1].id)
{
tmp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = tmp;
}
}
}
//输出所有第k门成绩为中位数的学生
for (i=0;i<n;i++)
{
if(stu[i].score[k-1] == mid)
{
printf("%d ",stu[i].id);
for(j=0;j<m;j++)
{
if(j<m-1)
printf("%d ",stu[i].score[j]);
else
printf("%d\n",stu[i].score[j]);
}
}
}
return 0;
}