1、三级网络技术机试-255 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.下列程序的功能是:将大于整数 m 且紧靠 m 的 k 个素数存入数组 xx。请编写函数 num(int m,int k,int xx)实现程序的要求,最后调用函数 read write DAT()把结果输出到 out31.dat 文件中。例如,若输入 17,5,则应输出 19,23,29,31,37。注意:部分源程序已给出。 请勿改动主函数 main()和输入输出函数 read write DAT()的内容。试题程序:#include #includeVoid rea
2、dwriteDAT();Void num(int m,int k,int XX)main()int m,n,xx1000;Clrscr();printf(“/nPlease enter tWO integers:”)scanf(“%d,%d”,num(m, n, XX);for(m=0;mn;m+)printf(“%d”, XXm);printf(”/n”);readwriteDAT();)VOid read write DAT()int m,n,xx1000,i;FILE *rf.,*Wf;rf=fopen(“in31Dat”,r”);Wffopen(“ou1t31Dat”/”w”);。 f
3、or(i=0;i10;i+)fscanf(rf,%d,” %d”,num(m,n,XX);for(m=0;m#includeVoid readwriteDAT();Void num(int m,int k,int XX)main()int m,n,xx1000;Clrscr();printf(“/nPlease enter tWO integers:”)scanf(“%d,%d”,num(m, n, XX);for(m=0;mn;m+)printf(“%d”, XXm);printf(”/n”);readwriteDAT();)VOid read write DAT()int m,n,xx10
4、00,i;FILE *rf.,*Wf;rf=fopen(“in31Dat”,r”);Wffopen(“ou1t31Dat”/”w”);。 for(i=0;i10;i+)fscanf(rf,%d,” %d”,num(m,n,XX);for(m=0;mn;m+)fprintf(wf,%d”,xxm);fprintf (wf, “/n”);fclose(rf);fclose (wf);(分数:100.00)_正确答案:(void num(int m,int k,int xxl)int data=m+l; /*从大于整数 m 的数开始找*/int half,I,n=0;while(1)half=dat
5、a/2;for(I=2;I=half;I+) /*如果该数依次除以从 2 到一半的整数,余数都不是 0,则该数是素数*/if(if(data%I=O) break; /*如果余数为 0,则退循环,取下一个数判断*/if(Ihalf) xxn=data;n+; /*判断该数为素数后,将该数存入数组 xx 中,并累计素数的个数*/ if(n=k) break; /*如果累计素数的个数超过了要求的个数,则退出循环*/data+; /*如果累计素数的个数小于要求的个数,则继续取下一个数*/)解析:解析 本题考查的知识点如下:(1)循环结构与选择结构的嵌套使用。(2)强行退出循环结构。(3)特殊运算符“%“的使用。素数是除了 1 和它本身之外不能被其他数整除的数(1 除外)。在本题中,首先要结合相关数学知识找出判定一个数是否为素数的方法,从而对数据进行筛选。如果数据 a 依次除以从 2 到 a/2 的整数,余数都不是 0,则该数是素数。因为所给的数据是连续的数,而且最终所求的数据的个数一定,所以这里可以使用循环结构对数据依次筛选。同时嵌套选择结构对筛选的数据进行不同的处理。在 a 依次除以从 2 到 a/2 的整数的过程中,只要有一次余数为 0,则可退出这一层循环,即退出整除取余的循环,进入下一个数的判断中。