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