下列程序的功能是:找出所有100以内(含100)满足i、i+4、i+10都是素数的整数i(i+10也在100以内)的个数count以及这些i之和sum。请编写函数primeNum()实现程序要求的功能,最后调用函数writeDat(),把结果count和sum输出到文件OUT.dat中。
注意:部分源程序已经给出。请勿改动主函数main()和输出数据函数writeDat()的内容。
#include <stdio.h>
int count, sum;
int isPrime(int number)
{ int i, tag = 1;
for (i=2; tag && i<=number/2; i++)
if (number%i == 0)
tag = 0;
return tag;
}
void primeNum()
{
}
void writeDat()
{ FILE *fp;
fp = fopen("OUT.dat", "w");
fprintf(fp, "%d\n%d\n", count, sum);
fclose(fp);
}
void main()
{ count = sum = 0;
primeNum();
printf("满足条件的整数的个数=%d\n", count);
printf("满足条件的整数的和值=%d\n", sum);
writeDat();
}
试题答案及详解
【审题分析】分析题目可知,本题只要实现primeNum()函数的功能即可。primeNum()要实现的功能是:找出所有100以内(含100)满足i、i+4、i+10都是素数的整数i(i+10也在100以内)的个数count以及这些i之和sum。因此解答本题的关键在于如何将“i、i+4、i+10都是素数”条件转换成C语言表达式。
【解题思路】在for循环语句中自变量i从2递增到90,调用子函数isPrime(),用来判断i、i+4、i+10这3个数同时为素数是否成立,如果成立,则计数变量count加1,同时把i加到变量sum上,求得这些i的和。
【参考答案】
void primeNum()
{ int i;
for(i=2;i<=90;i++)
if(isPrime(i) && isPrime(i+4) && isPrime(i+10))
{ count++;
sum+=i;
}
}
【易错分析】因为i+10要在100以内,所以自变量i的变化范围应该是2到90。
【考点链接】子函数的调用。
责任编辑:小草