| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 999 人关注过本帖
标题:求助:if(i>=(int)sqrt(m))改为if(i=(int)sqrt(m))后的理解(已解决)
只看楼主 加入收藏
恭喜我发财
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-7-4
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:7 
求助:if(i>=(int)sqrt(m))改为if(i=(int)sqrt(m))后的理解(已解决)
题目:求100至200间的全部素数
#include<math.h>
main()
{
int m,i,n=0;
for(m=101;m<=200;m=m+2)
for(i=2;i<=sqrt(m);i++)
{

if(m%i==0)break;
  if(i>=(int)sqrt(m))
  {
   printf("%d ",m);
   n=n+1;
   if(n%5==0)printf("\n");
  }
}
getch();
}
======================
以上是完整的程序,
如果将该程序中的if(i>=(int)sqrt(m))改为if(i=(int)sqrt(m)),程序执行后,会输出像即121,169等非素数。
我是这样分析程序的:当m=121时,i<=11,利用m%i==0,可知,当程序执行到i=11时,break语句会跳出离他最近的for循环,不会再执行printf("%d ",m)这个语句,但是程序却输出了121这个非素数;但如果将if语句中的i=变为i>=,程序却会自动删除121,169等非素数,真的不明白这是怎么回事?望有心人指点。谢谢。
====================下面两位的解答还是没到题
当i=2时,自然会执行下面的语句,但if(i>=(int)sqrt(m))此条件则变为
if(2>=(int)sqrt(121)),明眼人一看,这条件是不可能成立的,故不会执行printf("%d ",m);当然也不可能输出121这个数字。 直至i变为11时,条件为真了,却跳出了for循环,真不明白为什么能输出个121
解答:if(i=(int)sqrt(m)),是赋值语句,故i=2时,会执行printf("%d ",m)这个语句,晕过头了。谢谢有心人啊。

[[it] 本帖最后由 恭喜我发财 于 2009-7-26 11:13 编辑 [/it]]
搜索更多相关主题的帖子: int sqrt 
2009-07-26 01:07
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:4 
= 和 == 是不同的。
2009-07-26 01:18
soler_z
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:28
专家分:130
注 册:2009-7-17
收藏
得分:4 
嗯,版主说的对,
条件语句里面非零即为真,
(121%2 )!=0
就往下执行,i=11非零,即执行里面的语句。。。
2009-07-26 01:38
恭喜我发财
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-7-4
收藏
得分:0 
=与==当然不同,但我提到的是=与>=,当i=2时,if(i>=(int)sqrt(m))此条件则变为
if(2>=(int)sqrt(121)),明眼人一看,这条件是不可能成立的,故不会执行printf("%d ",m);当然也不可能输出121这个数字。
2009-07-26 09:14
baofujun
Rank: 1
等 级:新手上路
帖 子:1
专家分:4
注 册:2009-7-26
收藏
得分:4 
好像不改也会有“121”啊!~
在仔细看一下运行结果!~

carrot
2009-07-26 10:06
恭喜我发财
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-7-4
收藏
得分:0 
我是在w-tc调试的,结果没有错,只是我所说的问题还未解决啊。
2009-07-26 10:36
恭喜我发财
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-7-4
收藏
得分:0 
在线等答案
2009-07-26 10:36
恭喜我发财
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-7-4
收藏
得分:0 
题目:求100至200间的全部素数
#include<math.h>
main()
{
int m,i,n=0;
for(m=101;m<=200;m=m+2)
for(i=2;i<=sqrt(m);i++)
{

if(m%i==0)break;
  if(i>=(int)sqrt(m))
  {
   printf("%d ",m);
   n=n+1;
   if(n%5==0)printf("\n");
  }
}
getch();
}
======================
以上是完整的程序,
如果将该程序中的if(i>=(int)sqrt(m))改为if(i=(int)sqrt(m)),程序执行后,会输出像即121,169等非素数。
我是这样分析程序的:当m=121时,i<=11,利用m%i==0,可知,当程序执行到i=11时,break语句会跳出离他最近的for循环,不会再执行printf("%d ",m)这个语句,但是程序却输出了121这个非素数;但如果将if语句中的i=变为i>=,程序却会自动删除121,169等非素数,真的不明白这是怎么回事?望有心人指点。谢谢。
====================下面两位的解答还是没到题
当i=2时,自然会执行下面的语句,但if(i>=(int)sqrt(m))此条件则变为
if(2>=(int)sqrt(121)),明眼人一看,这条件是不可能成立的,故不会执行printf("%d ",m);当然也不可能输出121这个数字。 直至i变为11时,条件为真了,却跳出了for循环,真不明白为什么能输出个121
解答:if(i=(int)sqrt(m)),是赋值语句,故i=2时,会执行printf("%d ",m)这个语句,晕过头了。谢谢有心人啊。
2009-07-26 11:15
快速回复:求助:if(i>=(int)sqrt(m))改为if(i=(int)sqrt(m))后的理解(已解决) ...
数据加载中...
 
   



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

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