1、计算机三级数据库技术-125 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.下列程序的功能是:将大于整数 m 且紧靠 m 的 k 个素数存入数组 xx。请编写函数 num(int m,int k,int xx)实现程序功能,最后调用函数 readwriteDAT(),把结果输出到 OUT.DAT 文件中。 例如,若输入 17,5,则应输出 19,23,29,31,37。 注意:请勿改动主函数 main()和输入输出函数 readwriteDAT()的内容。 【试题程序】 #include stdlib.h #include stdio.h
2、 void readwriteDAT () ; void num (int m, int k, int xx ) void main () int m,n,xx1000; system ( “CLS“ ) ; printf (“nPlease enter two integers :“); scanf (“%d, %d“, num(m, n, xx); for (m =0;mn;m + ) printf (“%d “,xxm ) ; printf (“n“) ; readwriteDAT () ; void readwriteDAT () int m, n, xx1000,i; FILE *
3、rf,* wf; rf = fopen (“IN.DAT“, “r“) ; wf = fopen (“OUT. DAT“, “w“) ; for (i =0;i 10;i + ) fscanf (rf,“%d %d“, num (m, n, xx) ; for (m =0;m n;m + ) fprintf (wf, “%d “,xxm ) ; fprintf (wf, “n“) ; fclose (rf) ; felose (wf) ; (分数:100.00)_计算机三级数据库技术-125 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.下
4、列程序的功能是:将大于整数 m 且紧靠 m 的 k 个素数存入数组 xx。请编写函数 num(int m,int k,int xx)实现程序功能,最后调用函数 readwriteDAT(),把结果输出到 OUT.DAT 文件中。 例如,若输入 17,5,则应输出 19,23,29,31,37。 注意:请勿改动主函数 main()和输入输出函数 readwriteDAT()的内容。 【试题程序】 #include stdlib.h #include stdio.h void readwriteDAT () ; void num (int m, int k, int xx ) void main
5、() int m,n,xx1000; system ( “CLS“ ) ; printf (“nPlease enter two integers :“); scanf (“%d, %d“, num(m, n, xx); for (m =0;mn;m + ) printf (“%d “,xxm ) ; printf (“n“) ; readwriteDAT () ; void readwriteDAT () int m, n, xx1000,i; FILE * rf,* wf; rf = fopen (“IN.DAT“, “r“) ; wf = fopen (“OUT. DAT“, “w“)
6、; for (i =0;i 10;i + ) fscanf (rf,“%d %d“, num (m, n, xx) ; for (m =0;m n;m + ) fprintf (wf, “%d “,xxm ) ; fprintf (wf, “n“) ; fclose (rf) ; felose (wf) ; (分数:100.00)_正确答案:()解析:void num(int m,int k,int xx) int i,half,cnt=0; /*定义变量 cnt 来统计已经取得的素数个数*/ int data=m+1; /*从大于整数 m 的数开始找*/ while(1) /*循环条件始终为
7、真,所以是无条件循环*/ half=data/2; /*求出当前数的一半,判断素数用*/ for(i=2;i=half;i+) /*如果该数依次除以从 2 到一半的整数,余数都不是 0,则该数是素数*/ if(data%i=0) /*如果余数为 0*/ break; /*则退出循环,取下一个数判断*/ if(ihalf) xxcnt=data; cnt+; /*判断该数为素数后,将该数存入数组 xx 中,并累计素数的个数*/ if(cnt=k) break; /*如果累计素数的个数超过了要求的个数,则退出循环*/ data+; /*如果累计素数的个数小于要求的个数,则继续取下一个数*/ 考点 本题考查对素数的筛选。考查的知识点主要包括:判断素数的算法,C 语言循环结构,if 条件判断结构,逻辑表达式。 解析 此题属于数学类问题。分析题干,本题存在 2 个关键点:关键点 1 如何分析本题中数的筛选范围;关键点 2 如何找出指定个数的素数。 本题的解题思路为:用一个无条件循环作为程序主体,在循环体中由一个 if 判断结构和 break 语句控制指定的筛选素数个数;利用一个内部循环体来实现数的筛选功能,逐个保存满足条件的数(素数),直到筛选出指定个数的素数,退出循环。 判断素数的算法;控制筛选指定个数素数的程序逻辑。