1、国家三级(数据库技术)机试模拟试卷 122及答案与解析 一、程序设计题 1 函数 ReadDat()实现从文件 IN.dat中读取 1000个十进制整数到数组 xx中;请编写函数 Compute()分别计算出数组 xx中奇数的个数 odd、偶数的个数 even,以及所有数的平均值 aver和方差 totfc的值。最后调用函数 WriteDat(),把结果输出到OUT. dat文件中。 计算方差的公式如下: 原始数据文件存放的格式是:每行存放 10个数 (每个数均大于 0且小于等于 2000),并用逗号隔开。 注意:部分源程序已经给出 。请勿改动主函数 main()、读函数 ReadDat()和
2、输出数据函数 WriteDat()的内容。 #include stdio. h #include stdlib. h#include string. h #define MAX 1000int xxMAX, 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+)
3、 fscanf(fp, “%d,“, fscanf(fp, “n“); if (feof(fp) break; fclose(fp); return 0;void Compute(void)void main () int i; for (i=0; i MAX; i+) xxi = 0; if (ReadDat() printf (“ 数据文件 IN. dar 不能打开 ! 007n“); return; Compute ( ); printf(“odd=%dneven=%dnaver=%fntotfc=%fn“, odd, even, aver, totfc); WriteDat ();vo
4、id WriteDat(void) FILE *fp; fp = fopen(“OUT.dat“, “w“); fprintf(fp, “%dn%dn%fn%fn“, odd, even, aver, totfc); fclose (fp); 国家三级(数据库技术)机试模拟试卷 122答案与解析 一、程序设计题 1 【正确答案】 void Compute (void) int i; for (i=0; i 1000; i+) if (xx i %2) odd+; else even+; aver = aver+ xxi; aver /= MAX; for (i=0; i 1000; i+) totfc += (xxi-aver)*(xxi-aver)/MAX; 解题思路 对数组 xxi中的 1000个整数逐个进行扫描处理,如果 xxi对 2的余数为 1,则 xxi为奇数,变量 odd加 1;否则 xxi为偶数,变量 even加 1。把 xxi的值与变量 aver相加存入变量 aver中。退出循环时,变量 aver的值除以 MAX就得到平均值。最后在 for循环语句中根据方差的公式求出所有数的方差。 【知识模块】 三级数据库技术机试模拟