国家三级(数据库技术)机试模拟试卷17 (题后含答案及解析)
题型有:1. 程序设计题
程序设计题
1. 下列程序的功能是:选出100~1000间的所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数(如293)。计算并输出上述这些素数的个数cnt,以及这些素数值的和sum。请编写函数countValue( )实现程序要求,最后调用函数writeDAT( )把结果cnt和sum输出到文件OUT17.DAT中。 注意:部分源程序已给出。 请勿改动主函数main( )和写函数writeDAT( )的内容。 试题程序: #include〈stdio.h> int cnt, 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); }
正确答案:void countValue( ) { int i, j, half, hun, ten, data; for(i=101; i〈1000; i++) {hun=i/100; /*求百位数字*/ten=i%100/10; /*求十位数字*/data=i%10; /*求各位数字*/if(hun==(ten+data)%10) /*如果个位数字与十位数字之和被10除所得余数恰是百位数字,则进一步判断该数是否为素数*/{ half=i/2; for(j=2; i〈half; i++) if(i%j==0) break; if(j>=half) {cnt++; sum+=i;} /*计算这些素数的个数cnt,以及这些素数值的和sum*/} } }
解析:本题的解题思路是利用一个for循环依次取得100到1000之间的数,接着求得当前所取得的数的各个位上的数字值,语句“hun=i/100;ten=i%100/10:data=i%10;”可以分别取得某数的百位、十位及个位上的数字值,然后判断该数个位数字与十位数字之和被10除所得的余数是否恰好等于百位上的数字。如果这个条件成立,接着去判断原数是否是素数,这里,考虑到效率问题,可以依次用从2到该原数本身一半的数去除原数,如果原数能被除尽,则证明该数肯定不是素数,不需要做下面的工作,接着去取下一个数,继续判断。只有同时满足上述两个条件的数才是本题所需的数,这时把该数累加到变量sum(满足条件素数值的和)中,同时也给计数器变量cnt(素数的个数)加1。
因篇幅问题不能全部显示,请点此查看更多更全内容