二级B上级模拟试题及答案(2)

发布时间:2019-02-04 19:05:41

请编制函数readdat( )实现从文件fc.in中读取1000个十进制  整数到数组xx中; 请编制函数compute()分别计算出xx中奇数的个  数odd, 偶数的个数even, 平均值aver以及方差totfc的值, 最后调  用函数writedat()把结果输出到fc1.out文件中。 
计算方差的公式如下: 
1 n 
totfc = ── ∑ (xx - aver)^2 
n i=1 
原始数据文件存放的格式是: 每行存放10个数, 并用逗号隔 
开。(每个数均大于0且小于等于2000) 
注意: 部分源程序存放在prog1.c中。 
请勿改动主函数main()和输出数据函数writedat()的内容。 

/*参考答案*/ 

#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) 

file *fp ; 
int i,j; 
char c,str[20]; 

if((fp = fopen("fc.in", "r")) == null) return 1 ; 

/***********读入数据并存放到数组xx中*************/ 
for(i = 0; i < max; i ) 

j = 0; 

while((c = (char) fgetc(fp)) != eof) 

if(c == ’,’) 

str[j] = ’’; 
break; 


else if(c != ’n’ && c != ’r’)/*去掉回车换行符*/ 

str[j] = c; 
j; 




xx = atoi(str); 

if(c == eof) 
break; 


fclose(fp) ; 
return 0 ; 


void compute(void) 

int i; 
long count = 0; 

for(i = 0; i < max; i ) 

if(xx & 1) 
odd ; 
else 
even ; 

count  = xx; 


aver = (double)count/max; 

for(i = 0; i < max; i ) 
totfc  = (xx - aver)*(xx - aver); 

totfc /= max; 


void main() 

int i ; 

for(i = 0 ; i < max ; i ) xx = 0 ; 
if(readdat()) { 
printf("数据文件fc.in不能打开!07n") ; 
return ; 

compute() ; 
printf("odd=%dnoven=%dnaver=%lfntotfc=%lfn", odd, even, aver, totfc) ; 
writedat() ; 


void writedat(void) 

file *fp ; 
int i ; 

fp = fopen("fc1.out", "w") ; 
fprintf(fp, "%dn%dn%lfn%lfn", odd, even, aver, totfc) ; 
fclose(fp) ; 
阅读更多其他试题,请访问生活日记网 用日志记录点滴生活!考试试题频道。
喜欢考试试题,那就经常来哦

该内容由生活日记网提供.