qq_58779202
2021-06-13 10:46
采纳率: 50%
浏览 115

c语言学生成绩排序(结构体)

如图,求大神解答呜呜呜急求

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 已采纳
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
     int n;
    struct person
    {
        char id [20];
        char name [20];
        int s1,s2,s3;
        int sum;
    } p[100];
    
    void input()
    {
    
        scanf("%d",&n);
        for(int i=0; i<n; i++)
        {
            p[i].sum=0;
            scanf("%s %s %d %d %d",p[i].id,p[i].name,&p[i].s1,&p[i].s2,&p[i].s3);
            p[i].sum+=p[i].s1+p[i].s2+p[i].s3;
        }
    
    }
    int main()
    {
        int i,j,t,m;
        input();
        for(i=0;i<n;i++)    {
        	for(j=0;j<n-i-1;j++){
    			if(p[j].sum<p[j+1].sum)
    			{
                   char str[101],str1[101];
    		       m=p[j].s1;
                   p[j].s1=p[j+1].s1;
                   p[j+1].s1=m;
    
                   m=p[j].s2;
                   p[j].s2=p[j+1].s2;
                   p[j+1].s2=m;
    
                   m=p[j].s3;
                   p[j].s3=p[j+1].s3;
                   p[j+1].s3=m;
    
                   m=p[j].sum;
                   p[j].sum=p[j+1].sum;
                   p[j+1].sum=m;
    
                    strcpy(str,p[j+1].name);
                    strcpy(p[j+1].name,p[j].name);
                    strcpy(p[j].name,str) ;
    
                    strcpy(str1,p[j+1].id);
                    strcpy(p[j+1].id,p[j].id);
                    strcpy(p[j].id,str1) ;
    				}
    		 }
    	}
        for(i=0; i<n; i++)
        {
            printf("%s %s %d %d %d %d\n",p[i].id,p[i].name,p[i].s1,p[i].s2,p[i].s3,p[i].sum);
    }
        }
    
    /* 5
    101 张三 80 76 98
     102 李四 96 56 78
     103 王五 64 89 63
     104 小二 62 54 86
     105 小四 78 86 91*/
    

    已采纳该答案
    评论
    解决 1 无用
    打赏 举报
  • CSDN专家-张老师 2021-06-13 10:47
    #include <stdio.h>
    
    struct student
    {
    int number ;
    char name[10] ;
    int math ;
    int english ;
    int chinse ;
    double average ;
    } ;
    int main()
    {
    int num ;
    int i,j ;
    struct student temp;
    struct student st_arr[10];
    scanf("%d",&num);
    for(i=0;i<num;i++)
    {
    scanf("%d %s %d %d %d",&st_arr[i].number,&st_arr[i].name,&st_arr[i].math,&st_arr[i].english,&st_arr[i].chinse);
    st_arr[i].average=(st_arr[i].math+st_arr[i].english+st_arr[i].chinse)*1.0/3 ;
    }
    
    for(i=0;i<num-1;i++)
    {
    for(j=0;j<num-1-i;j++)
    {
    if(st_arr[j].average<st_arr[j+1].average)
    {
    temp=st_arr[j];
    st_arr[j]=st_arr[j+1];
    st_arr[j+1]=temp;
    }
    }
    }
    
    for(i=0;i<num;i++)
    {
    printf("%d %s %.2lf\n",st_arr[i].number,st_arr[i].name,st_arr[i].average);
    }
    
    }
    评论
    解决 无用
    打赏 举报
  • CSDN专家-link 2021-06-13 11:02
    #include <stdio.h>
    typedef struct _student
    {
        int nid;
        char name[20] ;
        int math ;
        int eng;
        int chn;
        int total;
    }student ;
    void main()
    {
        int n,i,j,t;
        student stu[20];
        printf("请输入学生数量:");
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            printf("请输入第%d个学生信息:",i+1);
            scanf("%d %s %d %d %d",&sut[i].nid,stu[i].name,&stu[i].math,&stu[i].eng,&stu[i].chn);
            stu[i].total = stu[i].math + stu[i].eng + stu[i].chn;
        }
        for(i=0;i<n-1;i++)
        {
            for(j=0;j<n-1-i;j++)
            {
                if(stu[j].total < stu[j+1].total)
                {
                    t = stu[j];
                    stu[j] = stu[j+1];
                    stu[j+1] = t;
                }
            }
        }
        for(i=0;i<n;i++)
        {
            printf("%d %s %d\n",stu[i].nid,stu[i].name,stu[i].total);
        }
    }
    评论
    解决 无用
    打赏 举报
  • 有问必答小助手 2021-06-16 14:43

    您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题