C语言结构体,学生成绩信息排序和输出单科最高分记录

学生记录由学号、姓名和五门课的成绩组成,根据班级人数,将学生记录存放在结构体数组中。编程实现学生记录按平均成绩降序排序,输出单科的最高分学生记录将排序后的学生记录保存至文件中。

img

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

typedef struct student{
    int num;
    char name[10];
    int score[5];
    int sum;
    float avg;
} stu;

void input(stu a[],int n)
{
    int i,j;
    for(i=0;i<n;i++)
    {
        scanf_s("%d%s",&a[i].num,a[i].name,10);
        for (j=0; j<5; ++j)
            scanf_s("%d",&a[i].score[j]);
    }
}

void sort(stu a[],int n)
{
    int i,j;
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
            if(a[j].avg < a[j+1].avg)
            {
                stu t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
}

void calc(stu a[],int n)
{
    int i,j;
    for(i=0;i<n;i++)
    {
        int sum = 0;
        for (j=0; j<5; ++j)
        {
            sum += a[i].score[j];
        }
        a[i].avg = sum/5.0;
        a[i].sum = sum;
    }
}
void out(stu a[],int n)
{
    int i;
    printf(" 学号       姓名 成绩1 成绩2 成绩3 成绩4 成绩5 总成绩 平均成绩\n") ;
    for(i=0;i<n;i++)
    {
        printf("%5d %10s %5d %5d %5d %5d %5d %6d %8.2f\n",a[i].num,a[i].name,a[i].score[0],a[i].score[1],a[i].score[2],a[i].score[3],a[i].score[4],a[i].sum,a[i].avg);
    }
}
void maxscore(stu a[],int n)
{
    int i,j,max=0;
    for(i=0;i<5;i++)
    {
        max=0;
        for(j=0;j<n;j++)
        {
            if (a[max].score[i]<a[j].score[i])
                max = j;
        }
        printf("成绩%d 单科的最高分学生学号:%d 姓名:%s 总成绩:%d 平均成绩:%.2f\n",i+1,a[max].num,a[max].name,a[max].sum,a[max].avg );
    }
}
void save(stu a[],int n)
{
    int i;
    FILE* fp;
    if ((fp = fopen("data.txt", "w")) == NULL)
    {
        printf("cannot open file\n");
        return;
    }
    fprintf(fp," 学号       姓名 成绩1 成绩2 成绩3 成绩4 成绩5 总成绩 平均成绩\n") ;
    for(i=0;i<n;i++)
    {
        fprintf(fp,"%5d %10s %5d %5d %5d %5d %5d %6d %8.2f\n",a[i].num,a[i].name,a[i].score[0],a[i].score[1],a[i].score[2],a[i].score[3],a[i].score[4],a[i].sum,a[i].avg);
    }
    fclose(fp);
}

int main()
{
    int i,j,k,n;
    stu a[100];
    scanf_s("%d", &n);
    input(a,n);
    calc(a,n);
    sort(a,n);
    out(a,n);
    maxscore(a,n);
    save(a,n);
    return 0;
}