应用题
6. 下列程序的功能是选出100~1000间的所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数(如293)。计算并输出满足上述条件的素数的个数cnt,以及这些素数值的和sum。请编写函数countValue()实现程序功能,最后调用函数writeDAT(),把结果cnt和sum输出到文件OUT.DAT中。
请勿改动主函数main()和写函数writeDAT()的内容。
[试题程序] #include<stdio.h>
int cnt, sum;
void writeDAT();
void countValue()
{
}
void main()
{
cnt=sum=0;
countValue();
printf("素数的个数=%d\n", cnt);
printf("满足条件素数的和=%d", sum);
writeDAT();
}
void writeDAT()
{
FILE*fp;
fp=fopen("OUT.DAT", "w");
fprintf(fp, "%d\n%d\n", cnt, sum);
fclose(fp);
}
【正确答案】void countValue()
{
int i, j; /*定义循环控制变量*/
int half;
int a3, a2, a1; /*定义变量存储3位数每位的数字*/
for(i=101; i<1000; i++) /*在该范围内寻找符合条件的数*/
{
a3=i/100; /*求百位数字*/
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(j>half) /*如果是素数*/
{
cnt++; /*计算这些素数的个数cnt*/
sum+=i; /*计算这些素数值的和sum*/
}
}
}
}
【答案解析】[考点] 本题考查对一定范围内整数的筛选。考查的知识点主要包括:多位整数的分解算法,素数的判断算法,if判断语句和逻辑表达式。
此题属于数学类问题。分析题干要求,归纳出本题的2个关键点:关键点1判断该数是否为素数;关键点2判断是否满足条件:个位数字和十位数字之和被10除所得余数等于百位数字。
本题思路为:通过循环语句,依次求出所有3位数的各位数数字,并判断是否满足关键点2(个位数字和十位数字之和被10除所得余数等于百位数字),如果满足则判断该数是否为素数,如果是则个数加1,并将该数加到和值中。判断的方法为:依次取从2到该数1/2的数去除这个数,如果有一个可被整除,则不是素数,如果循环后的数大于该数的一半就可以判定该数是一个素数。