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

admin2012-07-20  11

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

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

选项

答案 for(i=0;i
解析 本题考查文件的操作、奇偶判断和数学公式的计算。函数ReadDat()的作用是将文件中读取数据存入数组xx中,因为数据存放如文件的格式是每个数据被逗号隔开,所以fscanf(fp,"%d,",&xx)语句中字符串"%d,",中要加入逗号。用if((i+1)%10==0)判断是否为一行10个数,如果是,则用fscanf(fr,"\n")换行。
转载请注明原文地址:https://kaotiyun.com/show/494Z777K
0

最新回复(0)