问题 问答题

请编写一个函数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 hum(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,=[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);

答案

参考答案:void num(int m,int k,int xx[])
{
int i,j,n;
for(n=m-1,i=0;i<k;n--)
/*该循环用了2个循环变量,n用来跟踪m之前的数,所以每趟减1,i用来计算找到素数的个数,所以该循环结束的条件为i等于k*/
{
for(j=2;j<=n/2;j++)
/*该循环用于判断n是否是素数*/
if(n%j==0)
break;
if(j>n/2)
xx[i++]=n;
/*找到一个素数,先存入xx[i]然后i增1*/
}
}

解析: 本题主要考查的是素数及其计算问题。用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为素数。

填空题
单项选择题