函数ReadDat()实现从文件IN.dat中读取1000个十进制整数到数组xx中;请编写函数 Compute()分别计算出数组xx中奇数的个数odd、偶数的个数even,以及所有数的平均值aver和方差totfc的值。最后调用函数WriteDat(),把结果输出到OUT. dat文件中。计算方差的公式如下:原始数据文件存放的格式是:每行存放10个数(每个数均大于0且小于等于2000),并用逗号隔开。注意:部分源程序已经给出。请勿改动主函数main()、读函数ReadDat()和输出数据函数 WriteD

题目

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

计算方差的公式如下:

原始数据文件存放的格式是:每行存放10个数(每个数均大于0且小于等于2000),并用逗号隔开。

注意:部分源程序已经给出。请勿改动主函数main()、读函数ReadDat()和输出数据函数 WriteDat()的内容。

include <stdio. h>

include <stdlib. h>

include <string. h>

define MAX 1000

int xx[MAX], odd = 0, even = 0;

double aver = 0.0, totfc = 0.0;

void WriteDat(void);

int ReadDat(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,", &xx[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<MAX; i++)

xx[i] = 0;

if (ReadDat())

{

printf (" 数据文件 IN. dar 不能打开! \007\n");

return;

}

Compute ( );

printf("odd=%d\neven=%d\naver=%f\ntotfc=%f\n", odd, even, aver, totfc);

WriteDat ();

}

void WriteDat(void)

{ FILE *fp;

fp = fopen("OUT.dat", "w");

fprintf(fp, "%d\n%d\n%f\n%f\n", odd, even, aver, totfc);

fclose (fp);

}


相似考题
更多“ 函数ReadDat()实现从文件IN.dat中读取1000个十进制整数到数组xx中;请编写函数 Compute()分别计算出数组xx中奇数的个数odd、偶数的个数even,以及所有数的平均值aver和方差totf”相关问题
  • 第1题:

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

    计算方差的公式如下:

    设N为偶数的个数,xx[i]为偶数,ave2为偶数的平均值。

    原始数据的存放格式是:每行存放10个数,并用逗号隔开(每个数均大于0且小于等于2000)。

    注意:部分源程序已给出。

    请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。

    试题程序:

    include<stdio.h>

    include<stdlib.h>

    include<string.h>

    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)

    {

    FILE *fp;

    int i,j;

    if((fp=fopen("IN47.DAT","r"))==NULL)

    return 1;

    for(i=0;i<100;i++)

    {

    for(j=0;j<10;j++)

    fscanf(fp,"%d,",&xx[i*10+j]);

    fscanf(fp,"/n");

    if(feof(fp)) break;

    }

    fclose(fp);

    }

    viod Compute(void)

    {

    }

    void main( )

    {

    int i;

    for(i=0;i<MAX;i++)

    xx[i]=0;

    if(ReadDat())

    {

    print f ( "数据文件IN47.DAT 不能打形式!\007\n");

    return;

    }

    Compute();

    printf( "EVEN=%d\nAVE1=%f\nAVE2=%f\nTOTFC=%f\n",even,avel,ave2,totfc);

    WriteDat();

    }

    void WriteDat(void)

    {

    FILE *fp;

    int i;

    fp=fopen("OUT47.DAT","w");

    fprintf(fp,"%d\n%lf\n%lf\n%lf\n",even,ave1,ave2,totfc);

    fclose(fp);

    }


    正确答案:void Compute(void) { int iyy[MAX]; for(i=0;i1000;i++) if(xx[i]%2!=0) { odd++; /*统计奇数的个数*/ ave1+=xx [i]; /*求奇数的总和*/ } else { even+ +; /*统计偶数的个数*/ ave2+=xx [i]; /*求偶数的总和*/ yy [even-1]=xx [i]; /*将偶数存入数组yy中*/ } ave1/=odd; /*求奇数的平均数*/ ave2/=even; /*求偶数的平均数*/ for (i=0; ieven; i++) /"*求所有偶数的方差*/ totfc+= (yy[i]-ave2)* (yy [i]-ave2)/even; }
    void Compute(void) { int i,yy[MAX]; for(i=0;i1000;i++) if(xx[i]%2!=0) { odd++; /*统计奇数的个数*/ ave1+=xx [i]; /*求奇数的总和*/ } else { even+ +; /*统计偶数的个数*/ ave2+=xx [i]; /*求偶数的总和*/ yy [even-1]=xx [i]; /*将偶数存入数组yy中*/ } ave1/=odd; /*求奇数的平均数*/ ave2/=even; /*求偶数的平均数*/ for (i=0; ieven; i++) /"*求所有偶数的方差*/ totfc+= (yy[i]-ave2)* (yy [i]-ave2)/even; } 解析:本题考查的知识点如下:
    (1)从文件中读取数据。
    (2)奇偶数的判断和方差的求法。
    在C语言中,有一结构体类型FILE,其中包含文件的一些属性信息。可定义指针指向该结构体,这个指针称为文件指针。要从文件中读取数据,首先要判断该文件是否能以“读”的方式打开。若能打开,使用函数int fscanf(FILE*fp,char*format,args)从fp所指向的文件中依次读取数据。在本题中,数据的存放很有规律,将数据读出存入数组xx时,只要控制数组下标就可以了。若文件结束,则退出读取循环。最后要关闭文件。若一个数除以2取余得0,则该数是偶数,否则为奇数。由方差公式可知,这是求一些连续的数的表达式的值,所以可以使用循环求得方差。

  • 第2题:

    函数ReadDat实现从文件in.dat中读取1 000个十进制整数到数组XX中,请编制函数Compute分别计算出XX中数值为偶数的个数even,所有数值为奇数的平均值ave1,偶数的平均值ave2以及所有偶数的方差totfc的值,最后调用函数 WriteDat把结果输出到0ut.dat文件中。 计算方差的公式如下:设N为偶数的个数,xx[i]为偶数,ave2为偶数的平均值。 原始数据文件存放的格式是:每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000)注意:部分源程序存放在test.c文件中。 请勿改动主函数main和输出函数WriteDat的内容。


    正确答案:
    【审题关键句】读取1000个数,奇数个数及平均值,偶数个数、平均值及方差。
    【解题思路】
    ①定义循环变量i、表示奇数个数的变量0dd并设置其值为0。
    ②采用for循环语句,对数组XX中每个数组元素xx[i]对2求余数,如果余数为1,则说明数组元素xx[i]的值为奇数,则变量odd的值加1,并把数组元素xx[i]的值累加到变量ave1,否则,说明数组元数xx[i]的值为偶数,则变量even的值加1,并把数组元素xx[i]的值累加到变量ave2。
    ③退出for循环语句后,用变量avel除以奇数的个数odd,得到所有奇数的平均值赋给ave1,用变量ave2除以偶数的个数even,得到所有偶数的平均值赋给ave2。
    ④利用for循环语句,对数组XX中每个数组元素xx[i]对2求余数,如果余数等于0,则说明数组元素xx[i]的值为偶数,这时把表达式xx[i].ave2的平方值累加到变量totfc。退出循环后,用变量totfc的值除以偶数的个数even,得到所有偶数的方差赋给变量totfc。
    【参考答案】

  • 第3题:

    请编制函数ReadDat()实现从文件IN93.DAT中读取1000个十进制整数到数组xx中。请编制函数 Compute()分别计算出xx中奇数的个数odd、偶数的个数even、平均值aver及方差totfc的值,最后调用函数WriteDat()把结果输出到OUT93.DAT文件中。

    计算方差的公式如下:

    原始数据的存放格式是:每行存放10个数,并用逗号隔开(每个数均大于0且小于等于2000)。

    注意:部分源程序已给出。

    请勿改动主函数main()和写函数WriteDat()的内容。

    试题程序:

    include<stdio.h>

    include<stdlib.h>

    include<string.h>

    define MAX 1000

    int xx[MAX],odd=0,even=0;

    double aver=0.0,totfc=0.0;

    void WriteDat(void);

    int ReadDat(void)

    {

    FILE *fp;

    if((fp=fopen("IN93.DAT","r"))==NULL

    return 1;

    fclose(fp);

    return O;

    }

    void Compute(void)

    {

    }

    void main( )

    {

    int i;

    for(i=O;i<MAX;i++)

    xx[i] =0;

    if (ReadDat ( ) )

    {

    print f ("数据文件IN93.DAT不能打开! \007\n");

    return;

    }

    Compute();

    printf( "ODD=%d\nEVEN=%d\nAVER=%lf\nTOTFC=%lf\n",

    odd, even,aver,totfc);

    WriteDat();

    }

    void WriteDat(void)

    {

    FILE *fp;

    int i;

    fp=fopen("OUT93.DAT","w");

    fprintf(fp,"%dln%dln%lf\n%lfkn",odd,even,aver,totfc);

    fclose(fp);

    }


    正确答案:int ReadDat(void) { FILE *fp; int ij; if((fP=fopen("IN93.DAT""r"))==NULL) return 1; for(i=0;i100;i++) { for(j=0;j10;j++) fscanf(fp"%d"&xx[i*10+j]); fscanf(fp"\n"); if(feof(fp)) break; } fclose(fp); return 0; } void Compute(void) { int iyy[MAX]; for (i=0;i1000;i++) { if (xx[i]%2 !=0) odd+ +; /*求出xx中奇数的个数odd*/ else even++; /*求出xx中偶数的个数even*/ aver+=xx [i]; /*求出xx中元素的总和*/ } aver/=MAX; /*求出xx中元素的平均值*/ for (i=0; i1000; i++) totfc+=(xx[i]-aver)*(xx[i]-aver)/MAX; }
    int ReadDat(void) { FILE *fp; int i,j; if((fP=fopen("IN93.DAT","r"))==NULL) return 1; for(i=0;i100;i++) { for(j=0;j10;j++) fscanf(fp,"%d,",&xx[i*10+j]); fscanf(fp,"\n"); if(feof(fp)) break; } fclose(fp); return 0; } void Compute(void) { int i,yy[MAX]; for (i=0;i1000;i++) { if (xx[i]%2 !=0) odd+ +; /*求出xx中奇数的个数odd*/ else even++; /*求出xx中偶数的个数even*/ aver+=xx [i]; /*求出xx中元素的总和*/ } aver/=MAX; /*求出xx中元素的平均值*/ for (i=0; i1000; i++) totfc+=(xx[i]-aver)*(xx[i]-aver)/MAX; } 解析:本题考查的知识点如下:
    (1)从文件中读取数据。
    (2)奇偶数的判断和方差的求法。
    在C语言中,有一结构体类型FILE,其中包含文件的一些属性信息。可定义指针指向该结构体,这个指针称为文件指针。要从文件中读取数据,首先要判断该文件是否能以“读”的方式打开。若能打开,使用函数intfscanf(FILE*fp,char*format,args)从fp所指向的文件中依次读取数据。在本题中,数据的存放很有规律,将数据读出存入数组xx时,只要控制数组下标就可以了。若文件结束,则退出读取循环。最后要关闭文件。若一个数除以2取余得0,则该数是偶数,否则为奇数。由方差公式可知,这是求一些连续的数的表达式的值,所以可以使用循环求得方差。

  • 第4题:

    函数ReadDat()实现从文件IN47.DAT中读取1000个十进制整数到数组xx屯。请编制函数Compum()分别计算出xx中偶数的个数even、奇数的平均值ave1、偶数的平均值ave2及所有偶数的方差totfc的值,最后调用函数WilteDat()把结果输出到OUT47.DAT文件中。

    计算方差的公式如下:

    设N为偶数的个数,xx[i]为偶数,ave2为偶数的平均值。

    原始数据的存放格式是:每行存放10个数,并用逗号隔开(每个数均大于0且小于等于2000)。

    注意:部分源程序已给出。

    请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。

    试题程序:

    include<stdio. h>

    include<stdlib. h>

    include<string. h>

    define MAX 1000

    int xx [MAX] , dd=O, even=O;

    double avel=0.0,ave2=0.0,totfc=0.0;

    void WriteDat(void);

    int ReadDat (void)

    { FILE *fp;

    int i,j;

    if ( (fp=fopen ("IN47. DAT", "r") )==NULL)

    return 1;

    for (i=0; i<100;i++)

    {

    for (j=0; j<10; j++)

    fscanf (fp, "%d, ",&xx [i*10+j ] );

    fscanf (fp, "In");

    if(feof(fp)) break;

    }

    fclose (fp);

    }

    void Compute (void)

    {

    }

    void main ( )

    { int i;

    for (i=0; i<MAX; i++)

    xx[i]=0;

    if (ReadDat ())

    {

    printf ("数据文件IN47.DAT 不能打开! \007\n");

    return;

    }

    Compute ( );

    printf ( "EVEN=%d\nAVE1=%f\nAvE2=%f\nTOTFC=%f\n" , even, ave1, ave2,

    totfc);

    WriteDat ();

    }

    void WriteDat(void)

    {

    FILE *fp;

    int i;

    fp=fopen("OUT47.DAT","w");

    fprintf(fp,"%d\n%lf\n%lf\n%lf\n",even,avel,ave2,totfc);

    fclose(fp);

    }


    正确答案:void Compute(void) { int iyy[MAX]; for(i=O;ilO00;i++) if (xx[i]%2 !=0) { odd++; /*统计奇数的个数*/ avel+=xx [i]; /*求奇数的总和*/ } else { even++; /*统计偶数的个数*/ ave2+=xx [i]; /*求偶数的总和*/ yy [even-1 ] =xx [ii; /*将偶数存入数组yy中* / } avel/=odd; /*求奇数的平均数*/ ave2/=even; /*求偶数的平均数*/ for (i=O; ieven; i++) /*求所有偶数的方差* / totfc+= (yy [i] -ave2) * (yy [i] -ave2)/even;
    void Compute(void) { int i,yy[MAX]; for(i=O;ilO00;i++) if (xx[i]%2 !=0) { odd++; /*统计奇数的个数*/ avel+=xx [i]; /*求奇数的总和*/ } else { even++; /*统计偶数的个数*/ ave2+=xx [i]; /*求偶数的总和*/ yy [even-1 ] =xx [ii; /*将偶数存入数组yy中* / } avel/=odd; /*求奇数的平均数*/ ave2/=even; /*求偶数的平均数*/ for (i=O; ieven; i++) /*求所有偶数的方差* / totfc+= (yy [i] -ave2) * (yy [i] -ave2)/even; 解析:本题考查的知识点如下:
    (1)从文件中读取数据。
    (2)奇偶数的判断和方差的求法。
    在C语言中,有一结构体类型FILE,其中包含文件的一些属性信息。可定义指针指向该结构体,这个指针称为文件指针。要从文件中读取数据,首先要判断该:文件是否能以“读”的方式打开。若能打开,使用函数int fscanf(FILE*fp,char*format,args)从fp所指向的文件中依次读取数据。在本题中,数据的存放很有规律,将数据读出存入数组xx时,只要控制数组下标就可以了。若文件结束,则退出读取循环。最后要关闭文件。若…个数除以2取余得0,则该数是偶数,否则为奇数。由方差公式可知,这是求一些连续的数的表达式的值,所以可以使用循环求得方差。

  • 第5题:

    将文件in.dat中的200个整数读至数组XX中。请编制js Vralue函数,要求:求出数组XX中的数值为奇数的个数cnt1和数值为偶数的个数cnt2以及数组xx下标为偶数(包括下标为0的元素)的元素值的算术平均值pj。 结果cnt1,cnt2,pJ输出到out.dat中。注意:部分源程序存在test.c文件中。请勿改动数据文件in.dat中的任何数据、主函数main、读函数readdat和输出函数writeDatj的内容。


    正确答案:
    【审题关键句】读入数值,奇数个数,偶数个数,数组下标为偶数的平均值。
    【解题思路】
    ①首先定义循环变量i,并对全局变量cnt1、cnt2和pj赋初值0。
    ②在for循环语句中,将数组xx中的每个数组元素xx[i]对2求余数,如果余数非零,则说明xx[i]是奇数,奇数的个数变量cntl加1,否则,偶数的计数变量cnt2加1;接着将数组XX下标i对2求余,如果余数等于0,则把xx[i]的值累加到变量pj。
    ③退出循环时,变量pJ的值除以100.0就得到数组xx下标i为偶数的元素值的算术平均值pj(因为数组中共有200令数组,下标为奇偶数的元素各占一半,因此直接将累加变量pJ的值直接除100即可得到这些数的平均值)。
    【参考答案】