问答题 请编写函数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++; /*继续找下一个素数*/ } }
【答案解析】