2006年9月全国等级考试三级c语言上机题库(三十三)

来源:计算机等级考试    发布时间:2012-08-28    计算机等级考试视频    评论

★题目33(无忧id 61 方差运算题)

 

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

计算方差的公式如下:

N 2

totfc=1/N∑(xx[i]-ave2)

i=1

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

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

部分源程序存在文件prog1.c中。

请勿改动主函数main()和输出数据函数writeDat()的内容。

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAX 1000

 

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

double ave1=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) return 1;

/*********编制函数ReadDat()的部分************/

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

{ fscanf(fp,"%d,",&xx[i]);

if((i+1)%10==0)

fscanf(fp,"/n"); }

/*******************************************/

 

fclose(fp);

return 0;

}

 

void Compute(void)

{ int i,yy[MAX];

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

yy[i]=0;

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

if(xx[i]%2==0) { yy[even++]=xx[i]; ave2+=xx[i];}

else { odd++; ave1+=xx[i];}

if(odd==0) ave1=0;

else ave1/=odd;

if(even==0) ave2=0;

else ave2/=even;

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

totfc+=(yy[i]-ave2)*(yy[i]-ave2)/even;

}

 

void main()

{

int i;

 

for(i=0;i<MAX;i++)xx[i]=0;

if(ReadDat()){

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

return;

}

Compute();

printf("OVEN=%d/nAVE1=%f/nAVER2=%f/nTOTFC=%f/n",even,ave1,ave2,totfc);

WriteDat();

}

 

void WriteDat(void)

{

FILE *fp;

int i;

 

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

fprintf(fp,"%d/n%f/n%f/n%f/n",even,ave1,ave2,totfc);

fclose(fp);

}

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答