函数readData()负责从文件IN.DAT中读取1000个十进制整数到数组inBuf[]中。请编制函数Compute()分别计算出inBuf[]中奇数的个数odd、奇数的平均值avel、偶数的平均值ave2及所有奇数的方差tot_v的值。函数Write

admin2012-07-20  0

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

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

选项

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

最新回复(0)