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