本系列资料由"韬略宏智" 授权发布,任何网站不得转载,否则追究法律责任。
第1套
请编写一个函数jsValue(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入数组xx传回。最后调用函数readwriteDat()读取10组数据,分别得出结果且把结果输出到文件out1.dat中。部分程序已经给出。
例如:若输入17,5,则应输出:19,23,29,31,37。
请勿改动主函数main()和输出数据函数readwriteDat()的内容。
#include
#include
void readwriteDat();
void jsValue (int m,int k,int xx[])
{
}
main()
{
int m,n,xx[1000];
clrscr();
printf("\nPlease enter two integers:");
scanf("%d,%d",&m,&n);
jsValue (m,n,xx);
for(m=0;m
printf("\n");
readwriteDat();
}
void readwriteDat()
{
int m,n,xx[1000],i;
FILE *rf,*wf;
rf=fopen("in1.dat","r");
wf=fopen("out1.dat","w");
for(i=0;i<10;i++)
{
fscanf(rf,"%d %d",&m,&n);
jsValue (m,n,xx);
for(m=0;m
fprintf(wf,"\n");
}
fclose(rf);
fclose(wf);
}
本系列资料由"韬略宏智" 授权发布,任何网站不得转载,否则追究法律责任。
第1套
请编写一个函数jsValue(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入数组xx传回。最后调用函数readwriteDat()读取10组数据,分别得出结果且把结果输出到文件out1.dat中。部分程序已经给出。
例如:若输入17,5,则应输出:19,23,29,31,37。
请勿改动主函数main()和输出数据函数readwriteDat()的内容。
#include <conio.h>
#include <stdio.h>
void readwriteDat();
void jsValue (int m,int k,int xx[])
{
}
main()
{
int m,n,xx[1000];
clrscr();
printf("\nPlease enter two integers:");
scanf("%d,%d",&m,&n);
jsValue (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("in1.dat","r");
wf=fopen("out1.dat","w");
for(i=0;i<10;i++)
{
fscanf(rf,"%d %d",&m,&n);
jsValue (m,n,xx);
for(m=0;m<n;m++)
fprintf(wf,"%d ",xx[m]);
fprintf(wf,"\n");
}
fclose(rf);
fclose(wf);
}
答案解析
【答案】
void jsValue (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++;
}
}
【解析】
考点:(1)判断一个数字是否为素数。
(2)统计素数的个数。
本题的解题思路为:从m+1开始逐个数字判断是否为素数(即只能被1和它本身整除的整数)。若是素数则存入数组xx中,一直寻找连续的k个素数为止。判断是否为素数,可以通过除以2到它的一半之间所有的数,比如,判断17是否为素数,则需除以2、3、4、5、6、7、8,若都不能整除,则该数字就一定是素数。寻找连续的k个素数,可以设置一个记录个数的变量,每找到一个素数时该记录变量加1。
程序的流程为:首先从键盘输入两个十进制整数,以第一个整数作为基础开始寻找素数,第2个整数作为需要寻找素数的个数,然后把jsValue ()函数的处理结果,通过readwriteDat()函数写回文件out1.dat中。
在jsValue ()函数中,使用一个while循环查找n个素数,每次查找成功后n值将加1。因为不能确定循环执行的具体次数,所以设定while循环的条件恒为真(条件为“1”),并加入跳出循环的控制语句,即当n>=k(超过所需的素数个数)时循环结束。
进入while循环体后,首先使用for循环,确定当前数字是否为素数,即判断当前数字data是否能被2到它一半之间的任意数整除,如果能被整除,则说明此数不是素数,程序通过break语句跳出for循环(此时i<=half),否则循环执行到i>half时,程序正常退出for循环体,说明当前数字data是素数,这里的i值既作为for循环计数器,又作为是当前数字是否为素数的标志。
if语句将根据此时i值的大小判断data是否为素数,如果是素数,则将data存入数组xx中,同时记录素数个数的变量n加1,接着判断n的值是否达到了题目要求的个数,如果达到了,则跳出while循环,jsValue()函数结束,否则data加1后重新进入while循环体。直到找到满足个数的素数,jsValue()函数结束。
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |