当前位置:首页 > 问题分类 > 计算机类考试 > 计算机三级 > 问题详情

问题:

试题1下列程序的功能是:找出所有100以内(含100)满足i,i+4,i+10都是素数的整数i(i+10也在100以内)

试题1

下列程序的功能是:找出所有100以内(含100)满足i,i+4,i+10都是素数的整数i(i+10也在100以内)的个数cnt以及这些i之和sum。请编写函数countvalue()实现程序要求,最后调用函数writeDat()把结果cnt和sum输出到文件out.dat中。

注意:部分源程序已给出。

请勿改动主函数main()和函数writeDAT()的内容。

试题程序:

#include <stdio.h>

int cnt, 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 countValue()

{

}

void writeDat()

{

FILE *fp;

fp = fopen("out.dat", "w");

fprintf(fp, "%d\n%d\n", cnt, sum);

fclose(fp);

}

void main()

{

cnt = sum = 0;

countValue();

printf("满足条件的整数的个数=%d\n", cnt);

printf("满足条件的整数的和值=%d\n", sum);

writeDat();


  参考答案

正确答案:

试题1答案:
void countvalue()
{
int i;
for(i=2;i<=90;i++)
if(isPrime(i) && isPrime(i+4) && isPrime(i+10))
{
cnt++;
sum+=i;
}
} }
试题1分析:
该程序属于按条件查找数字的题目,考核的知识点为:(1)素数的判定;(2)统计个数并求和。
本题的解题思路是:题目要求的筛选范围是“所有100以内(含100)满足i、i+4、i+10都是素数的整数i(i+10也在100以内)”,由于最小的素数是2,且i+10要在100以内(含100),所以筛选的范围是2~90。
题目要求的筛选条件是“满足i、i+4、i+10都是素数的整数i”。在答题之前,应先通读题目已给出的源程序,在我们要实现的函数countvalue()之前给出一个在题目中从未提及的函数isPrime()。仔细分析这个函数的代码不难发现,它实现了从2~number/2内寻找能整除number的数,如果找到就使变量tag为0,此时循环条件将不成了,最终返回0,如果找不到,变量tag为1,返回1.这段代码实现的是判断一个数是够是素数。所以在函数中对筛选条件可以简化为if(isPrime(i) && isPrime(i+4) && isPrime(i+10))。
程序的流程是:调用countvalue()函数对数据进行处理,最后由writeDAT()函数将结果写入文件out.dat中。
在countvalue()函数中,For循环的功能是判断i、i+4、i+10是否都为素数,若在素数则将i累加到sum中,同时个数cnt加1,函数结束。

 

相关题目:

关于防火墙技术的描述中,正确的是( )。
A)防火墙不能支持网络地址转换
B)防火墙不支持网络管理功能
C)防火墙只能用来过滤电子邮件
D)防火墙可以用作IPSeC平台
下面哪个不是密集组播路由协议?( )
A)DVMRP
B)MOSPF
C)PIM—DM
D)CBT
关于IP数据报投递的描述中,错误的是( )。
A)中途路由器独立对待每个数据报
B)中途路由器可以随意丢弃数据报
C)中途路由器不能保证每个数据报都能成功投递
D)源和目的地址都相同的数据报可能经不同路径投递