问答题
下列程序的功能是:将大于整数m且紧靠m的k个被3除余1的素数存入数组xx。请编写函数num(int m,imt k,int xx[])实现程序的要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。
例如:若输入17,5,则应输出:19,31,37,43,61。
部分源程序已给出。
请勿改动主函数main()和输出数据函数readwriteDat()的内容。
#include <conio.h>
#include <stdio.h>
void readwriteDat();
void num(int m, int k, int xx[])
main ( )
int m,n,xx[1000];
clrscr();
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();
viod 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是否为素数*/
int isP(int m)
{
int i;
for ( i=2; i<m; i++)
if(m % i==O)return 0;
/*用小于m的所有整数去试除*/
/*除尽则m不是素数*/
/*此步有优化余地*/
return 1;
}
/*寻找满足条件的素数*/
void num(int m, int k, int xx[])
{
int s=0;
for (++m; k>0 ;m++)
if (m%3==1 && isP(m) ) {
xx[s++]=m;
k--;
}
}
【答案解析】