六、數(shù)字排序
在文件in.dat中有200組數(shù)據(jù),每組有3個(gè)數(shù),每個(gè)數(shù)均是三位數(shù)。函數(shù)ReadDat()讀取這200組數(shù)據(jù)存放到結(jié)構(gòu)數(shù)組aa中,請編制函數(shù)jsSort(),其函數(shù)的功能是:要求在200組數(shù)據(jù)中找出條件為每組中的第一個(gè)數(shù)大于第二個(gè)數(shù)加第三個(gè)數(shù)的之和,其中滿足條件的個(gè)數(shù)作為函數(shù)jsSort() 的返回值,同時(shí)把滿足條件的數(shù)據(jù)存入結(jié)構(gòu)數(shù)組bb中,再對bb中的數(shù)據(jù)按照每組數(shù)據(jù)的第一個(gè)數(shù)加第三個(gè)之和的大小進(jìn)行升序排列(第一個(gè)數(shù)加第三個(gè)數(shù)的和均不相等),排序后的結(jié)果仍重新存入結(jié)構(gòu)數(shù)組bb中,最后調(diào)用函數(shù)WriteDat()把結(jié)果bb輸出到文件out.dat中。
部分源程序已給出。
請勿改動(dòng)主函數(shù)main()、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。
#include
#include
#include
typedef struct{
int x1,x2,x3;
}data;
data aa[200],bb[200];
int jsSort()
{
}
void main()
{
int count;
readDat();
count=jsSort(); /*返回滿足條件的個(gè)數(shù)*/
writeDat(count);
}
readDat(int count)
{
FILE *in;
int i;
in=fopen("in.dat","r");
for(i=0; i<200; i++)
fscanf(in,"%d,%d,%d",&aa[i].x1,&aa[i].x2,&aa[i].x3);
fclose(in);
}
writeDat()
{
FILE *out;
int i;
clrscr();
out=fopen("out.dat","w");
for(i=0; i<10; i++){
printf("%d,%d,%d 第一個(gè)數(shù)+第三個(gè)數(shù)=%d\n",bb[i].x1,bb[i].x2,bb[i].x3,bb[i].x1+bb[i].x3); fprintf(out,"%d,%d,%d\n",bb[i].x1,bb[i].x2,bb[i].x3);
}
fclose(out);
}
注:最后排序采用冒泡法。
int jsSort()
{
int i,j,k=0;
DATA swap; /*定義一個(gè)結(jié)構(gòu)體變量,作為交換時(shí)的臨時(shí)存放地*/
for(i=0;i<200;i++)
if(aa[i].x1>(aa[i].x2+aa[i].x3))
bb[k++]=aa[i];
/*先將符合第一個(gè)數(shù)大于第二個(gè)數(shù)加第三個(gè)數(shù)的之和的數(shù)存入bb數(shù)組中*/
for(i=0;ifor(j=i+1;jif((bb[i].x1+bb[i].x3)>(bb[j].x1+bb[j].x3))
{
swap=bb[i];
bb[i]=bb[j];
bb[j]=swap; /*在BB數(shù)組中進(jìn)行排序(從小到大)*/
}
return k;
}
在文件in.dat中有200組數(shù)據(jù),每組有3個(gè)數(shù),每個(gè)數(shù)均是三位數(shù)。函數(shù)ReadDat()讀取這200組數(shù)據(jù)存放到結(jié)構(gòu)數(shù)組aa中,請編制函數(shù)jsSort(),其函數(shù)的功能是:要求在200組數(shù)據(jù)中找出條件為每組中的第一個(gè)數(shù)大于第二個(gè)數(shù)加第三個(gè)數(shù)的之和,其中滿足條件的個(gè)數(shù)作為函數(shù)jsSort() 的返回值,同時(shí)把滿足條件的數(shù)據(jù)存入結(jié)構(gòu)數(shù)組bb中,再對bb中的數(shù)據(jù)按照每組數(shù)據(jù)的第一個(gè)數(shù)加第三個(gè)之和的大小進(jìn)行升序排列(第一個(gè)數(shù)加第三個(gè)數(shù)的和均不相等),排序后的結(jié)果仍重新存入結(jié)構(gòu)數(shù)組bb中,最后調(diào)用函數(shù)WriteDat()把結(jié)果bb輸出到文件out.dat中。
部分源程序已給出。
請勿改動(dòng)主函數(shù)main()、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。
#include
#include
#include
typedef struct{
int x1,x2,x3;
}data;
data aa[200],bb[200];
int jsSort()
{
}
void main()
{
int count;
readDat();
count=jsSort(); /*返回滿足條件的個(gè)數(shù)*/
writeDat(count);
}
readDat(int count)
{
FILE *in;
int i;
in=fopen("in.dat","r");
for(i=0; i<200; i++)
fscanf(in,"%d,%d,%d",&aa[i].x1,&aa[i].x2,&aa[i].x3);
fclose(in);
}
writeDat()
{
FILE *out;
int i;
clrscr();
out=fopen("out.dat","w");
for(i=0; i<10; i++){
printf("%d,%d,%d 第一個(gè)數(shù)+第三個(gè)數(shù)=%d\n",bb[i].x1,bb[i].x2,bb[i].x3,bb[i].x1+bb[i].x3); fprintf(out,"%d,%d,%d\n",bb[i].x1,bb[i].x2,bb[i].x3);
}
fclose(out);
}
注:最后排序采用冒泡法。
int jsSort()
{
int i,j,k=0;
DATA swap; /*定義一個(gè)結(jié)構(gòu)體變量,作為交換時(shí)的臨時(shí)存放地*/
for(i=0;i<200;i++)
if(aa[i].x1>(aa[i].x2+aa[i].x3))
bb[k++]=aa[i];
/*先將符合第一個(gè)數(shù)大于第二個(gè)數(shù)加第三個(gè)數(shù)的之和的數(shù)存入bb數(shù)組中*/
for(i=0;ifor(j=i+1;jif((bb[i].x1+bb[i].x3)>(bb[j].x1+bb[j].x3))
{
swap=bb[i];
bb[i]=bb[j];
bb[j]=swap; /*在BB數(shù)組中進(jìn)行排序(從小到大)*/
}
return k;
}