1、国家三级(网络技术)机试模拟试卷 269及答案与解析 一、程序设计题 1 函数 ReadData()负责从文件 IN DAT中读取 1000个十进制整数到数组 inBuf中。请编制函数 Compute()分别计算出 inBuf中奇数的个数 odd、偶数的个数even、平均值 ave及方差 tot_v的值,函数 WriteData()负责把结果输出到OUT DAT文件中。计算方差的公式如下; 原始数的存放格式是;每行存放 10个数,并用逗号隔开 (每个数均大于 0且小于等于2000)。注意;部分源程序已给出。请勿改动主函数 main()、读函数 ReadData()和写函数 WriteData(
2、)的内容。试题程序; #include#include#include#define MAX 1000int inBufMAX, odd=0, even=0; double ave=0 0, tot_v=0 0; void WriteData(void); int ReadData(void) FILE*fp; int i, j; if(fp=fopen(“IN DAT“, “r“)=NULL) return 1; for(i=0; i 国家三级 (网络技术)机试模拟试卷 269答案与解析 一、程序设计题 1 【正确答案】 void Compute(void) int i; for(i=0;
3、iMAX; i+) if(inBufi 2=0)even+; 偶数计数器加 1 else odd+; 奇数计数器加 1 ave=(ave*(odd+even-1)+inBufi) (odd+even); *求平均值, ave*(odd+even-1)表示的是前 (odd+even-1)个的总和 * for(i=0; iMAX; i+) tot_v+=(inBufi-ave)*(inBufi-ave) (even+odd); 按照公式计算方差 【试题解析】 本题主要考查平均值和方差的计算问题。 1求平均值;由于本题中的数据量比较大,若采用先将各个值加起来 再除以总个数来取平均的话,变量不能存储那么大的数据而导致溢出。本题的程序采用的方法是; N个数的平均值=前 (N-1)个数的平均值 *(N-1)+第 N个数 /N,采用这种递推的方法就避免了将大的数据存入变量中而产生溢出。 2求方差;按照所给公式,将数值代入计算即可。