我是C的新手,一般编程。我正在尝试用C编写一个代码,该代码从名为' data.txt'的文件中读取数字列表(格式为100.000000,200.000000,30000.000002等)。然后它计算列表中所有可能数字之间的所有可能差异。该列表使得多个数字组可能出现相同的差异。
例如,让我们假设" data.txt"包含以下数字列表:
100.000000
200.000000
300.000000
400.000000
500.000000
在此列表中,100的差异发生在:(200-100),(300-200),(400-300),(500-400)。同样,差异200发生在:(300-100)。 (400-200),(500-300)等。
代码需要识别这种相等的差异并打印相等的差异,以及它们相等的组。
我写的代码是:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
clock_t start, end;
double time_used;
/*To measure execution time */
start = clock();
FILE* fp = fopen("data.txt", "r");
FILE* fu = fopen("output.txt","w");
FILE* fx = fopen("diffdata.txt","w");
int i,j,k,b;
int counter=0;
double a,MAX=0,MIN=0,temp;
double *arr=malloc(100000*sizeof(double));
//arr[10000],brr[10000],diff[10000],
for(i = 0; fscanf(fp, "%lf", &a) == 1; i++)
{
if( i == 10000 ) {
printf("File content too large\n");
fclose(fp);
return 1;
}
*(arr+i) = a;
}
double *arr2=malloc((i*i)*sizeof(double));
double *brr=malloc((i*i)*sizeof(double));
double *diff=malloc((i*i)*sizeof(double));
for(j=0;j<i-1;j++) {
for(k=j+1;k<i;k++) {
if((*(arr+j))<(*(arr+k))) {
temp=*(arr+k);
*(arr+k)=*(arr+j);
*(arr+j)=temp;
}
}
}
for(j=0;j<i-1;j++) {
for(k=j+1;k<i;k++) {
fprintf(fx,"%lf - %lf = %lf\n",*(arr+j),*(arr+k),((*(arr+j))-(*(arr+k))));
*(arr2+counter) = *(arr+j);
*(brr+counter) = *(arr+k);
*(diff+counter) = (*(arr+j)) - (*(arr+k));
counter++;
}
}
fclose(fx);
i=counter;
printf("\n counter is %d \n", counter);
fx = fopen("diffdata.txt","r");
/*while(counter>i)
{
fscanf(fx,"%lf - %lf = %lf\n", (arr+i),(brr+i),(diff+i));
i++;
}
*/
fprintf(fu,"DIFFERENCE Groups\n");
for(j=0;j<counter;j++) {
if(MAX<(*(diff+j))) {
MAX=*(diff+j);
}
if(MIN>*(diff+j)) {
MIN=*(diff+j);
}
}
a = MIN;
//printf("\n%lf min \n", a);
while(a<=MAX) {
b=0;
for(k=0;k<i;k++) {
if(*(diff+k)==a) {
b++;
}
}
if(b!=0) {
fprintf(fu,"%lf:\n",a);
b=0;
for(k=0;k<i;k++) {
if(*(diff+k)==a) {
b++;
fprintf(fu,"\tGroup %d : %lf - %lf\n",b,*(arr2+k),*(brr+k));
}
}
}
a=a+1.000000;
}
end = clock();
time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
printf("\nThe time taken is %f seconds.\n", time_used);
return 0;
}
问题是,我的代码只检测积分差异,并忽略小数差异。
例如,如果我的&#34; data.txt&#34; file有以下输入数字列表:
100.000000
100.500000
200.000000
200.500000
然后是必需的&#34; output.txt&#34;文件仅包含组(200-100)和(200.5000000-100.500000)
的差异100但缺少0.500000(100.5000000 - 100.000000)和(200.5000000 - 200.0000000)的差异!
我不知道为什么。任何人都可以帮助我吗?