你说的我都知道 我问的不是执行的流程 我问的是计算的过程
追答把代码简单修改下,就可以看到具体计算过程了。
SET talk OFF
FOR m=3 TO 10
n=INT(SQRT(m))
? ' '
??'循环m='+ALLTRIM(STR(m))
??',m平方根='+ALLTRIM(STR(SQRT(m),4,2))
??',当前n=取整(平方根(m))='+ALLTRIM(STR(n))
FOR i=2 TO n
IF m%i=0
EXIT
ENDIF
ENDFOR
??',当前i='+ALLTRIM(STR(i))
IF i>n
?'满足条件,打印m结果'
??m
ELSE
?'--不满足条件,不打印m。'
ENDIF
? ' '
ENDFOR
--------------------
显示结果如下
--------------------
---------------------
i是怎么在m等于5 7的时候加一变成3了??我想知道这个
追答在每一次M变化时,变量i,默认都从2开始,看下面代码——
FOR i=2 TO n &&i从2开始到n,每次加一,循环
IF m%i=0 &&当m除以i,余数等于0,执行exit命令,退出循环
EXIT &&退出for i=2 to n的循环
ENDIF &&if结束
ENDFOR &&for 循环结束
----------
m=5,加一后是6;i从2开始,条件判断——“当m除以i,余数等于0”(6除2,余0)——于是程序执行exit,这个时候i=2。
-----------
m=7,加一后是8;i从2开始,条件判断——“当m除以i,余数等于0”(8除2,余0)——于是程序执行exit,这个时候i=2。
------
就是这样了。
建议用网页模式看吧,清楚点,手机显示有问题。
追问n每次都是2 i就算再加他也不可能超过n 也只能加到二把
追答明白你的意思了。
你认为for i=2 to n这个循环,i是怎么都不会超过n,所以i>n的条件永远是不会被满足的。(这个理解有误)
-----------
拿5来说:
m=5,n就算出来=2;
i从2开始算:
第一次循环,i=2(5%2,余1,不执行exit),循环继续执行,i=i+1=3(就是这里了)
第二次循环,i=3,i>n(2),循环继续执行条件不满足,循环结束(保持i=3)。
判断i(3)>n(2),打印m(5)。
类似,3,7。
------------
这里面有个程序的循环处理细节问题,{for i=2 to n ...中间(exit退出)...到结束}——这个程序结构,如果出现exit没有被执行到的情况下,i是从2一直加1加到n——当最后一次,会出现 i=n+1(就是这里!!),循环回到for i=2 to n这句,判断,i=n+1>n,循环结束,这时(i=n+1)就是i的最后值)。
接着,程序进入{if i>n}的判断,这时就会出现条件成立,打印m当前值的结果。
谢谢你 你真是个大好人啊