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