學生成績排序

2021-09-29 03:29:37 字數 2012 閱讀 5011

【問題描述】

某班有不超過200名的學生,從檔案中輸入某班學生成績,對輸入成績按由高到低進行排序,並輸出到另乙個檔案中。

【輸入形式】

從檔案scorelist.in中讀入學生成績,學生成績以整數形式按行存放。注意,學生成績數目不確定。

【輸出形式】

將排序結果按行寫到檔案sorelist.out中。

【樣例輸入】

若檔案scorelist.in中有如下成績:

5875

6286

98【樣例輸出】

程式執行結束後檔案scorelist.out中內容為:

9886

7562

58思路一

問題可以分解為如下幾步:

對學生成績排序可以有多種方式。

思路二

每讀入乙個資料,就將其加到乙個有序資料集中的相應位置上,無需最後排序。其具體演算法如下:

1.設整型陣列scorelist存放排序後成績,n為其中學生成績個數,初始n為0;

2.分別以讀和寫方式開啟檔案scorelist.in和scorelist.out;

3.while 讀檔案中還有成績時,讀入乙個成績到score

將score插入到有序陣列scorelist中相應位置;

4.輸出陣列scorelist到寫檔案中;

5.關閉讀寫檔案;

思路一

#include

#define num 200

int n =0;

intreadlist

(int array)

;void

sortarray

(int array,

int n)

;void

writelist

(int array,

int n)

;int

main()

intreadlist

(int array)

while

(fscanf

(in,

"%d"

,&scorelist[n]

)>0)

n++;fclose

(in)

;return n;

}void

writelist

(int array,

int n)

for(i=

0; i

)fprintf

(out,

"%d\n"

,array[i]);

fclose

(out);}

//選擇排序實現

void

sortarray

(int array,

int n)

}/** 氣泡排序實現

void sortarray(int array, int n)if(

(out =

fopen

("scorelist.out"

,"w"))

==null

)while

(fscanf

(in,

"%d"

,&score )

>0)

insertdata

(scorelist, score)

;for

(i=0

; i)fprintf

(out,

"%d\n"

,scorelist[i]);

fclose

(in)

;fclose

(out)

;return0;

}void

insertdata

(int array,

int data )

學生成績排序

n.txt檔案內存放著學生的資訊 資訊包括姓名和分數 如 張三 90 李四 78 陳五 82 姓名和分數之間用空格隔開 分數和姓名之間換行 要求寫乙個程式 把這些資料根據分數從小到大進行排序 如 李四 78 陳五 82 張三 90 排序結果依然放入這個檔案中。大家看下如何寫,這裡的行數是隨機的。我寫...

學生成績排序

題目描述 總成績是按平時成績和考試成績加一塊的,平時成績佔30 考試成績佔70 平時成績和考試成績均為100 按照總成績排下序,總成績相同的看考試成績,考試成績相同的看平時成績,都相同的看姓名。成績按從大到小,姓名按字典序 輸入描述 先輸入乙個整數n,代表有n個學生,接下來有n行,0 include...

學生成績排序

編寫乙個程式,功能是對若干個同學的某門課程成績進行排序。要求定義乙個學生類,類中私有成員有學生的編號及成績 成員函式有建立資料 輸入資料函式 編寫乙個友元函式能完成對成績由高到低排序。從鍵盤輸入學生的個數 學號及一門課程的成績,呼叫排序程式後,將排序後的結果輸出。輸入 輸出格式如下 輸入 1001 ...