定义变量的位置不同导致结果出问题,搞不明白原因

Immok 2013-12-03 08:02:55
为什么int flag=1放在for外面就出错了,结果只显示2 3,而把int flag=1放在for里面又正常了,显示100内的素数

#include<stdio.h>
int main()
{
int i,j;
int flag=1;
for(i=2;i<=100;i++)
{
for(j=2;j<i;j++)
{
if(i%j==0){flag=0;break;}
}
if(flag) printf("%d ",i);
}
return 0;
}
...全文
199 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Immok 2013-12-04
  • 打赏
  • 举报
回复
谢谢你们的解答吖,明白了,如果放在外面的话,一旦里面置0就不能再置回1了
ForestDB 2013-12-03
  • 打赏
  • 举报
回复
引用 2 楼 ns2250225 的回复:
那我放外面不是假定他是素数吗?
如果某个数是素数,那么这个flag就修改了,而且在下一次循环时没有得到重置。
图灵狗 2013-12-03
  • 打赏
  • 举报
回复
另外一个通用的方法是,遇到迷糊的地方在纸上画画图帮助理解。
引用 2 楼 ns2250225 的回复:
那我放外面不是假定他是素数吗?
derekrose 2013-12-03
  • 打赏
  • 举报
回复
遇到这种情况,就要调试了,快点学会调试可以节省很多时间
AnYidan 2013-12-03
  • 打赏
  • 举报
回复
lz 理解 for 语句的执行顺序码?
taoyage 2013-12-03
  • 打赏
  • 举报
回复
这样说吧,你把flag放在里面每次重新进行循环的时候flag都会进行一次flag=1,的初始化. 如果你把flag放在外面,你自己看你的循环体计算过程,i先是等于2; 而J<I的时候是不进行循环的. 所以第一次循环,根据if(flag)判断出正确,所以先输出了2;第二次i是3;第一个判断if(i%j==0)不成立, 所以又输出了一个3;但是当i=4的时候,if(i%j==0)的判断正确了,当正确的时候你给flag付了新 的值,所以flag变成了0; 接下来无论怎么循环flag都是0了对吧. 因此if(flag){printf("%d",i)};是不是不再进行输出了, if(flag)这个判断是指flag等于1的时候,他才会执行,而你的flag经过第三次循环的时候 已经被改为了0.
图灵狗 2013-12-03
  • 打赏
  • 举报
回复
注意是每个数,你放在外面那么只是对第一个数而言。
引用 2 楼 ns2250225 的回复:
那我放外面不是假定他是素数吗?
WayneXuan 2013-12-03
  • 打赏
  • 举报
回复
第三次循环,i=4,j=2时,i%j==0,flag被清零,如果flag=1在外面,flag将永远是0 应该改成 for(i=2;i<=100;i++,flag=1)
Immok 2013-12-03
  • 打赏
  • 举报
回复
那我放外面不是假定他是素数吗?
图灵狗 2013-12-03
  • 打赏
  • 举报
回复
从逻辑上来讲就是要放在里面的,意思是对于每个数i,都要先假定它是素数flag=1。
引用 楼主 ns2250225 的回复:
为什么int flag=1放在for外面就出错了,结果只显示2 3,而把int flag=1放在for里面又正常了,显示100内的素数 #include<stdio.h> int main() { int i,j; int flag=1; for(i=2;i<=100;i++) { for(j=2;j<i;j++) { if(i%j==0){flag=0;break;} } if(flag) printf("%d ",i); } return 0; }

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧