请编制函数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 != '
' && c != '
')/*去掉回车换行符*/ { 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不能打开! 07
") ; return ; } Compute() ; printf("ODD=%d
OVEN=%d
AVER=%lf
TOTFC=%lf
", odd, even, aver, totfc) ; WriteDat() ; }
void WriteDat(void) { FILE *fp ; int i ;
fp = fopen("FC1.OUT", "w") ; fprintf(fp, "%d
%d
%lf
%lf
", odd, even, aver, totfc) ; fclose(fp) ; }
|