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

admin2022-10-08  28

问题 请编制函数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)re
    turn 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)    //测试结点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\nAVE1=%If\nAVE2=%If\nTOTFC=%lf\n”,odd,ave1,ave2,totfc);
    WriteDat();
    }
    void WriteDat(void)
    {
    FILE*fp;
    int i;
    fp=fopen(“OUT.DAT”,“W”);
    fprintf(fp,“%d\n%If\n%If\n%If\n”,odd,ave1,
    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/wLKZ777K
0

最新回复(0)