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

admin2021-04-30  26

问题 请补充函数ReadData()实现从文件IN.DAT中读取1000个十进制整数到数组xx[]中I请函数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 ave1=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)re
    turn 1;
    //编制函数ReadData()的部分
    fclose(fp);
    return 0;
    }
    void Compute(void)
    {
    int i,yy[MAX];
    for(i=0;i    yyEi]=0;
for(i=0;i    if(xx%2==0)//测试结点i是否是偶数
    {
    yy[even++]=xx;  //将结点i存入数组yy中
    ave2+=xx
  }  //将结点i累加存入ave2中
  else//如果结点i不是偶数
  {
    odd++;  //累加变量odd记录奇数数的个数
    ave1+=xx
     }  //将xx累加存入avel中
    if(odd==0)ave1=0;
    else ave1/=odd;//计算奇数数的平均数
    if(even==0)ave2=0;
    else ave2/=even; //计算偶数数的平均数
    for(i=0;i    totfc+=(yy-ave2)*(yy-ave2)/even;
    }
    }
    void main()
   {
    int i;
    for(i=0;i=0;
    if(ReadData())
    {
    printf(“数据文件IN.DAT不能打开!\007\
    n”);
    return}
    }
    Compute();
    printf(“EVEN=%d\nAVEl=%lf\nAVER2=%lf
    \nTOTFC=%lf\n”,even。ave1,ave2,totfe);
    WriteData();
    }
    void WriteData(void)
    {
    FILE*fp;
    int i;
    fp=fopen(“OUT.DAT”,“W”);
    fprintf(fp,“%dkn%lf\n%lf\n%If\n”,even,ave1,
    ave2,totfc);
    felose(fp);
   }

选项

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

最新回复(0)