1、计算机三级数据库技术-80 及答案解析(总分:100.00,做题时间:90 分钟)1.下列程序的功能是选出 1001000 间的所有个位数字与十位数字之和被 10除所得余数恰是百位数字的素数(如 293)。计算并输出满足上述条件的素数的个数 cnt,以及这些素数值的和 sum。请编写函数countValue()实现程序功能,最后调用函数 writeDAT(),把结果 cnt和 sum输出到文件 OUT.DAT中。 请勿改动主函数 main()和写函数 writeDAT()的内容。 试题程序 #includestdio.h int cnt, sum; void writeDAT(); void
2、countValue() void main() cnt=sum=0; countValue(); printf(“素数的个数=%dn“, cnt); printf(“满足条件素数的和=%d“, sum); writeDAT(); void writeDAT() FILE*fp; fp=fopen(“OUT.DAT“, “w“); fprintf(fp, “%dn%dn“, cnt, sum); fclose(fp); (分数:100.00)_计算机三级数据库技术-80 答案解析(总分:100.00,做题时间:90 分钟)1.下列程序的功能是选出 1001000 间的所有个位数字与十位数字之和
3、被 10除所得余数恰是百位数字的素数(如 293)。计算并输出满足上述条件的素数的个数 cnt,以及这些素数值的和 sum。请编写函数countValue()实现程序功能,最后调用函数 writeDAT(),把结果 cnt和 sum输出到文件 OUT.DAT中。 请勿改动主函数 main()和写函数 writeDAT()的内容。 试题程序 #includestdio.h int cnt, sum; void writeDAT(); void countValue() void main() cnt=sum=0; countValue(); printf(“素数的个数=%dn“, cnt); p
4、rintf(“满足条件素数的和=%d“, sum); writeDAT(); void writeDAT() FILE*fp; fp=fopen(“OUT.DAT“, “w“); fprintf(fp, “%dn%dn“, cnt, sum); fclose(fp); (分数:100.00)_正确答案:()解析:void countValue() int i, j; /*定义循环控制变量*/ int half; int a3, a2, a1; /*定义变量存储 3位数每位的数字*/ for(i=101; i1000; i+) /*在该范围内寻找符合条件的数*/ a3=i/100; /*求百位数
5、字*/ a2=i%100/10; /*求十位数字*/ a1=i%10; /*求个位数字*/ if(a3=(a2+a1)%10) /*如果个位数字与十位数字之和被 10除所得余数恰是百位数字*/ half=i/2; for(j=2; j=half; j+) /*进一步判断该数是否为素数*/ if(i%j=0) break; /*如果不是素数,则跳出循环,接着判断下一个数*/ if(jhalf) /*如果是素数*/ cnt+; /*计算这些素数的个数 cnt*/ sum+=i; /*计算这些素数值的和 sum*/ 考点 本题考查对一定范围内整数的筛选。考查的知识点主要包括:多位整数的分解算法,素数的判断算法,if 判断语句和逻辑表达式。 此题属于数学类问题。分析题干要求,归纳出本题的 2个关键点:关键点 1判断该数是否为素数;关键点2判断是否满足条件:个位数字和十位数字之和被 10除所得余数等于百位数字。 本题思路为:通过循环语句,依次求出所有 3位数的各位数数字,并判断是否满足关键点 2(个位数字和十位数字之和被 10除所得余数等于百位数字),如果满足则判断该数是否为素数,如果是则个数加 1,并将该数加到和值中。判断的方法为:依次取从 2到该数 1/2的数去除这个数,如果有一个可被整除,则不是素数,如果循环后的数大于该数的一半就可以判定该数是一个素数。