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

admin2020-10-21  52

问题 函数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(“I N.DAT”,“r”))==NULL)
    return 1;
    for(i=0;i<100;i++)
    {
    for(j=0;j<10;j++)
    fseanf(fp,“%d,”,&inBuf[i*10+j]);
    fscanf(fp,“\n”);
    if(feof(fp))break;
    }
    fciose(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
    =%fkn”,odd,even,ave,tot_v);
    WriteData();
    }
    void WriteData(void)
    {
    FlLE*fp;
    fp fopen(“OUT.DAT”,“W”);
    fpfintf(fp,“ODD=%d\nEVEN=%d\nAVE=%f\ntot
    _v=%f\n”,odd.even,ave,tot_v);
    felose(fp);
}

选项

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

最新回复(0)