| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 627 人关注过本帖
标题:用while 函数做这个程序结果为什么多出了5个数???
只看楼主 加入收藏
wxwceo
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-7-31
收藏
 问题点数:0 回复次数:7 
用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个数,为什么,不知道错在哪???

搜索更多相关主题的帖子: 函数 结果 
2007-08-02 11:34
anlogo
Rank: 2
等 级:论坛游民
威 望:1
帖 子:293
专家分:20
注 册:2007-7-20
收藏
得分:0 
原因在于循环内出现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");
}
2007-08-02 12:03
bupthehe
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-8-2
收藏
得分:0 
楼主的主要错误在于,循环语句上,
举个例子,假设是从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开始验证,但实际上却不是;

还有
2007-08-02 13:09
bupthehe
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-8-2
收藏
得分:0 

贴一下我的程序:
#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");

}

2007-08-02 13:30
lishizelibin
Rank: 2
等 级:论坛游民
帖 子:513
专家分:41
注 册:2007-5-10
收藏
得分:0 
回复:(bupthehe)贴一下我的程序:#include
你的是c还是c++,c也能调用c++的头?

惟有学习不断的学习!
2007-08-02 14:33
bupthehe
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-8-2
收藏
得分:0 
以下是引用lishizelibin在2007-8-2 14:33:05的发言:
你的是c还是c++,c也能调用c++的头?

应该能在TC下运行吧?

我用的是VC,呵呵

2007-08-02 14:34
luo123
Rank: 1
等 级:新手上路
威 望:2
帖 子:324
专家分:0
注 册:2007-4-13
收藏
得分:0 
以下是引用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)有什么作用?


[url=http://www..cn]电子编程[/url]
2007-08-03 17:06
bupthehe
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-8-2
收藏
得分:0 
回复:(luo123)以下是引用bupthehe在2007-8-2 13:30...
prime是个bool变量,他表示的是,如果他的直是1,就说明,这个数是素数,就printf出来,
2007-08-03 17:16
快速回复:用while 函数做这个程序结果为什么多出了5个数???
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018977 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved