2006年9月全國等級考試三級c語言上機題庫(六)

題目6 正整數排序

在檔案in.dat中有200個正整數,且每個數均在1000至9999之間。函式readdat()讀取這200個數存放到數組aa中。請編制函式jssort(),其函式的功能是:要求按每個數的後三位的大小進行降序排列,然後取出滿足此條件的前10個數依次存入數組b中,如果後三位的數值相等,則按原先的數值進行升序排列。最後調用函式writedat()把結果bb輸出到檔案out.dat中。
例:處理前 9012 5099 6012 7025 8088
處理後 5099 8088 7025 6012 9012
注意:部分源程式已給出。
請勿改動主函式main()、讀數據函式readdat()和輸出數據函式writedat()的內容。
#include<stdio.h>
#include<string.h>
#include<conio.h>

int aa[200],bb[10];

void jssort()
{
int i,j,data;
for(i=0;i<199;i++)
for(j=i+1;j<200;j++)
if(aa[i]%1000<aa[j]%1000||aa[i]%1000==aa[j]%1000&&aa[i]>aa[j])
{data=aa[i];aa[i]=aa[j];aa[j]=data;}
for(i=0;i<10;i++)
bb[i]=aa[i];
}

void main()
{
readdat();
jssort();
writedat();
system("pause");
}

readdat()
{
file *in;
int i;

in=fopen("in.dat","r");
for(i=0; i<200; i++) fscanf(in,"%d,",&aa[i]);

fclose(in);
}

writedat()
{
file *out;
int i;
clrscr();
out=fopen("out.dat","w");
for(i=0; i<10; i++){
printf("i=%d,%d\n",i+1,bb[i]);
fprintf(out,"%d\n",bb[i]);
}
fclose(out);
}