我正在努力解决我的教授建议我尝试的这个(可选)问题。基本上,我的任务是编写一个程序,使用我自己的用户定义函数来显示从 2 到 10,000 的所有素数,以确定素数。这听起来很简单,但我在调试我的程序时遇到了很大的困难。出于某种原因,我的代码在结束前只显示 2 和 3。
#include<stdio.h>
//function declaration
int prime(int);
//main body
int main(void)
{
int x=2, y;
for (x=2;x<=30;x++)
{
y=prime(x);
if (y!=0)
printf("%d\n", x);
}
getchar();
return(0);
}
//function definition
int prime(int x)
{
int y;
for (y=2; y<=(int)sqrt(x); ++y)
{
if (x%y==0)
return 0;
}
if (y==(int)sqrt(x))
return 1;
}
如果 x 是素数,我的素数检查函数不是返回 1,而是返回一个随机的大数(2686xxx),但这不应该是一个问题,因为所有素数都返回 0。如果我运行类似:
if (y==0)
printf("%d\n", x);
我看到了所有非素数的列表。如果我运行类似:
printf("%d %d\n", x, y);
我看到了从 2 到 10,000 的所有整数的列表以及我的素数检查函数的结果(0 表示非素数,2686xxx 表示素数)。
为什么相反的(y!= 0)不显示素数列表?是什么导致我的代码在显示 2 和 3 后停止?为什么我的素数函数返回一个奇怪的整数而不是 1?最后,我仍然是一个初学者,但我如何才能写出更好的代码呢?我认为我没有违反任何公认的标准做法,但我怎样才能使我的代码更干净或更高效?
在此先感谢您的帮助!