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

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日

悬赏问题

  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥15 pyqt信号槽连接写法
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。