【問題描述】
某班有不超過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 ...