MseVeN235 2022-06-04 00:15 采纳率: 100%
浏览 165
已结题

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

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

  • 写回答

1条回答 默认 最新

  • 天际的海浪 2022-06-04 02:49
    关注

    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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月12日
  • 已采纳回答 6月4日
  • 创建了问题 6月4日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么