数组 计算中位数,不给定成绩,科目

img

代码如下:

#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;
}