生活随笔
收集整理的這篇文章主要介紹了
C_北理工乐学_结构
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
C_北理工樂學_結構
58. 學生成績排序
/* 如果有優(yōu)化方案評論我啊 */
/為什么代碼沒有高亮?/
大家參加了期末考試,成績出來后老師要對 n 個學生進行成績匯總和排序。要求程序按成績降序進行排序。在排序過程中對于成績相同的學生,要按照輸入數(shù)據(jù)的順序進行排列。例如:有5名學生的成績:
zhang1,90
zhang2,91
zhang3,99
zhang4,91
zhang5,98
則排序結果應該為:
zhang3,99
zhang5,98
zhang2,91
zhang4,91
zhang1,90
>請注意例題中“zhang2”和“zhang4”的排列順序。
輸入:
第一行為將要輸入的學生數(shù)量n
從第二行起后面連續(xù) n 行數(shù)據(jù),每行為一名學生的姓名(長度不超過20個字符,不包括空格),考試成績(int)
輸出:
排序后的結果。每行為一名學生的姓名和成績。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{int num;int i,j,t=0;char inf[10000];int m[100];int temp;int flag;struct o{char name[1000];int score;int no;}student[100];/*輸入學生個數(shù)*/scanf("%d",&num); for(i=0;i<num;i++){ student[i].no=i; //標記序號t=0;flag=0;scanf("%s",inf);/*輸入姓名*/for(j=0;inf[j]!=',';j++){student[i].name[j]=inf[j];}student[i].name[j]='\0'; //添加姓名尾標/*輸入成績*/for(j++;inf[j]!='\0';j++){m[t]=inf[j]-'0';t++;}student[i].score=0;for(j=0;j<t;j++)student[i].score=m[j]*pow(10,t-j-1)+student[i].score; //計算成績}/*降序排序*/for(i=0;i<num;i++)for(j=i+1;j<num;j++)if(student[i].score<student[j].score&&student[i].no<student[j].no){temp=student[i].no;student[i].no=student[j].no;student[j].no=temp; }/*分數(shù)相同根據(jù)姓名排序*//*因為玄學把單獨拿出來,否則測試用例1錯誤*/for(i=0;i<num;i++)for(j=i+1;j<num;j++)if(student[i].score==student[j].score){for(t=0;student[j].name[t]!='\0'&&student[i].name[t]!='0';t++)if(student[j].name[t]>student[i].name[t]&&student[j].no<student[i].no){temp=student[i].no;student[i].no=student[j].no;student[j].no=temp; }}/*輸出*/for(i=0;i<num;i++)for(j=0;j<num;j++)if(student[j].no==i){for(t=0;student[j].name[t]!='\0';t++)printf("%c",student[j].name[t]);printf(",");printf("%d\n",student[j].score);}
}
總結
以上是生活随笔為你收集整理的C_北理工乐学_结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。