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

试题集锦 2023-06-13 网络整理 可可

【shitiku.jxxyjl.com--试题集锦】

★题目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);

}

本文来源:https://shitiku.jxxyjl.com/shitijijin2/27157.html

Copyright @ 2011- 考试题库网 All Rights Reserved. 版权所有

免责声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。

 站长统计