下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx中。请编写函数num(int m int k int x

计算机 函数,素数,整数 已帮助 人

下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx中。请编写函数num(int m, int k, int xx[])实现程序的要求,最后调用函数readwriteDAT() 把结果输出到文件out.dat中。例如:若输入“17, 5”,则应输出“19, 23, 29, 31, 37”。注意:部分源程序已给出。请勿改动主函数main()和函数readwriteDAT()的内容。#include <conio.h>#include <stdio.h>void readwriteDat();void num(int m, int k, int xx[]){ }main(){ int m, n, xx[1000]; printf(" Please enter two integers:"); scanf("%d%d", &m, &n); num(m, n, xx); for (m=0; m<n; m++) printf("%d ", xx[m]); printf(" "); 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 %d", &m, &n); num(m, n, xx); for (m=0; m<n; m++) fprintf(wf, "%d ", xx[m]); fprintf(wf, " "); } fclose(rf); fclose(wf);}

热搜:大跨度建筑是指跨度大于( )m的建筑

答案解析

难度★★☆ 搜索
  • 参考答案:参考试题解析【解析及答案】该程序属于按条件查找类型的题目,考核的知识点主要为:判断一个数字是否为素数及统计素数的个数。本题的解题思路为:从整数m+1开始逐个判断一个整数是否为素数。若是素数,则将其存入数组xx中,直至找到连续的k个素数为止。判断一个整数是否为素数,可以通过将该整数分别除以2到该整数的1/2之间的所有整数来进行。例如,要判断17是否为素数,则将其分别除以2、3、4、5、6、7、8,若都不能整除,该整数就一定是素数。要寻找连续的k个素数,可以设置一个记录个数的变量,每找到1个素数时,该记录的值就增加1。程序的流程为:首先从键盘输入2个十进制整数,以第1个整数作为基础开始寻找素数,将第2个整数作为需要寻找素数的个数,然后通过函数readwriteDat() 从文件in.dat中读入10组数据,通过函数num() 的计算,把结果写入文件out.dat中。在函数num() 中使用一个while循环查找k个素数,每次查找成功后,n的值将增加1。因为不能确定循环执行的具体次数,所以设定while循环的条件恒为真(条件为“1”),并加入跳出循环的控制语句,即当n≥k时循环结束。进入while循环体后,首先使用for循环确定当前数字是否为素数,即判断当前整数data是否能被2到它的1/2之间的任意整数整除。如果能被整除,则说明该整数不是素数,程序通过break语句跳出for循环(此时i≤half);否则,当循环执行到i>half时,程序正常退出for循环体,说明当前整数data是素数。这里的i值既是for循环的计数器,又是当前数字是否为素数的标志。if语句将根据此时i值的大小判断整数data是否为素数,如果是素数,则将整数data存入数组xx中,同时记录素数个数的变量n的值将增加1。接着判断变量n的值是否达到了要求的个数,如果达到,则跳出while循环,函数num() 结束;否则,整数data加1后重新进入while循环体,直到找到满足题意的个数的素数,函数num() 结束。void num(int m,int k,int xx[]){int data=m+1;int half,n=0,I; while(1) {half=data/2;for(I=2;I<=half;I++)if(data%I==0)break;if(I>half){xx[n]=data;n++;}if(n>=k)break;data++;} }