C語言結構體排序


定義學生信息結構體和結構體數組,包括學號、兩門百分制成績和姓名;鍵盤輸入

學生不多於 30 人的信息,以輸入成績為負數或大於 100 作為輸入結束;按照學號和平均成績排序,並輸出學生信息

 
        
 1 //輸入學生分數信息,學號排序和平均分排序后輸出
 2 
 3 #include <stdio.h>
 4 
 5 struct student{
 6     long num;
 7     char name[20];
 8     float score[2];
 9     float aver;
10 }stu[],temp;
11 
12 int main(void){
13     int i,j,k,n;
14     printf("Enter score1 score2 num name\n");
15     for(i=0;;i++){        //當輸入的分數1小於0或大於100時結束輸入
16         scanf("%f %f %ld %s",&stu[i].score[0],&stu[i].score[1],&stu[i].num,stu[i].name);
17         if(stu[i].score[0]<0 || stu[i].score[0]>100) break;
18         stu[i].aver=(stu[i].score[0] + stu[i].score[1]) / 2.0;
19         
20     }
21     
22     for(j=1;j<i-1;j++){                 //學號冒泡法排序
23         
24         for(k=0;k<i-j;k++){
25             if(stu[k].num > stu[k+1].num){
26                 temp=stu[k];
27                 stu[k]=stu[k+1];
28                 stu[k+1]=temp;
29             }
30         }
31     }
32     printf("after num\n");              //輸出
33     printf("num\tname\t\t\tscore1\tscore\taver\n");
34     for(n=0;n<i;n++)
35         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);
36     
37     
38     for(j=1;j<i-1;j++){                 //平均分冒泡法排序
39         
40         for(k=0;k<i-j;k++){
41             if(stu[k].aver > stu[k+1].aver){
42                 temp=stu[k];
43                 stu[k]=stu[k+1];
44                 stu[k+1]=temp;
45             }
46         }
47     }
48     printf("after aver\n");
49     printf("num\tname\t\tscore1\tscore\taver\n");
50     
51     for(n=i-1;n>=0;n--)
52         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);
53     return 0;
54 }

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM