函数ReadData()负责从文件IN.DAT中读取1000个十进制整数到数组inBuf[]中。请编制函数Compute()分别计算出inBufV]中偶数的个数even、奇数的平均值ave1、偶数的平均值ave2及所有偶数的方差tot—v的值。函数Writ

admin2020-12-17  35

问题 函数ReadData()负责从文件IN.DAT中读取1000个十进制整数到数组inBuf[]中。请编制函数Compute()分别计算出inBufV]中偶数的个数even、奇数的平均值ave1、偶数的平均值ave2及所有偶数的方差tot—v的值。函数WriteData()负责把结果输出到OUT.DAT文件中。
    计算方差的公式如下:
    设N为偶数的个数,inBuf为偶数,ave2为偶数的平均值。
    原始数的存放格式是:每行存放10个数,并用逗号隔开(每个数均大于0且小于等于2000)。
    注意:部分源程序已给出。
    请勿改动主函数main()、读函数ReadData()和写函数WriteData()的内容。
    试题程序:
    #include
    #inelude
    #include
    #define MAX l000
    int inBuf[MAX],odd=0,even=0;
    double ave1=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(“EVEN=%d\nAVE1=%If\nAVE2=%If
    \ntot_v=%lfkn”,even,ave1,ave2,tot_v);
    WriteData();
    }
    void WriteData(void)
    {
    FILE*fp;
    fp=fopen(“OUT.DAT”,“W”);
fprintf(fp,“%d\n%lf\n%If\n%If\n”,even,ave1,
    ave2,tot_v);
    fclose(fp);
    }

选项

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

随机试题
最新回复(0)