VB的题目,急!!

来源:百度知道 编辑:UC知道 时间:2024/05/19 08:44:48
计算=1+1/2+1/4+1/7+1/11+1/16+1/22+1/29+K当第i项的值〈0.0001时结束。
Private Sub Form_click()
Dim s As Single, n As Single, a As Integer, x As Integer
s = 0
x = 1
a = 1
n = 1
Do While n > 0.0001
n = n + 1
x = x + n
a = 1 / x
s = s + a
Loop
Print "s="; s
End Sub
这个是我编的,题目如上,结果一运行说我溢出,我哪里弄错了,帮我看看吧
回答的时候顺便告诉我怎么改吧

还有一个错的地方是你的do……loop循环结束条件不对,n值一直在增加,越循环,值越大,则循环无法停止,造成各个变量类型溢出,于是根本解决的方法是把循环结束条件满足,条件就是当第i项值<0.0001即可结束循环,那么这里的第i项应该是指a<0.0001
只要把Do While n > 0.0001 改为 Do While a > 0.0001 就可以了
还有一个错误的地方是a应该说明为single,否则无论怎么算s都只有为0了。

integer的范围是-32768 - 32767 .当你的x循环到大于32767的时候就overflow了

Do While n > 0.0001 改成Do While n < 0.0001