|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
/******************************************************************************************
1)关键问题:你函数中没有对a,b赋初值,但程序在申请变量空间时,其内部是有一个不可预料的值的,
而且这个值一般不会是0。如果你传过来的是素数,执行for循环后,b得不到值,将会是最开始声明变量
时程序自动给你的那个不可预料的值,只要那个值不是0,就能执行if(b)的内容,所以能正常返回输出2、
3。但是3之后,主函数传递给函数的4不是素数,那么通过for()循环,b将得到一个0,因为你没有人为对
它初始化,它将一直保持为0,这样if(b)永远不能执行,a也永远无法变成1,自然后面的就无法再输出。
2)解决办法:在声明变量a或b时,先给它们赋值b=1或a=1,养成好习惯。另外,b其实没有存在的必要,
只通过a来判断是否为素数就可以了。默认a=1,即默认是传递过来的是素数,如果遇到被整除的情况,再
将a=0,最后返回a即可。********************************************************************
******************************************************************************************/
#include <stdio.h>
int fun(int y)
{
int i;
for(i = 2;i <= (y/2); i++)
{
if(y % i == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int x = 300, s,count = 0 ;
// printf("????????:");
// scanf("%d",&x);
for(s = 2; s <= x; s++)
{
if(fun(s) == 1)
{
printf("%d ",s);
count ++;
}
if(count % 10 ==0)
{
printf("\n");
//count = 1; //没有这句话为什么会出现下面的情况,不理解
}
}
return 0;
}
本帖最后由 claws0n 于 2018-10-4 20:21 编辑
- #include <stdio.h>
- int fun(int y)
- {
- int i;
-
- for(i = 2;i <= (y/2); i++)
- {
- if(y % i == 0)
- {
- return 0;
- }
- }
- return 1;
- }
- int main()
- {
- int x = 300, s, count = 0 ;
-
- for(s = 2; s <= x; s++)
- {
- if(fun(s))
- {
- printf("%3d ",s);
- count++;
- if(count % 10 == 0)
- {
- printf("\n");
- }
- }
- }
- return 0;
- }
复制代码
|
|