问题 问答题

请编写一个函数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为素数。

选择题
单项选择题