1、三级网络技术机试-268 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.下列程序的功能是:选出 1001000 间的所有个位数字与十位数字之和被 10除所得余数恰是百位数字的素数(如 293)。计算并输出上述这些素数的个数 cnt,以及这些素数值的和 sum。请编写函数countValue()实现程序要求,最后调用函数 writeDAT()把结果 cnt和 sum输出到文件 OUT17.DAT中。注意:部分源程序已给出。请勿改动主函数 main()和写函数 writeDAT()的内容。试题程序:#include stdio.hint cn
2、t, sum;void countValue()main ( )cnt=sum=0;countValue ();printf(“素数的个数=%d/n“, cnt);printf (“满足条件素数值的和=%d“, sum);writeDAT ();writeDAT ()FILE *fp;fp=fopen(“OUT17.DAT“, “w“);fprintf(fp, “%d/n%d/n“, cnt, sum);fclose (fp);(分数:100.00)_三级网络技术机试-268 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.下列程序的功能是:
3、选出 1001000 间的所有个位数字与十位数字之和被 10除所得余数恰是百位数字的素数(如 293)。计算并输出上述这些素数的个数 cnt,以及这些素数值的和 sum。请编写函数countValue()实现程序要求,最后调用函数 writeDAT()把结果 cnt和 sum输出到文件 OUT17.DAT中。注意:部分源程序已给出。请勿改动主函数 main()和写函数 writeDAT()的内容。试题程序:#include stdio.hint cnt, sum;void countValue()main ( )cnt=sum=0;countValue ();printf(“素数的个数=%d/
4、n“, cnt);printf (“满足条件素数值的和=%d“, sum);writeDAT ();writeDAT ()FILE *fp;fp=fopen(“OUT17.DAT“, “w“);fprintf(fp, “%d/n%d/n“, cnt, sum);fclose (fp);(分数:100.00)_正确答案:(void countValue()。int i,j,half,hun,ten,data;for(i=101;i1000;i+)hun=i/100; /*求百位数字*/ten=i%100/10; /*求十位数字*/data=i%10; /*求各位数字*/if(hun=(ten+d
5、ata)%10) /*如果个位数字与十位数字之和被 10除所得余数恰是百位数字,则进一步判断该数是否为素数*/ half=i/2;for(j=2;j=half;j+)if(i%j=0) break;if(jhalf)cnt+;sum+=i; /*计算这些素数的个数 cnt,以及这些素数值的和 sum*/)解析:解析 本题的解题思路是利用一个 for循环依次取得 100到 1000之间的数,接着求得当前所取得的数的各个位上的数字值,语句“hun=i/100;ten=i%100/10:data=i%10:”可以分别取得某数的百位、十位及个位上的数字值,然后判断该数个位数字与十位数字之和被 10除所得的余数是否恰好等于百位上的数字。如果这个条件成立,接着去判断原数是否是素数,这里,考虑到效率问题,可以依次用从 2到该原数本身一半的数去除原数,如果原数能被除尽,则证明该数肯定不是素数,不需要做下面的工作,接着去取下一个数,继续判断。只有同时满足上述两个条件的数才是本题所需的数,这时把该数累加到变量sum(满足条件素数值的和)中,同时也给计数器变量 cnt(素数的个数)加 1。