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