首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-12-05 
定义变量的位置不同导致结果出问题,搞不明白原因为什么int flag1放在for外面就出错了,结果只显示2 3,而把

定义变量的位置不同导致结果出问题,搞不明白原因
为什么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;
  }

[解决办法]
第三次循环,i=4,j=2时,i%j==0,flag被清零,如果flag=1在外面,flag将永远是0
应该改成
for(i=2;i<=100;i++,flag=1)
[解决办法]
这样说吧,你把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.
[解决办法]

引用:
那我放外面不是假定他是素数吗?

如果某个数是素数,那么这个flag就修改了,而且在下一次循环时没有得到重置。

热点排行