我前后把isprime的赋值放在for循环内和开头,发现输出结果不同。尤其是在开头赋值,输出结果仅有2和3。请问这是什么原因?
(顺变问下vs有没有好的排版插件,我有强迫症每次自己调就很浪费时间)
这两个的不同之处在于
当isprime的初始化放在开头时,isprime为全局变量,那么只有到程序结束isprime才会被释放,也就是说在整个程序运行时,isprime的变化是”累加“的,比如isprime先是为1,后改变为0,如果不在改变isprime的值那么isprime在整个程序运行时都不会改变。所以只能输出2和3
=====
当isprime放在for循环中时,每一次的循环都会将isprime初始化为1,那么即使后续没有改变isprime的语句,在下一次循环进行时isprime的值都会被重置为1,那么就可以输出其他不同结果
你放在循环外面,他的值变成0后永远不可能再出现1.
放在里面每次计算他的值都先是1,然后判断是不是变成0
简单来说,你每一次判断质数,都要重置isprime的值,不然每次用过的值会使下一次循环出错
这里的 isprime 是作为一个标志位用的,就是每次找到 x%i == 0 的时候,让 isprime = 0 记录下来,for() 循环里 x 从 2 增加到 100,对每一个 x 的值都要判断一次,所以每次需要把 isprime 先置 1 , 然后去判断 x % i ==0 ,如果 ==0 就改变 isprime的值为 0 ,否则 isprime 值为 1 不变。当把 isprime 的置位放到 for() 循环外面时,对第一个 x 的判断是准确有效的,从第二个 x 的判断开始,就不准确了,因为不知道现在 isprime 的值是 0 还是 1,失控了。