回 帖 发 新 帖 刷新版面

主题:我读不懂的一部分。望高手指教!

这是一个或许比较简单的程序吧但对于刚入门的我来说还是有点困难程序如下:求ax*x+b*x+c=0的根
  Private Sub Command1_Click()
Dim a As Integer, b As Integer, c As Integer
a = InputBox("请输入a的值")
b = InputBox("请输入b 的值")
c = InputBox("请输入c的值")
d = b * b - 4 * a * c
p = -b / (2 * a)
If d >= 0 Then
If d > 0 Then
r = Sqr(d)/(2 * a)
X1 = p + r
X2 = q - r
Else
X1 = p
X2 = p
End If
Print "x1="; X1, "x2="; X2
Else
q = Sqr(-d) / (2 * a)
Print "x1="; p; "+"; q; "i", "x2="; p; "-"; q; "i"
End If
我想知道r = Sqr(d)/(2 * a)和q = Sqr(-d) / (2 * a)
是什么意思啊?
还有Print "x1="; p; "+"; q; "i", "x2="; p; "-"; q; "i"
该怎么理解啊?
谢谢了,刚入门的我向大家真诚请教。
 
[em2]

回复列表 (共16个回复)

11 楼

不客气,我懂得也不多,同样是在这里学习的。不过,我连一级都没有考,二级就更……

12 楼


呵呵,不管怎样还是谢谢您了.[em2]

13 楼


有个问题想请教一下;
Private Sub Command1_Click()
  For a = 1 To 30
  For b = 1 To 30
  For c = 1 To 30
  If a * a + b * b = c * c Then
  Print "a="; a, "b="; b, "c="; c
  End If
  Next c
  Next b
  Next a
为什么把
  Next c
  Next b
  Next a换成next a
next b
next c就不能运行了呢?

14 楼

把所有的next后面的a,b,c什么的都去掉就可以了
晕,研究得还蛮深入的

15 楼

这就是循环嵌套的层次问题。
循环的基本规定有一条:必须从for作入口。在这个语句处理时,利用堆栈记录循环的基本数据(变量名、步长、终值)。
如果,不从这里入口,就会有麻烦:遇到next的时候,没有办法处理(即:改变当前值、是否中止)。
例如你所说的:
  For a = 1 To 30
  For b = 1 To 30
  For c = 1 To 30
  If a * a + b * b = c * c Then
  Print "a="; a, "b="; b, "c="; c
  End If
  next a
  next b
  next c
第一次执行到next a的时候就会跑到第一行,到第二行又一次建立b的循环,…………
本来应该是c循环到头,才循环一次b
b循环到头,才循环一次a
不按照嵌套规定,就会造成堆栈溢出,并且不能达到预期目的。所以才有那条规定。
有鉴于此,通常我们书写程序的时候采用缩进方式:
  For a = 1 To 30
      For b = 1 To 30
          For c = 1 To 30
              If a * a + b * b = c * c Then
                  Print "a="; a, "b="; b, "c="; c
              End If
          Next c
      Next b
  Next a
便于阅读。

16 楼


[em2]恩,懂了.您的解释很透彻.呵呵很感谢,可惜不能再给您打分了.

我来回复

您尚未登录,请登录后再回复。点此登录或注册