C語言,讀檔→排序→寫檔

2006-08-19 3:38 am
各位大大好,
小弟有個問題想請教。

請問如何設計一個程式
資料由input檔案讀入→排序→寫入output檔案 ??

input檔案內容
學號 姓名 A成績 B成績C成績 D成績 E成績 F成績 G成績 平均
111001 小芳 80 5 25 76 76 76 36 60.1
111002 阿賢 80 60 45 76 76 76 33 63.0
111003 小岳 80 70 44 74 59 67 30 56.0
111203 香香(女) 80 46 75 90 82 86 75 79.8
111208 雞排 80 68 77 92 80 86 65 78.2
112035 黑輪 95 72 25 71 46 59 72 60.8
111509 野狼 80 55 47 85 73 79 65 71.9
111270 豹子 80 65 47 74 59 67 60 63.4
112089 宏仔 75 83 70 79 74 77 79 76.7
111034 小咪 80 67 42 86 78 82 76 77.1
111230 麻糬 70 70 50 76 76 76 76 74.1
101453 豬豬 80 35 30 79 79 79 78 74.2
111708 水果(女) 80 5 25 76 76 76 36 60.1
111709 彩虹(女) 80 60 45 76 76 76 33 63.0
112100 江水 80 70 44 74 59 67 30 56.0
112130 小蛋 100 30 51 86 86 86 40 70.5
112235 阿君 80 73 75 86 86 86 38 72.5
113851 老張 80 76 79 89 81 85 38 71.7
111809 小金 75 15 20 83 71 77 39 60.6
(因排版關係,假設已對齊)

Output
*實作兩種以上的排序方法
* 依學期成績、學號來排序
* 依性別、學期成績來排序

又假設input高達五十位同學,將如何修改?
謝謝大大們花時間看這題目
更新1:

各位大大,對不起忘了補充,那檔案INPUT是假設已經對齊好,輸出的話,也希望能格式化對齊輸出。麻煩了~

更新2:

第一種排序就是假設學期成績遇到相同,就以第二順位學號來排序。 第二種排序如果遇到性別相同,以學期成績來排序。 謝謝大大們花時間來看這題目~謝謝

更新3:

謝謝大大們的指教。 可是我在知識翻了兩天的舊文章 真的!!有看到類似題目,可是我卻修改不出我所要條件!! 加上,我身旁無友人可以給我協助..... 所以才想看大大們如果解這提問題。

回答 (4)

2006-08-19 9:43 am
✔ 最佳答案
#include<stdio.h>
#include<algorithm>

using namespace std;

typedef struct _data
{
int id;
char name[200];
int a;
int b;
int c;
int d;
int e;
int f;
int g;
double avg;
}DATA;

DATA d[50];
int num=0;

class SortRule
{
public:
bool operator()(DATA d1,DATA d2)
{
if(d1.avg>d2.avg) //成績由高到低
return true;
else if(d1.avg==d2.avg){ //如果一樣就看學號
if(d1.id<d2.id) //學號由低到高
return true;
else
return false;
}else
return false;

}
};


void readData()
{
char sen[1000];
FILE * fp;
fp=fopen("in.txt","r");
if(fp!=0)
{
fgets(sen,1000,fp);
while(fgets(sen,1000,fp))
{
sscanf(sen,"%d %s %d %d %d %d %d %d %d %lf",&d[num].id,&d[num].name,&d[num].a,&d[num].b,&d[num].c,&d[num].d,&d[num].e,&d[num].f,&d[num].g,&d[num].avg);
num++;
}
}
fclose(fp);
}

int main()
{

readData();
sort(d,d+num,SortRule());
for(int i=0;i<num;i++)
printf("%d %10s %3d %3d %3d %3d %3d %3d %3d %lf\n",d[i].id,d[i].name,d[i].a,d[i].b,d[i].c,d[i].d,d[i].e,d[i].f,d[i].g,d[i].avg);



return 0;
}

我只做第一題...
有問題....可找我....
MSN:[email protected]
參考: 當然是我的大腦...XD
2006-08-19 6:23 am
支持綿羊語錄!!
另外,知識+也有過這樣的問題,請版主用了綿羊法後還有疑問時,先搜尋知識+的舊資料,真的不能解決,再 post 問題。
2006-08-19 4:35 am
不懂"依學期成績、學號來排序",到底是學期成績還是學號呢?
2006-08-19 4:07 am
請自行查閱「資料結構」的C 語言書籍


收錄日期: 2021-04-27 17:16:44
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20060818000014KK13497

檢視 Wayback Machine 備份