结构体排序

来源:互联网 发布:宁波行知实验小学如何 编辑:程序博客网 时间:2024/05/17 22:35

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

学生不多于 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;}


2 0