问题 问答题

下列程序的功能是:选出100~1000之间的所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数。计算并输出上述这些素数的个数cnt,以及这些素数值的和sum。请编写函数countValue()实现程序要求,最后调用函数writeDAT()把结果cnt和sum输出到文件OUT90.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("OUT90.DAT","w");
fprintf(fp,"% d\n% d\n",cnt,sum);
fclose(fp);

答案

参考答案:void countValue()
{
int i,j; /*定义循环控制变量*/
int a3,a2,a1; /*定义变量存储3位数每位的数字*/
int half;
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*/
}
}
}
}

解析: 本题的解题思路是利用一个for循环依次取得100~1000之间的数,接着求得当前所取得的数的各个数位上的数字,然后判断该数个位数字与十位数字之和被10除所得的余数是否恰好等于百位上的数字。如果该条件成立,接着去判断原数是否是素数。最后将满足以上两个条件的数累加到变量sum(素数的和值)中,同时通过计数器变量cnt统计出素数的个数。

单项选择题
判断题