问答题 下列程序的功能是:找出所有100以内(含100)满足I、I+4和I+10都是素数的整数I(I+10也是在100以内)的个数cnt,以及这些I之和sum。请编写函数countValue()实现程序功能,最后调用函数writeDAT(),把结果cnt和sum输出到文件OUT.DAT中(数值1不是素数)。
注意:请勿改动主函数main()和输出数据函数writeDAT()的内容。
【试题程序】
#include < stdio.h >
int cnt, sum;
void writeDAT () ;
int isPrime (int number)
{
int i,tag=1;
if (number == 1 )
return 0 ;
for (i =2 ;tag && i <=number/2;i ++ )
if (number%i == 0 )
tag =0;
return tag;
}
void countValue ()
{
}
void main ()
{
cnt = sum =0;
countValue () ;
printf ("满足条件的整数的个数 =%d\n",
cnt) ;
printf ( "满足条件的整数的和值 =% d \ n",
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; /*定义循环控制变量*/
cnt=0;
sum=0; /*初始化变量*/
for(i=2;i<90;i++) /*找数的范围为100以内*/
if(isPrime(i) && isPrime(i+4)&&isPrime(i+10))
{
cnt++; /*统计满足条件的数的个数*/
sum+=i; /*将满足条件的数求和*/
}
} [解析] 本题属于数学类问题;要求判断在100以内,i,i+4,i+10都是素数的数的个数。因为i+10也必须在100以内,1不是素数,所以我们可以从2开始判断到89即可(90是偶数,明显不是素数)。本题已经给出了判断素数的函数,所以这里只需调用即可。通过一个if语句判断i,i+4以及i+10是否都是素数,对满足条件的数进行求和,同时用cnt统计其个数。