#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语言
正常运行 cout<
#include
#include
#include
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
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);
算法有点问题
你这样每个数不管是不是素数都会被保存
比如2,
{if(i%j==0)xx[t]=i;t++;}条件同样成立
这样的话就会有很多数符合条件了吧 在条件里加上 && (i != j)这个条件
没有上机试 你试试看