1、计算机三级网络技术机试(上机操作)模拟试卷 86及答案与解析 一、程序设计题 1 已知数据文件 IN39 DAT中存有 300个四位数,函数 ReadData()负责把这些数存人数组 inBuf中,请编制一函数 findValue(),其功能是:求出这些四位数中是素数的个数 count,再求出所有满足此条件的四位数的平均值 averagel,以及所有不满足此条件的 4位数的平均值 average2,并通过函数 WriteData()把结果输出到OUT DAT文件中。 例如: 3191是素数则该数满足条件,计算平 均值 average1,且个数count=count+1。 1234是非素数。则该
2、数不满足条件,计算平均值 average2。 注意:部分源程序已给出。 程序中已定义数组: inBuf300, outBuf300,已定义变量: count。 请勿改动主函数 main()、读函数 ReadData()和写函数 WriteData()的内容。 试题程序: #include #define NUM 300 int inBufNUM, count=0; double average1=0, average2=0; void ReadData(); void WriteData(); void findValue() void main() ReadData(); findValue
3、(); WriteData(); printf(“count= d naverag1= 7 2lf naverag2= 7 2lf n”, count, average1, average2); void RcadData() FILE*fp; int i; fp=fopen(“IN DAT”, “r”); for(i=0; iNUMl i+) fscanf(fp, “ d ”, &inBufi); fclose(fp); void WriteData() FILE*fp; fp=fopen(“OUT DAT”, “W”); Iprintf(fp, “count= d naverag1= 7
4、2If Bayer ag2= 7 21f n”, count, average1, average2); fclose(fp); 计算机三级网络技术机试(上机操作)模拟试卷 86答案与解析 一、程序设计题 1 【正确答案】 void findValue() int i, j, flag, count_no=0; for(i=0; iNUM; i+) flag=0; for(j=2; jinBufi; j+) 判断是否为素数 if(inBufi j=0) flag=1; *如果当前数据可被除 1和其自身之外的 整数整除的话。则将标志置 1,表明该数不是 素数 * continue; 一旦发现不是
5、素数,就退出循环 if(flag=0)如果是素数 count+;则计数器加 1 averagel=(average1*(count-1)+(doub le)inBufi) count; *计算平均值, average1* (count-1)得到的是前 count-1个数的总 和 * else如果不是素数 count_no+; 将非素数计数器加 1 average2=(average2*(count_no-1)+ (double)inBufi) count_no; *计算平均值, average2*(count_no-1)得 到的是前 count_no-1个数的总和 * ) 【试题解析】 本题主要考查素数的判断和平均值计算问题。 判断是否为素数;素数的定义是:若一个数除了其自身和 1再没有其他的除数,则该数就是素数。故用其定义可以很容易判断。在 2到所判断教之间的数进行扫描,若有一个除数,则该数就不是素数。 求平均值,由于本题中的数据量比较大,若采用先将各个值加起来再除以总个数来取平均的话,会因变量不能存储那么大的数据而导致溢出。本题的程序采用的方法是: N 个数的平均值 =前 (N-1)个数的平均值 *(N-1)+第 N个数 N,采用这种递 推的方法就避免了将大的数据存入变量中而产生溢出。