问题 问答题

请编写一个函数is 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++)

fscanf(rf,"%d%cr,&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之前的数,所以每趟减i,i用来

计算找到素数的个数,所以该循环结束的条件为i等于k*/

{

for(j=2;j<=n/0;j++) /*该循环用于判断n是否是素数*/

if(n%J==0)

break;

if(j>n/2)

xx[i++]=rl; /*找到一个素数,先存入xx[i]然后i增l*/

}

}

解析:

本题主要考查的是素数及其计算问题。用for循环来跟踪m之前的k个素数,对于某个m之后的数n判断其是否为素数,若是则将其赋值给xx[i]同时变量i增1,变量i从。到k-1用来控制k个素数被存入xx。判断n是否为素数只要内嵌一个for循环使循环变量j从2到n得一半,判断n是否能整除j,如果有一个能整除则跳出内层for循环时j<=n/2,表示n不是素数,否则内层for循环结束的条件为j>n/2,表示n为素数。

填空题
单项选择题