问题 问答题

下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx。请编写函数num(int m,int k,int xx[])实现程序的要求,最后调用函数readwriteDAT()把结果输出到out92.dat文件中。
注意:部分源程序已给出。
请勿改动主函数main()和输入输出函数readwriteDAT()的内容。
试题程序:
#include <stdlib.h>
#include <stdio.h>
void readwriteDAT();
void num(int m,int k,int xx[])


void main()

int m,n,xx[1000];
system("CLS");
printf("\nPlease enter two integets:");
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("in92.dat","r");
wf=fopen("out92.dat","w");
for(i=0;i<10;i + +)

fscanf(rf,"% d % d",&m,&n);
mum(m,n,xx);
for(m=0;m<n;m + +)
fprintf(wf,"% d",xx[m]);
fprintf(wf,"\n");

fclose(rf);
fclose(wf);

答案

参考答案:void num(int m,int k,int xx[])
{
int i,half,cnt=0; /*定义变量cnt来统计已经取得的素数个数*/
int data=m+1; /*从大于整数m的数开始找*/
while(1) /*循环条件始终为真,所以是无条件循环*/
{
half=data/2; /*求出当前数的一半,判断素数*/
for(i=2;i<=half;i + +) /*如果该数依次除以从2到其一半的整数,余数都不是0,则该数是素数*/
if(data%i==0) /*如果余数为0*/
break; /*则退出循环,取下一个数进行判断*/
if(i>half)
{
xx[cnt]=data;cnt + +; /*确定该数为素数后,将该数存入数组xx中,并累计素数的个数*/
}
if(cnt>=k) break; /*如果累计素数的个数超过了要求的个数,则退出循环*/
data + +; /*如果累计素数的个数小于要求的个数,则继续取下一个数*/
}
}

解析: 在本题中,首先要结合相关数学知识找出判定一个数是否为素数的方法,从而对数据进行筛选。如果数a依次除以从2到a/2的整数,余数都不是0,则该数是素数。将符合条件的数存入数组xx中,使用计数器变量cnt来统计已经取得的数的个数。当cnt的值小于等于k时,即表示所获得素数的个数已经达到了要求,循环停止。

多项选择题
单项选择题