请编写一个函数jS Value(int m, int k, int xx[]),该函数的功能是:将小于整数m且紧靠m的k个素数存入数组xx并传回。调用函数writeDat()读取10组数据,分别得出结果且把结果输出到文件out.dat中。
注意:部分源程序给出如下。
例如:若输入“17,5”,则应输出“13,11,7,5,3”。
请勿改动主函数main()和输出数据函数readwriteDat()的内容。
[试题源程序]
#include<conio.h>
#include<stdio.h>
void readwriteDat();
void num(int m, int k, int xx[])
main()
int m, n, xx[1000];
System("cls");
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++)
Scanf(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);
参考答案:void num(int m, int k, int xx[])
{
int i,j,n;
for(n=m-A,i=0;i<k;n--) /*该循环用了B个循环变量,n用来跟踪m之前的数,所以每趟减A,i用来计算找到素数的个数,所以该循环结束的条件为i等于k*/
{
for(j=B;j<=n/B;j++) /*该循环用于判断n是否是素数*/
if(n%j==0)
break;
if(j>n/B)
xx[i++]=n; /*找到一个素数,先存入xx[i],然后i值增A*/
}
}
解析:
本题主要考查的是素数及其计算问题。用for循环来跟踪m之前的k个素数,对于m之后的数n,判断其是否为素数,若是则将其赋值给xx[i],同时变量i增1。变量i的取值范围为0到k-1,用来控制k个素数被存入数组xx。判断n是否为素数,只要内嵌一个for循环,使循环变量j的取值范围为2到n的一半。判断n是否能整除j,如果有一个能整除,则跳出内层for循环时j≤n/2,表示n不是素数,否则内层for循环结束的条件为j>n/2,表示n为素数。