问答题
请编写函数num(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入数组xx传回。
最后调用函数readwriteDat(),从in.dat文件中读取10组数据,分别得出结果,且把结果输出到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);
fprintf(wf,"%d",xx[m]);
fprintf(wf,"/n");
}
fclose(rf);
fclose(wf);
}
【正确答案】void num(int m,int k,int xx[])
{
/*定义整型变量data,并初始化为m+1(即大于整数m且紧靠m的第1个整数)*/
int data=m+1;
int half,n=0,i;
while(1)
{
/*判断data是否为素数*/
half=data/2;
for (i=2;i<=half;i++)
if (data%i==0)
break;
if (i>half) /*如果此时i>half说明data是一个素数*/
{
xx[n]=data; /*将data存入数组xx*/
n++; /*让计数变量n增1*/
}
/*如果已经找足k个素数了,就通过break语句跳出循环*/
if (n>=k)
break;
data++; /*继续找下一个素数*/
}
}
【答案解析】