当前位置: 代码迷 >> C语言 >> 用while 函数做这个程序结果为什么多出了5个数???
  详细解决方案

用while 函数做这个程序结果为什么多出了5个数???

热度:137   发布时间:2007-08-02 11:34:40.0
用while 函数做这个程序结果为什么多出了5个数???

分解100-200间的质数

#include <stdio.h>
void main()
{
int a,b;
a=100;
printf("\n");
while (a<200)
{
b=2;
while (b<=a/2)
{
if (a%b!=0)
b++;
else
a++;
}
printf("%d,\t",a);
a++;
}
printf("\n");
}

正确答案是21个数,我的却输出26个,多出119,123,135,143,147 这5个数,为什么,不知道错在哪???

搜索更多相关的解决方案: 函数  结果  

----------------解决方案--------------------------------------------------------
原因在于循环内出现a++的语句,自己考虑下
程序改了一下:
#include <stdio.h>
void main()
{
int a,b;
a=100;
printf("\n");
while (a<200)
{
b=2;
while (b<=a/2)
{
if (a%b!=0)
b++;
else
break;
}
if(b==a/2+1)
printf("%d,\t",a);
a++;
}
printf("\n");
}
----------------解决方案--------------------------------------------------------
楼主的主要错误在于,循环语句上,
举个例子,假设是从117开始验证的,那么B=2,3 4 5 6 7。。。。。
一直到b=13,这个时候117%13=0,此刻B的直是13了,这个时候WHILE的条件还满足(B〈117/2),所以继续循环,此刻,B=13,A=118,
那么118%B,B就从13 开始增加,一直到B=59,才被整除,此刻B=59,A++了一下,a=119,这个时候WHILE语句条件不满足,所以就跳出循环,执行PRINTF 119。

楼主的想法是想使B从2开始验证,但实际上却不是;

还有
----------------解决方案--------------------------------------------------------

贴一下我的程序:
#include <math.h>
#include<iostream>

void main()
{
int m,k,i,n=0;
bool prime;
for(m=101;m<=200;m=m+2)
{prime =true;
k=int(sqrt(m));
for (i=2;i<=k;i++)
if(m%i==0)
{prime=false;
break;
}
if(prime)
printf("%d,\t",m);

}
printf("\n");

}


----------------解决方案--------------------------------------------------------
回复:(bupthehe)贴一下我的程序:#include
你的是c还是c++,c也能调用c++的头?
----------------解决方案--------------------------------------------------------
以下是引用lishizelibin在2007-8-2 14:33:05的发言:
你的是c还是c++,c也能调用c++的头?

应该能在TC下运行吧?

我用的是VC,呵呵


----------------解决方案--------------------------------------------------------
以下是引用bupthehe在2007-8-2 13:30:03的发言:

贴一下我的程序:
#include <math.h>
#include<iostream>

void main()
{
int m,k,i,n=0;
bool prime;
for(m=101;m<=200;m=m+2)
{prime =true;
k=int(sqrt(m));
for (i=2;i<=k;i++)
if(m%i==0)
{prime=false;
break;
}
if(prime)
printf("%d,\t",m);

}
printf("\n");

}

请问if(prime)有什么作用?


----------------解决方案--------------------------------------------------------
回复:(luo123)以下是引用bupthehe在2007-8-2 13:30...
prime是个bool变量,他表示的是,如果他的直是1,就说明,这个数是素数,就printf出来,
----------------解决方案--------------------------------------------------------
  相关解决方案