1、三级数据库技术机试-271 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.下列程序的功能是:计算 500800 之间素数的个数 cnt,并按所求素数的值从小到大的顺序,再计算其间隔加、减之和,即第 1个素数-第 2个素数+第 3个素数-第 4个素数+第 5个素数的值 sum。请编写函数 countValue()实现程序的要求,最后调用函数 writeDat()把结果 cnt和 sum输出到文件OUT66.DAT中。注意:部分源程序己给出。请勿改动主函数 main()和写函数 writeDAT()的内容。试题程序:includestdio.
2、hint cnt, sum;void countValue ()void main ( )cnt=sum=0;countValue ();printf(“素数的个数=%d/n“,cnt);printf(“按要求计算机得值=%d/n“, sum);writeDAT ( );writeDAT ( )FILE *fp;fp=fopen (“OUT66.DAT“, “w“);fprintf (fp, “%d/n%d/n“, cnt, sum);fclose(fp);(分数:100.00)_三级数据库技术机试-271 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:10
3、0.00)1.下列程序的功能是:计算 500800 之间素数的个数 cnt,并按所求素数的值从小到大的顺序,再计算其间隔加、减之和,即第 1个素数-第 2个素数+第 3个素数-第 4个素数+第 5个素数的值 sum。请编写函数 countValue()实现程序的要求,最后调用函数 writeDat()把结果 cnt和 sum输出到文件OUT66.DAT中。注意:部分源程序己给出。请勿改动主函数 main()和写函数 writeDAT()的内容。试题程序:includestdio.hint cnt, sum;void countValue ()void main ( )cnt=sum=0;cou
4、ntValue ();printf(“素数的个数=%d/n“,cnt);printf(“按要求计算机得值=%d/n“, sum);writeDAT ( );writeDAT ( )FILE *fp;fp=fopen (“OUT66.DAT“, “w“);fprintf (fp, “%d/n%d/n“, cnt, sum);fclose(fp);(分数:100.00)_正确答案:(void countValue() int i,j,half,yy100;for(i=500;i800;i+) half=i/2;for(j=2;j=half;j+)if(i%j=0)break; /*如果该数不是素数
5、,则退出此层循环*/if(j=half) /*如果该数是素数,则将该数存入数组 yy中*/ yycnt=i;cnt+; /*统计素数的个数*/for(i=0,j=-1;icnt;i+) /*计算这些素数的间隔加、减之和*/ i=j*-1;sum+=j*yyi;)解析:解析 本题考查的知识点如下:(1)利用循环和“%”进行素数的判断。(2)间隔加、减的实现。在本题中,首先要找出判断素数的方法。若一个数 a依次除以从 2到 a/2的数所得的余数都不是 0,则这个数是素数。用此方法依次判断出从 500到 800区间内的素数。由题意可知,第 1,3,5个素数计算加法,第 2,4,6个素数计算减法。减去 1个正整数就是加上负的这个正整数,所以可以将这个正整数乘以-1 进行加法。使用循环实现求和,在奇数次的循环中,每个素数乘以 1,偶数次的循环中,素数乘以-1,就可实现间隔加、减。