IAWFY542 2021-11-26 17:34 采纳率: 100%
浏览 615
已结题

使用C语言统计学生成绩

某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。
考试后要求:
(1)计算每个学生的总分和平均分;
(2)按总分成绩由高到低排出成绩的名次;
(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;
(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。
提示:用二维数组score存放每个学生各门课程的成绩,用一维数组num存放每个学生
的学号,用一维数组sum存放每个学生的总分,用一维数组aver存放每个学生的平均分。
(1)用函数编程实现计算每个学生的总分;
(2)用函数编程实现按总分由高到低对学生成绩排序,注意:排序时,一维数组sum
元素的变化应连同二维数组score和一维数组num和aver一起变化;
(3)用函数编程实现查找学号为k的学生在班级中的排名名次及相关成绩等信息,找
不到时返回-1值。

  • 写回答

2条回答 默认 最新

  • 关注

    代码如下:

    #include <stdio.h>
    //计算总分
    void total(int score[][3],int n,int sum[])
    {
        int i,j;
        for (i=0;i<n;i++)
        {
            sum[i] = 0;
            for(j=0;j<3;j++)
                sum[i] += score[i][j];
        }
    }
    //计算平均分
    void averger(int sum[],int n,float avg[])
    {
        int i;
        for(i=0;i<n;i++)
            avg[i] = 1.0 * sum[i]/3;
    }
    
    //按总分排序
    void sort(int sum[],int n,int score[][3],float avg[],int num[])
    {
        int i,j;
        int t,k;
        float f;
        for (i=0;i<n-1;i++)
        {
            for (j=0;j<n-1-i;j++)
            {
                if (sum[j] < sum[j+1])
                {
                    t = sum[j];
                    sum[j] = sum[j+1];
                    sum[j+1]=t;
    
                    //交换平均分
                    f=avg[j];
                    avg[j+1]=avg[j+1];
                    avg[j+1]=f;
                    //交换score
                    for(k=0;k<3;k++)
                    {
                        t = score[j][k];
                        score[j][k]= score[j+1][k];
                        score[j+1][k] = t;
                    }
                    //交换学号
                    t = num[j];
                    num[j]=num[j+1];
                    num[j+1]=t;
                }
            }
        }
    }
    
    //排名,并保存名次
    void pm(int sum[],int pm[],int n)
    {
        int i = 0;
        int mc = 1;
        pm[0] = 1;
        for (i=1;i<n;i++)
        {
            if(sum[i]== sum[i-1])
                pm[i] = mc;
            else
            {
                mc++;
                pm[i] = mc;
            }
        }
    }
    
    
    //打印名次表
    void printmc(int num[],int n,int pm[])
    {
        int i;
        printf("学号  排名\n");
        for (i=0;i<n;i++)
        {
            printf("%-2d  %d\n",num[i],pm[i]);
        }
    }
    //查找k
    int findstu(int num[],int score[][3],int n,int sum[],int mc[],int k)
    {
        int i=0;
        for (i=0;i<n;i++)
        {
            if(num[i] == k)
            {
                printf("学号:%d\n",num[i]);
                printf("成绩:%d %d %d\n",score[i][0],score[i][1],score[i][2]);
                printf("总成绩:%d\n",sum[i]);
                printf("名次:%d\n",mc[i]);
                break;
            }
        }
        if(i==n)
        {
            printf("未找到该学号学员\n");
            return -1;
        }
        return 0;
    }
    
    int main()
    {
        int score[30][3],sum[30],num[30],mc[30];
        float avg[30];
        int n,k,i,j;
        printf("请输入学员人数:");
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            printf("请输入学员%d的数学、英语和物理成绩:",i+1);
            num[i] = i+1;
            for(j=0;j<3;j++)
                scanf("%d",&score[i][j]);
        }
    
        //计算总成绩
        total(score,n,sum);
        //计算平均成绩
        averger(sum,n,avg);
        //根据总成绩排序
        sort(sum,n,score,avg,num);
        //排名
        pm(sum,mc,n);
        //打印排名
        printmc(num,n,mc);
        //查找某个学号学员的信息
        printf("请输入要查找的学员学号:");
        scanf("%d",&k);
        findstu(num,score,n,sum,mc,k);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月7日
  • 已采纳回答 11月29日
  • 创建了问题 11月26日

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加