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

admin2013-12-17  20

问题 函数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+j]);
    fscanf(fp,“\n”);
    if(feof(fp))break}
    }
    fclose(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\nAVEl=%f\nAVE2=%f\
    nTOTFC=%f\n”,odd,ave1.ave2,tot_v);
    WriteData();
    }
    void WriteData(void)
    {
    FILE*fp;
    fp=fopen(“OUT.DAT”,“W”);
    fprintf(fp,“%d\n%if\n%If\n%if\n”,odd,ave1,
    ave2,tot v);
    fclose(fp);
}

选项

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

最新回复(0)