感谢大佬666 2022-05-16 20:18 采纳率: 83%
浏览 91
已结题

敲代码遇到点问题,求解

in:
3
zhangsan 80 75 65
lisi 65 52 56
wangwu 87 86 95
输出:
wangwu 87 86 95 89.33
zhangsan 80 75 65 73.33
lisi 65 52 56 57.67


#include <stdio.h>
#include<string.h>

typedef struct        //定义结构
{
    char name[10];
    int a;
    int b;
    int c;
    double avg;
} student;            //命名结构
int main()
{    //char temp1;
    int n, i,j,temp2;
    while(scanf("%d",&n) != -1)  //处理到文件尾的输入方式
    {
        student stu[n];          //定义一个结构类型的数组
        for(i = 0; i < n; i++)
        {
            scanf("%s %d %d %d",stu[i].name, &stu[i].a,&stu[i].b,&stu[i].c);
            stu[i].avg = (stu[i].a+stu[i].b+stu[i].c)/3.0; //求平均数
        }
       for(i=0;i<n;i++)//使用双层循环,对名字进行排序
    {
        for(j=0;j<n-i;j++)
        {
            if(stu[j].avg>stu[j+1].avg)//如果前者大于后者,两者进行交换,同时对应成绩也进行交换
            {
                temp1=stu[j].name;
                stu[j].name=stu[j+1].name;
                stu[j+1].name=temp1;
                temp2=stu[j].avg;
                stu[j].avg=stu[j+1].avg;
                stu[j+1].avg=temp2;
                
            }
            
        }
            printf("%s %d %d %d %.2lf\n",stu[i].name, stu[i].a,stu[i].b,stu[i].c,stu[j].avg);
        }
   }
    return 0;
}
  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-05-16 20:40
    关注

    修改见注释,供参考:

    #include <stdio.h>
    #include<string.h>
    typedef struct//定义结构
    {
        char name[10];
        int a;
        int b;
        int c;
        double avg;
    }student;
    int main()
    {
        int n, i, j;
        student tmp, stu[10];
        while(scanf("%d",&n) == 1 && n != 0)//输入 0 或 ctrl + z 结束
        {
            for(i = 0; i < n; i++)
            {
                scanf("%s %d %d %d",stu[i].name, &stu[i].a,&stu[i].b,&stu[i].c);
                stu[i].avg = (stu[i].a+stu[i].b+stu[i].c)/3.0; //求平均数
            }
            for(i=0;i<n-1;i++)
            {
                for(j=0;j<n-i-1;j++)
                {
                    if(stu[j].avg < stu[j+1].avg)
                    {
                        tmp = stu[j];
                        stu[j]=stu[j+1];
                        stu[j+1]=tmp;
                    }
                    else if((stu[j].avg == stu[j+1].avg) && (strcmp(stu[j].name,stu[j+1].name) > 0))
                    {
                        tmp = stu[j];
                        stu[j]=stu[j+1];
                        stu[j+1]=tmp;
                    }
                }
            }
            for(i=0;i<n;i++)
                printf("%s %d %d %d %.2lf\n",stu[i].name, stu[i].a,stu[i].b,stu[i].c,stu[i].avg);
       }
       return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月24日
  • 已采纳回答 5月16日
  • 创建了问题 5月16日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)