.编程题
请编写函数fun,函数的功能是:将大于形参m且紧靠m的k个素数存入xx所指的数组中。例如,若输入17、5,则应输出:19、23、29、31、37。
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
注意:不要对main()函数进行改动。
源程序存放在考生文件夹下的pro.C中。
#include <stdio.h>
void fun(int m,int k,int xx[])
{
int j,n=0;
while(n<k)
{
m++;
for(j=2;j<m;j++)
if(m%j==0) break;
if(j>=m) xx[n++]=m;
}
}
void main()
{
FILE *out;
int m,n,zz[1000] ;
printf( "Please enter two integers:");
scanf("%d%d",&m,&n);
fun(m,n,zz);
out=fopen("out.dat","w");
out=fopen("out.dat","at");
for(m=0;m<n;m++)
{
printf("%d ",zz[m]);
printf(" ");
fprintf(out,"%d",zz[m]);
fputs(" ",out);
}
fclose(out);
}
麻烦给形参里面的程序每句话都解释一下,不是太懂啊!
可以啊,如果你有时间的话!
追答#include
#include
int a;//将选定的质数声明为全局变量,这样可以使函数改变其值
static int IsPrime(int);//此函数用来验证选定的数是否为质数
static void Prompt();//这是提示
static int Calculate(int);//此函数用来计算选定质数的接下来的五个质数
static void ListResults(int);//此函数用来输出计算出来的5个质数
main()
{
int prime[5]={0,0,0,0,0};//初始化数组中的每个元素
Prompt();
Calculate(prime[5]);
ListResults(prime[5]);
}
int IsPrime(int n)
{
int i,limit;
if(n<=1) return 0;
if(n==2) return 1;
if(n%2==0) return 0;
limit=sqrt(n)+1;
for(i=3;i<=limit;i+=2)
{
if(n%i==0) return 0;
}
return 1;
}
void Prompt()
{
while(1)
{
printf("请输入一个质数: ");
scanf("%d",&a);
if(IsPrime(a)) break;
printf("请重新输入!");
}
}
int Calculate(int num[5])
{
int i, n=0;
for(i=a+1;n<=5;i++)
if(IsPrime(i))
{
num[n]=i;
n++;
}
return num[5];
}
void ListResults(int num[])
{
int i;
printf("接下来的5个质数为: ");
for(i=0;i<5;i++)
{
printf("%5d",num[i]);
}
}
另外补充一下,上述验证质数的算法是一个高效的算法,你应该能看懂,如果你只知道质数的定义(除了1和本身,不能被其他正整数整除),那么可以使用下面的验证方法来替代,不过效率就十分低下:
int IsPrime(int n)
{
int divisors, i;
divisors=0;
for(i=1;i<=n;i++)
{ if(n%i==0) divisors++;}
return (divisors==2);
}
上述代码一定正确,复制粘贴然后运行即可,记得给分哦!