文件"A"和文件“B"分别已经存放有按照递增顺序排好序的小数,请将两个文件中的数据读出来写到文件”C"中,并同样按照递增顺序存入文件之中。
目前想到的是设一个大数组,依次从A、B文件读入数据,然后对这个大数组排序,然后保存到C文件。
有一点不满意的是,数组有尺寸限制。
void bubble_sort(double *ar, int rcount);
void resortToFile(FILE *fp1, FILE *fp2, FILE *fp3, double *ar, int *rcount);
#define MAX_NUM 1000
//
int main(int argc, char *argv[])
{
FILE *fp1, *fp2, *fp3;
int rcount=0;
double ar[MAX_NUM]={0.0};
fp1 = fopen("l1.txt", "r");
fp2 = fopen("l2.txt", "r");
fp3 = fopen("output.txt", "w");
resortToFile(fp1, fp2, fp3, ar, &rcount);
if(fp1!=NULL)
fclose(fp1);
if(fp2!=NULL)
fclose(fp2);
if(fp3!=NULL)
fclose(fp3);
return(0);
}
//从fp1和fp2两个文件读入数据,生成数组,排序后输出到fp3,要
//排序方法用简单的冒泡算法
void resortToFile(FILE *fp1, FILE *fp2, FILE *fp3, double *ar, int *rcount)
{
int nCount=0;
double r1;
int s1=0, s2=0;
if((fp1!=NULL)&&(fp2!=NULL)&&(fp3!=NULL))
{
while((s1=fscanf(fp1, "%lf", &r1))!=EOF)
{
nCount++;
*(ar+nCount-1)=r1;
}
while((s2=fscanf(fp2, "%lf", &r1))!=EOF)
{
nCount++;
*(ar+nCount-1)=r1;
}
bubble_sort(ar, nCount); //冒泡排序,数组作为参数,需要同时传递数组长度
for(int i=0;i<nCount;i++)
fprintf(fp3, "%f\t", *(ar+i));
*rcount=nCount;
}
}
//对数组进行冒泡排序
void bubble_sort(double *ar, int rcount)
{
int i=rcount-1, j=0;
for(i=0;i<rcount;i++)
{
for(j=rcount-1;j>i;j--)
{
if(*(ar+j)<*(ar+j-1))
{
double tmp = *(ar+j-1);
*(ar+j-1)= *(ar+j);
*(ar+j) = tmp;
}
}
}
}
但是,感觉还不够完美。按道理,应该按序把A和B文件分别读出的数据,比较后写入C,再从A或B读取下一个数据,再比较,再保存...
例如 A:1.1 2.1 3.1
B:1.8 2.9 3.0 3.6
那么,(1)分别从A读入1.1,从B读入1.8,把1.1写入C;
(2)从A读入2.1,与上次从B读出的1.8比较后,1.8写入C;
(3)从B读入2.9,与上次A读入的2.1比较后,2.1写入C;
(4)...
感觉逻辑有点复杂,以后再说吧。