问题存在于你的while语法:你写的while(x<=100);注意你写的while后面有个分号,其实这就已经构成一个while循环了。循环内容就是“;”表示什么也不做,而循环条件是1<=100为真的,程序运行到这里就进入死循环。。。从而出现你所说的“程序没有错,可是运行之后除了‘1到100之间的所有素数是:’这行字之外啥也没有,”
只要删除while(x<=100);后面的分号就可以了,即
#include<stdioh>
intprime(int);
main()
{
intx;
printf("1到100之间的所有素数是:\n");
x=1;//这里最好是从2开始的,否则会出现1也是素数的结果。或者
//你在intprime(int);函数中单独判断一下参数为1的特殊情
//形。
while(x<=100)//这里不要分号。但do-while语句后面是有分号的
{
if(prime(x))
printf("%d",x);
x=x+1;
}
}
intprime(inta)
{
inti;
for(i=2;i<=a/2;i++)
if(a%i==0)
return0;
return1;
}这个简单 之所以要J>=I 是因为一个数是要 除以从2到这个数减去1 才能判断它是否是素数的 如果在这个过程中有数字被这个数所整除 那么就break了 如果J>=i了 就证明一直没有break 就是证明这个数字一直没有被从2-这个数减1 之间的数所整除 也就是素数了#include<stdioh>
void
main()
{
int
sushu(int
a);
int
a,n;
printf("请输入数字:");
scanf("%d",&n);
a=&n;
sushu(a);
}
int
sushu(int
a)
{
int
i,k=0;
for(i=2;i<=a;i++)
if(a%i==0)
k++;
/判断是否能整除/
if(k==1)
printf("Yes!\n");
/当k=1时,则说明只有数本身可以整除自己/
else
printf("No!\n");
}求素数有很多算法 就是程序性能会有些区别 这是其中一种
#include<stdioh>
void main()
{
int n1,nm,i,j,flag,count=0;
do{
printf("Input START and END=");
scanf("%d%d",&n1,&nm); /输入求素数的范围/
}while(!(n1>0&&n1<nm)); /输入正确的范围/
printf("PRIME TABLE(%d--%d)\n",n1,nm);
if(n1==1||n1==2) /处理素数2/
{
printf("%4d",2);
n1=3;count++;
}
for(i=n1;i<=nm;i++) /判定指定范围内的整数是否为素数/
{
if(!(i%2))continue;
for(flag=1,j=3;flag&&j<i/2;j+=2)
/判定能否被从3到整数的一半中的某一数所整除/
if(!(i%j))flag=0; /若能整除则不是素数/
if(flag) printf(++count%15"%4d":"%4d\n",i);
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)