yusfreedo 发表于 2008-9-3 08:13

请教一个简单问题

我用For循环和While循环分别编了2个求100以内奇数立方根和的过程,代码如下:
*100以内奇数立方根之和求法
SET TALK OFF
CLEAR
s=0
FOR i=1 TO 100
j=i^(1/3)
s=s+j
i=i+2
ENDFOR
?'100以内奇数立方根之和为:',s,'最大奇数为:',i-2
SET TALK ON
RETURN

*100以内奇数立方根之和求法
SET TALK OFF
CLEAR
s=0
i=1
DO WHILE i<100
  j=i^(1/3)
  s=s+j
  i=i+2
  ENDDO
  ?'100以内奇数立方根之和为:',s,'最大奇数为:',i-2
  SET TALK ON
  RETURN
  
  我运行了一下,2个过程的计算结果是不一致的。做了一个简单试验,好像用While循环做的是正确的。可是我找不出For循环的错误所在。请教各位,错在哪里?

qjbzjp 发表于 2008-9-3 09:12

I 多加了1,因为for循环还要加1
SET TALK OFF
CLEAR
s=0
FOR i=1 TO 100
j=i^(1/3)
s=s+j
i=i+1  
ENDFOR
?'100以内奇数立方根之和为:',s,'最大奇数为:',i-2
SET TALK ON

Tiger5392 发表于 2008-9-3 11:00

第一个程序,取消i=i+2,修改循环开始语句为for i=1 to 100 step 2

ibmlang_002 发表于 2008-9-3 11:10

在FOR循环中,以修改循环变量的方式来写程序,非常容易出错。楼上说的非常正确。

qjbzjp 发表于 2008-9-3 18:49

补充说明:I 多加了1,因为for循环还要加1
循环中得出的I=1,4,7……  而不是1,3,5……
改为i=i+1  &&(加上for循环加的1,实际i=2,结果就会一样了)

啸凡 发表于 2008-9-3 21:22

for ……Endfor默认步长(step)为1,而不是你设定有I=I+2.出现这样的问题,主要是搂猪对For……Endfor循环缺乏了解。

qjbzjp 发表于 2008-9-4 18:56

我想版主是无意敲出了同音错字了。
不论发帖者提的问题有多么简单幼稚、或令人不解,只要他不是有意捣乱,可以不理他,但不应鄙视他。
这样才会有更多的初学者和老师、VF高手参与,网站的人气才会旺。
楼主提出的问题,本来已经讨论明了,但版主的回帖中的一句“楼猪”似乎使热烈的讨论有所变味……
但愿版主确实敲错字了……

szy345 发表于 2008-9-4 20:30

[tk02] 应该是无意之举!

yusfreedo 发表于 2008-9-10 08:58

  感谢这么多人关注这个小问题。我后来看了一下帮助,改用step 2,问题就解决了。
  但是,有这么多人回复,我感觉真的很好,来这里没白来。有这么多人一起来学习研究,相信对各位都有裨益。有问题我会经常来请教的,感谢各位。

页: [1]

编程论坛