C语言求1到100间所有素数,程序没有错,可是运行之后除了“1到100之间的所有素数是:”这行字之外啥也没有,怎么回事?
#include <stdio.h>
int prime(int);
main()
{
int x;
printf("1到100之间的所有素数是:\n");
x=1;
while(x<=100);
{
if(prime(x))
printf("%d ",x);
x=x+1;
}
}
int prime(int a)
{
int i;
for(i=2;i<=a/2;i++)
if(a%i==0)return 0;
return 1;
}
楼上说的不对,其实不是什么IF-ELSE语句的问题,本来就是应该for循环内运行if(a%i == 0) 语句的,return 1; 语句是在for 循环外的,表示没有找到a的约数时才return 1 ;也即表示a为素数。这里没什么问题的,
问题存在于你的while语法: 你写的while(x<=100); 注意你写的while后面有个分号,其实这就已经构成一个while循环了。循环内容就是“;”表示什么也不做,而循环条件是1<=100为真的,程序运行到这里就进入死循环。。。从而出现你所说的“程序没有错,可是运行之后除了‘1到100之间的所有素数是:’这行字之外啥也没有,”
只要删除while(x<=100);后面的分号就可以了,即
#include <stdio.h>
int prime(int);
main()
{
int x;
printf("1到100之间的所有素数是:\n");
x=1; //这里最好是从2开始的,否则会出现1也是素数的结果。或者
//你在int prime(int);函数中单独判断一下参数为1的特殊情
//形。
while(x<=100) //这里不要分号。但do-while语句后面是有分号的
{
if(prime(x))
printf("%d ",x);
x=x+1;
}
}
int prime(int a)
{
int i;
for(i=2;i<=a/2;i++)
if(a%i==0)
return 0;
return 1;
}
问题存在于你的while语法: 你写的while(x<=100); 注意你写的while后面有个分号,其实这就已经构成一个while循环了。循环内容就是“;”表示什么也不做,而循环条件是1<=100为真的,程序运行到这里就进入死循环。。。从而出现你所说的“程序没有错,可是运行之后除了‘1到100之间的所有素数是:’这行字之外啥也没有,”
只要删除while(x<=100);后面的分号就可以了,即
#include <stdio.h>
int prime(int);
main()
{
int x;
printf("1到100之间的所有素数是:\n");
x=1; //这里最好是从2开始的,否则会出现1也是素数的结果。或者
//你在int prime(int);函数中单独判断一下参数为1的特殊情
//形。
while(x<=100) //这里不要分号。但do-while语句后面是有分号的
{
if(prime(x))
printf("%d ",x);
x=x+1;
}
}
int prime(int a)
{
int i;
for(i=2;i<=a/2;i++)
if(a%i==0)
return 0;
return 1;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2009-11-06
if(a%i==0)return 0;
return 1;
这里应该要if-else搭配
改为
if(a%i==0)return 0;
else return 1;
还有,看了几次程序,总觉得
x=x+1;有问题,你都改改,不行的话我就没办法了
return 1;
这里应该要if-else搭配
改为
if(a%i==0)return 0;
else return 1;
还有,看了几次程序,总觉得
x=x+1;有问题,你都改改,不行的话我就没办法了
第2个回答 2020-02-19