结构体排序

定义学生信息结构体和结构体数组,包括学号、两门百分制成绩和姓名;键盘输入

学生不多于 30 人的信息,以输入成绩为负数或大于 100 作为输入结束;按照学号和平均成绩排序,并输出学生信息

//输入学生分数信息,学号排序和平均分排序后输出

#include <stdio.h>

struct student{
    long num;
    char name[20];
    float score[2];
    float aver;
}stu[],temp;

int main(void){
    int i,j,k,n;
    printf("Enter score1 score2 num name\n");
    for(i=0;;i++){		//当输入的分数1小于0或大于100时结束输入
        scanf("%f %f %ld %s",&stu[i].score[0],&stu[i].score[1],&stu[i].num,stu[i].name);
        if(stu[i].score[0]<0 || stu[i].score[0]>100) break;
        stu[i].aver=(stu[i].score[0] + stu[i].score[1]) / 2.0;
        
    }
    
    for(j=1;j<i-1;j++){                 //学号冒泡法排序
        
        for(k=0;k<i-j;k++){
            if(stu[k].num > stu[k+1].num){
                temp=stu[k];
                stu[k]=stu[k+1];
                stu[k+1]=temp;
            }
        }
    }
    printf("after num\n");              //输出
    printf("num\tname\t\t\tscore1\tscore\taver\n");
    for(n=0;n<i;n++)
        printf("%ld\t%s\t%.1f\t\t%.1f\t\t%.1f\n",stu[n].num, stu[n].name, stu[n].score[0], stu[n].score[1],stu[n].aver);
    
    
    for(j=1;j<i-1;j++){                 //平均分冒泡法排序
        
        for(k=0;k<i-j;k++){
            if(stu[k].aver > stu[k+1].aver){
                temp=stu[k];
                stu[k]=stu[k+1];
                stu[k+1]=temp;
            }
        }
    }
    printf("after aver\n");
    printf("num\tname\t\tscore1\tscore\taver\n");
    
    for(n=i-1;n>=0;n--)
        printf("%ld\t%s\t%.1f\t\t%.1f\t\t%.1f\n",stu[n].num, stu[n].name, stu[n].score[0], stu[n].score[1],stu[n].aver);
    return 0;
}


  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值