请补充函数ReadData()实现从文件IN.DAT中读取1000个十进制整数到数组xx[]中;请函数Compute()分别计算出XX中偶数的个数even、奇数的平均值avel、偶数的平均值ave2以及方差totfc的值,最后调用函数WriteData()

admin2011-06-14  31

问题 请补充函数ReadData()实现从文件IN.DAT中读取1000个十进制整数到数组xx[]中;请函数Compute()分别计算出XX中偶数的个数even、奇数的平均值avel、偶数的平均值ave2以及方差totfc的值,最后调用函数WriteData()把结果输出到OUT.DAT文件中。
计算方差的公式如下;

设N为偶数的个数,xx为偶数,ave2为偶数的平均值。
原始数据文件存放的格式是;每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000)
注意;部分源程序已给出。
请勿改动主函数main()和输出数据函数WriteData()的内容。
试题程序;
#include
#include
#include
#define MAX 1000
int xx[MAX],odd=0,even=0;
double avel=0.0,ave2=0.0,totfc=0.0;
void WriteData(void);
int ReadData(void)
{
  int i;
  FILE*fp;
  if((fp=fopen("IN.DAT","r"))==NULL)return 1;
  //编制函数ReadData()的部分
  fclose(fp);
  return 0;
}
void Compute(void)
{
  int i,yy[MAX];
  for(i=0;i  yy=0;
  for(i=0;i  if(xx%2==0)  //测试结点i是否是偶数
{
  yy[even++]=xx;  //将结点i存人数组yy中ave2+=xx
}  //将结点i累加存入ave2中
else//如果结点i不是偶数
{
  odd++;  //累加变量odd记录奇数数的个数
  avel+=xx
}  //将xx累加存人ave1中
  if(odd==0)avel=0;
  else ave1/=odd;//计算奇数数的平均数
  if(even==0)ave2=0;
  else ave2/=even;  //计算偶数数的平均数
  for(i=0;i  totfc+=(yy-ave2)*(yy-ave2)/eyen;
  }
}
void main()
{
  int i;
  for(i=0;i=0;
  if(ReadData())
  {
    printf("数据文件IN.DAT不能打开!\007\n");
    return;
    }
    Compute();
    printf("EVEN=%d\nAVE1=%If\nAVER2=%If\nTOTFC=%If\n",even,avel,ave2,totfc);
    WriteData();
}
void WriteData(void)
{
  FILE*fp;
  int i;
  fp=fopen("OUT.DAT","w");
  fprintf(fp,"%d\n%If\n%If\n%If\n",eyen,avel,ave2,totfc);
  fclose(fp);
}

选项

答案 for(i=0;i
解析 本题考查文件的操作、奇偶判断和数学公式的计算。函数ReadData的作用是将从文件中读取数据存入数组xx中,因为数据存放入文件的格式是每个数据被逗号隔开,所以fscanf(fp,"%d,",&xx)语句中字符串"%d,"中要加入逗号。函数Compute的作用是计算方差,思路是首先顺序读取数组XX中的结点,若是偶数累加存入ave2,个数存入even,若不是偶数(即为奇数)累加结果存入avel,个数存入odd。然后计算奇数和偶数的平均数,利用循环结构依次读取存放偶数的数组yy,计算方差totfc。
转载请注明原文地址:https://jikaoti.com/ti/xVU7FFFM
0

最新回复(0)