761 2022-01-04 20:59 采纳率: 33.3%
浏览 34
已结题

绩处理(2)按总分从高到低输出

描述
某个班级有n位学生(n不超过100)和m门功课(m不超过20)。现在输入每个学生的姓名和每门功课成绩。要求计算每个同学的总分,按总分排序(降序)。 姓名最长不超20个字符。
输入
第一行输入两个整数,表示行数(n)和列数(m)。 接着n行,每行先输入姓名(姓名没有空格),然后输入m个整数,用空格分隔。每行代表一个同学的m门功课的分数
输出
输出排序后的全部同学,每行一个。输出他的姓名,每门课成绩和总分。用一个空格分隔。
样例
输入
7 3
Jack 91 75 99
Allan 90 88 95
Tom 87 97 67
Deng 76 48 43
Jane 65 76 67
Ana 94 85 87
Anne 83 92 89
输出
Allan 90 88 95 273
Ana 94 85 87 266
Jack 91 75 99 265
Anne 83 92 89 264
Tom 87 97 67 251
Jane 65 76 67 208
Deng 76 48 43 167

  • 写回答

1条回答 默认 最新

  • 761 2022-01-05 17:42
    关注

    #include<stdio.h>
    struct stud
    {
    char name[20];
    int mark[20];
    int total;
    };

    int main( )
    {
    struct stud a[100];

    int n,m,i,j,k;
    struct stud temp;
    scanf("%d %d",&n,&m);
    for(i=0;i<n;i++)
    {
      a[i].total=0;
      scanf("%s",a[i].name);
      for(j=0;j<m;j++)
       {
          
         scanf("%d",&a[i].mark[j]);
         a[i].total+=a[i].mark[j]; 
      }
    }
    
    for(i=1;i<n;i++)
      for(j=0;j<n-i;j++)
        if(a[j].total<a[j+1].total)
        {
          temp=a[j];a[j]=a[j+1];a[j+1]=temp;
    
        }
    
    for(i=0;i<n;i++)
     {  
       printf("%s ",a[i].name);
       for(j=0;j<m;j++)
         printf("%d ",a[i].mark[j] );
       printf("%d\n",a[i].total);
    }
            return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月5日
  • 已采纳回答 1月5日
  • 创建了问题 1月4日

悬赏问题

  • ¥15 hexo+github部署博客
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?