问答题
请编写一个函数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为素数。
提交答案
关闭