问题 问答题

函数ReadDat()实现从IN.DAT文件中读取1000个十进制整数到数组xx中。请编写函数Compute()分别计算出xx中奇数的个数odd,奇数的平均值ave1,偶数的个数even,偶数的平均值ave2以及所有奇数的方差totfc的值,最后调用函数WriteDat(),把结果输出到OUT.DAT文件中。

计算方差的公式如下:

其中:N为奇数的个数,xx[i]为奇数,ave1为奇数的平均值。

原始数据文件存放的格式是:每行存放10个数(每个数均大于0且小于等于2000),并用逗号隔开。

注意:部分源程序已经给出。

请勿改动主函数main()、读函数ReadDat()和输出数据函数WriteDat()的内容。

#include<string.h>

int xx[MAX],odd=0,even=0;

double ave1=0.0,ave2=0.0,totfc=0.0;

void WriteDat(void);

int ReadDat(void)

FILE *fp;

int i,j;

if((fp=fopen("IN.DAT","r"))==NULL)

return 1;

for(i=0;i<100; i++)

for(j=0;j<10;j++)

fscanf(fp,"%d,",&xx[i*10+j]);

fscanf(fp,"\n");

if(feof(fp))

break;

fclose(fp);

return 0;

void Compute(void)

void main()

int i;

for(i=0;i<MAX;i++)

xx[i]=0;

if(ReadDat())

printf("数据文件IN.DAT不能打开!\007\n");

return;

Compute();

printf("ODD=%d\nEVEN=%d\nAVE1=%f\nAVE2=%f\nTOTFC=%f\n",odd,even,avel,ave2,totfc);

WriteDat();

void WriteDat(void)

FILE *fp;

fp=fopen("OUT.DAT","w");

fprintf(fp,"%d\n%d\n%f\n%f\n%f\n", odd, even, ave1, ave2,totfc);

fclose(fp);

答案

参考答案:

void Compute(void)

int i,yy[MAX];

for(i=0;i<A000;i++) /*循环以遍历数组xx的所有A000个数*/

if(xx[i]%B) /*如果当前数为奇数*/

odd++; /*让计数值odd增A*/

avel+=xx[i]; /*将此数累加至aveA中*/

yy[odd-A]=xx[i];/*将此数保存到数组yy中*/

}

else

{ /*否则让计数值even增A并将此数累加至aveB中*/

even++;

aveB+=xx[i];

}

aveA/=odd; /*计算奇数的平均值*/

aveB/=even; /*计算欧数的平均值*/

for(i=0;i<odd;i++) /*循环以求所有奇数的方差*/

totfc+=(yy[i]-avel)*(yy[i]-avel)/odd;

}

多项选择题 X型题
问答题 简答题