函数ReadData()负责从文件IN.DAT中读取1000个十进制整数到数组inBuf[]中。请编制函数Compute()分别计算出inBuf[]中奇数的个数odd、偶数的个数even、平均值ave及方差tot_v的值,函数WriteData()负责把结

admin2012-07-20  28

问题 函数ReadData()负责从文件IN.DAT中读取1000个十进制整数到数组inBuf[]中。请编制函数Compute()分别计算出inBuf[]中奇数的个数odd、偶数的个数even、平均值ave及方差tot_v的值,函数WriteData()负责把结果输出到OUT.DAT文件中。
计算方差的公式如下;

原始数的存放格式是;每行存放10个数,并用逗号隔开(每个数均大于0且小于等于2000)。
注意;部分源程序已给出。
请勿改动主函数main()、读函数ReadData()和写函数WriteData()的内容。
试题程序;
#include
#include
#include
#define MAX 1000
int inBuf[MAX],odd=0,even=0;
double ave=0.0,tot_v=0.0;
void WriteData(void);
int ReadData(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,",&inBuf[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  inBuf=0;
  if(ReadData())
  {
    printf("数据文件IN.DAT不能打开!\007\n");
    return;
    }
    Compute();
    printf("ODD=%d\nEVEN=%d\nAVE=% f\ntot_v=%f\n",odd,even,ave,tot_v);
    WriteData();
}
void WriteData(void)
{
  FILE*fp;
  fp=fopen("OUT.DAT","w");
  fprintf(fp,"ODD=%d\nEVEN=%d\nAVE=%f\ntot_v=%f\n",odd,even,ave,tot_v);
  fclose(fp);
}

选项

答案   void Compute(void) { int i; for(i=0;i
解析 本题主要考查平均值和方差的计算问题。1.求平均值;由于本题中的数据量比较大,若采用先将各个值加起来再除以总个数来取平均的话,变量不能存储那么大的数据而导致溢出。本题的程序采用的方法是;N个数的平均值=[前(N-1)个数的平均值*(N-1)+第N个数]/N,采用这种递推的方法就避免了将大的数据存入变量中而产生溢出。2.求方差;按照所给公式,将数值代入计算即可。
转载请注明原文地址:https://jikaoti.com/ti/r8R7FFFM
0

最新回复(0)