早教吧 育儿知识 作业答案 考试题库 百科 知识分享
早教吧考试题库频道 --> 计算机类考试 -->计算机三级 -->

下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx中。请编写函数num(int m, int k, int x

题目

下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx中。请编写函数num(int m, int k, int xx[])实现程序的要求,最后调用函数readwriteDAT() 把结果输出到文件out.dat中。例如:若输入“17, 5”,则应输出“19, 23, 29, 31, 37”。注意:部分源程序已给出。请勿改动主函数main()和函数readwriteDAT()的内容。#include <conio.h>#include <stdio.h>void readwriteDat();void num(int m, int k, int xx[]){ }main(){ int m, n, xx[1000]; printf("\nPlease enter two integers:"); scanf("%d%d", &m, &n); num(m, n, xx); for (m=0; m<n; m++) printf("%d ", xx[m]); printf("\n"); readwriteDat();}void readwriteDat(){ int m, n, xx[1000], i; FILE *rf, *wf; rf = fopen("in.dat", "r"); wf = fopen("out.dat", "w"); for (i=0; i<10; i++) { fscanf(rf, "%d %d", &m, &n); num(m, n, xx); for (m=0; m<n; m++) fprintf(wf, "%d ", xx[m]); fprintf(wf, "\n"); } fclose(rf); fclose(wf);}

参考答案
正确答案:参考试题解析
【解析及答案】
该程序属于按条件查找类型的题目,考核的知识点主要为:判断一个数字是否为素数及统计素数的个数。
本题的解题思路为:从整数m+1开始逐个判断一个整数是否为素数。若是素数,则将其存入数组xx中,直至找到连续的k个素数为止。判断一个整数是否为素数,可以通过将该整数分别除以2到该整数的1/2之间的所有整数来进行。例如,要判断17是否为素数,则将其分别除以2、3、4、5、6、7、8,若都不能整除,该整数就一定是素数。要寻找连续的k个素数,可以设置一个记录个数的变量,每找到1个素数时,该记录的值就增加1。
程序的流程为:首先从键盘输入2个十进制整数,以第1个整数作为基础开始寻找素数,将第2个整数作为需要寻找素数的个数,然后通过函数readwriteDat() 从文件in.dat中读入10组数据,通过函数num() 的计算,把结果写入文件out.dat中。在函数num() 中使用一个while循环查找k个素数,每次查找成功后,n的值将增加1。因为不能确定循环执行的具体次数,所以设定while循环的条件恒为真(条件为“1”),并加入跳出循环的控制语句,即当nk时循环结束。进入while循环体后,首先使用for循环确定当前数字是否为素数,即判断当前整数data是否能被2到它的1/2之间的任意整数整除。如果能被整除,则说明该整数不是素数,程序通过break语句跳出for循环(此时i≤half);否则,当循环执行到i>half时,程序正常退出for循环体,说明当前整数data是素数。这里的i值既是for循环的计数器,又是当前数字是否为素数的标志。if语句将根据此时i值的大小判断整数data是否为素数,如果是素数,则将整数data存入数组xx中,同时记录素数个数的变量n的值将增加1。接着判断变量n的值是否达到了要求的个数,如果达到,则跳出while循环,函数num() 结束;否则,整数data加1后重新进入while循环体,直到找到满足题意的个数的素数,函数num() 结束。
void num(int m,int k,int xx[])
{int data=m+1;
int half,n=0,I;
while(1)
{
half=data/2;
for(I=2;I<=half;I++)
if(data%I==0)
break;
if(I>half)
{
xx[n]=data;
n++;
}
if(n>=k)
break;
data++;
}
}