问答题 请补充完整ReadDat()函数,实现从IN.DAT文件中读取1000个十进制整数到数组xx中。请编写函数Compute()分别计算出xx中数奇的个数odd,偶数的个数even,奇数的平均值ave1,偶数的平均值ave2以及所有偶数的方差totfc的值,最后调用函数WriteDat(),把结果输出到OUT.DAT文件中。
计算方差的公式如下:
【正确答案】int ReadDat(void)
FILE*fp;
int i,j;
if((fp=fopen("IN.DAT","r"))==NULL)
return 1;
/***********************************/
for(i=0;i<100;i++) /*循环以遍历IN.DAT的前100行*/
for(j=0;j<10;j++) /*循环遍历每行的10个数*/
fscanf(fp,"%d,",&xx[i*10+j]);/*将以','分割的数读入数组xx*/
fscanf(fp,"/n"); /*跳过换行符*/
if(feof(fp))
break; /*如果已到达文件末尾则跳出循环*/
}
/***********************************/
fclose(fp);
return 0;
}
void Compute(void)
int i,yy[MAX];
for(i=0;i<1000;i++) /*循环以遍历数组xx的所有1000个数*/
if(xx[i]%2)
{ /*如果当前数为奇数,则让计数值odd增1并将此数累加至ave1中*/
odd++;
ave1+=xx[i];
}
else
{ /*否则肯定为偶数*/
even++; /*让计数值even增1*/
ave2+=xx[i]; /*将此数累加至ave2中*/
yy[even 1]=xx[i];/*再将此数保存到数组yy中*/
}
ave2/=odd; /*将奇数的累加和除以奇数的个数,得奇数的平均值*/
ave2/=even; /*将偶数的累加和除以偶数的个数,得偶数的平均值*/
for(i=0;i<even;i++) /*循环求偶数的方差*/
totfc+=(yy[i]-ave2)*(yy[i]-ave2)/even;
}
【答案解析】