请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。

2024-11-01 01:08:08
推荐回答(3个)
回答1:

#include

void fun(int m, int *k, int xx[])

{

int i,j,n=0;

for (i=4; i

{for(j=2;j

if(i%j==0) break;//原程序这里了问题

if(j

}

*k=n; 

}

void main()

{

int m, n, zz[100];

printf( "\nPlease enter an integer number between 10 and 100: " );

scanf( "%d", &n );

fun( n, &m, zz );

printf( "\n\nThere are %d non-prime numbers less than %d:", m, n );

for( n = 0; n < m; n++ )

printf( "\n %4d", zz[n] );

}

扩展资料:

c语言需要说明的是:

1.一个C语言源程序可以由一个或多个源文件组成。 

2.每个源文件可由一个或多个函数组成。

3.一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。是整个程序的入口。  

4.源程序中可以有预处理命令(包括include 命令,ifdef、ifndef命令、define命令),预处理命令通常应放在源文件或源程序的最前面。

5.每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。结构体、联合体、枚举型的声明的“}”后要加“ ;”。

6.标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。

参考资料:

百度百科-c语言

回答2:

正常运行

#include
#include//exit()
#include//sqrt()
using namespace std;

bool isPrimeNumber(int x)//判断是否为素数
{
if(x<=1)
exit(1);
bool y=true;
if(x%2==0&&x!=2)
y=false;
int p=int(sqrt(double(x)));
for(int i=3;i<=p;i=i+2)
if(x%i==0)
{
y=false;
break;
}
return y;
}

void fun(int m, int *k, int xx[])
{
int l=0;
for(int i=2;i {
if(isPrimeNumber(i)!=true)
{
l++;
*(xx+l-1)=i;
}
}
*k=l;

}

int main()
{
cout<<"Input the m:";
int m;
cin>>m;
int* P=new int[m-2];//最多有m-2个非素数
int k;
fun(m,&k,P);
for(int i=0;i cout< cout<
delete []P;
return 0;
}
/*输出
Input the m:30
4 6 8 9 10 12 14 15 16 18
20 21 22 24 25 26 27 28*/

PS:建议用引用传值,这样更易操作
void fun(int m, int &k, int xx[])
{
k=0;
for(int i=2;i {
if(isPrimeNumber(i)!=true)
{
k++;
*(xx+k-1)=i;
}
}

}
调用格式为fun(m,k,P);

回答3:

算法有点问题
你这样每个数不管是不是素数都会被保存
比如2,
{if(i%j==0)xx[t]=i;t++;}条件同样成立

这样的话就会有很多数符合条件了吧 在条件里加上 && (i != j)这个条件

没有上机试 你试试看