761 2022-01-04 21:05 采纳率: 33.3%
浏览 38
已结题

成绩处理(3)按总分求名次

描述
某个班级有n位学生(n不超过100)和m门功课(m不超过20)。现在输入每个学生的姓名(名字长度不超过20个字符)和每门功课成绩。要求计算每个同学的总分,并根据总分求名次。名次的规定如下。总分相同,名次相同。假设最高分100有3人,第2高分为99有2,第3高分为95,则名次如下: 100 1 100 1 100 1 99 4 99 4 95 6 不能使用排序方法求名次。

输入
第一行输入两个整数,表示行数(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
输出
Jack 265 3
Allan 273 1
Tom 251 5
Deng 167 7
Jane 208 6
Ana 266 2
Anne 264 4

  • 写回答

1条回答 默认 最新

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

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

    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(j=0;j<n;j++)
    {
    a[j].rank=0;
    for(i=0;i<n;i++)
    {
    if(a[i].total>a[j].total)
    a[j].rank++;
    }
    }

    for(i=0;i<n;i++)
     {  
       printf("%s ",a[i].name);
     
       printf("%d %d\n",a[i].total,a[i].rank);
    }
            return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月5日
  • 已采纳回答 1月5日
  • 创建了问题 1月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的速度时间图像)我想问线路信息是什么