2006年9月全國等級考試三級c語言上機(jī)題庫(九十三)

字號:

★題目93(方差運算題)
    此題南開標(biāo)準(zhǔn)解法有誤!
    請編制函數(shù)ReadDat()實現(xiàn)從文件IN.DAT中讀取1000個十進(jìn)制整數(shù)到數(shù)組xx中;請編制函數(shù)Compute(),分別計算出xx中奇數(shù)的個數(shù)odd,偶數(shù)的個數(shù)even,平均值aver以及方差totfc的值,最后調(diào)用函數(shù)WriteDat()把結(jié)果輸出到OUT.DAT文件中。
    計算方差的公式如下:
    N 2
    totfc=1/N ∑ (xx[i]-aver)
    i=1
    原始數(shù)據(jù)文件存放的格式是:每行存放10個數(shù),并用逗號隔開。(每個數(shù)均大于0且小于等于2000)
    部分源程序存在文件prog1.c中。
    請勿改動主函數(shù)main()和輸出數(shù)據(jù)函數(shù)writeDat()的內(nèi)容。
    #include
    #include
    #include
    #define MAX 1000
    int xx[MAX],odd=0,even=0;
    double aver=0.0,totfc=0.0;
    void WriteDat(void);
    int ReadDat(void)
    {
    int i;
    FILE *fp;
    if((fp=fopen("IN.DAT","r"))==NULL) return 1;
    /***************編制函數(shù)ReadDat()*****************/
    for(i=0;i    { fscanf(fp,"%d,",&xx[i]);
    if((i+1)%10==0)
    fscanf(fp,"\n");
    }
    /*********************************************/
    fclose(fp);
    return 0;
    }
    void Compute(void)
    { int i;
    for(i=0;i    { if(xx[i]%2) odd++;
    else even++;
    aver+=xx[i];
    }
    aver/=MAX;
    for(i=0;i    totfc+=(xx[i]-aver)*(xx[i]-aver);
    totfc/=MAX;
    }
    void main()
    {
    int i;
    for(i=0;i    if(ReadDat()){
    printf("數(shù)據(jù)文件IN.DAT不能打開!\007\n");
    return;
    }
    Compute();
    printf("ODD=%d\nOVEN=%d\nAVER=%f\nTOTFC=%f\n",odd,even,aver,totfc);
    WriteDat();
    }
    void WriteDat(void)
    {
    FILE *fp;
    int i;
    fp=fopen("OUT.DAT","w");
    fprintf(fp,"%d\n%d\n%f\n%f\n",odd,even,aver,totfc);
    fclose(fp);
    }