回 帖 发 新 帖 刷新版面

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

这是一个或许比较简单的程序吧但对于刚入门的我来说还是有点困难程序如下:求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个回复)

沙发

Sqr是平方根函数

板凳


谢谢,我知道了[em2]。可是后面print输出的又该如何理解呢?
还想讨教一下这个程序:是用for 循环来求n的阶乘

Private Sub Form_Click()
Dim n As Integer
n = InputBox("enter N:")
d = 1
For i = 1 To n
d = d * 1
Next i
Print n; "!="; d

End Sub
这个程序怎么运行不出来啊?是程序有问题吗?谢谢了



[em18][em18][em18][em18][em18]

3 楼

还有Print "x1="; p; "+"; q; "i", "x2="; p; "-"; q; "i"
在这里就是输出二次方程的解得语句。
p是实部,q是虚部
如果实部等于2,虚部等于3
那么输出结果就是
格式: "x1="; p; "+"; q; "i", "x2="; p; "-"; q; "i"
结果:  x1=2+3i                x2=2-3i

4 楼

第二个程序
d = d * 1
错了!
你想,给1(就是d的初值)乘1,一共乘n次会有什么结果?
正确的语句是
d = d * [color=red]i[/color]

另外,写程序,为了增强可读性,应当采取三个措施:
1、加写注释;
2、行首适当缩进;
3、提示采用汉语。

还有为了减少出错,对键盘输入要做必要的限制。

你的第二个程序写成下面的样子会好看些:
Private Sub Form_Click()
    Dim n As Integer
    Dim d As Long                                      '结成结果声明成较长的数据类型
    Do
        n = InputBox("输入阶乘的参数(1~12):")
    Loop Until n > 0 And n < 13                       '大于12的数可能会引起溢出、小于1阶乘没有定义,所以重新要求输入
    d = 1                                             '结成结果初始化
    For i = 1 To n                                    '从1开始
        d = d * i                                     '累乘
    Next i
    Print n; "!="; d                                  '输出到窗体
End Sub

5 楼


非常感谢[em1]
太感动了,竟然有这么好的解释。谢谢谢谢。。。。。。
[em21]

6 楼


          '大于12的数可能会引起溢出、小于1阶乘没有定义,所以重新要求输入

   为什么非要限制在12以内呢?引起溢出的含义是不是导致计算结果出错呢?[em18]

7 楼

因为用于保存结果的变量d是integer类型的,其范围是-32768~32767,12以上的阶乘大于32767,所以无法保存。
如果你想求更大数的阶乘,可以考虑更该d的类型为long,这样大约可以算到150多(具体多少忘了)。
如果不改变算法的话,仅靠更改d的类型是不行的,始终都有限制。

8 楼

12!=479001600 
13!=6227020800
在vb中精确表达整数的最大的格式就是long格式。该格式占用4个字节,有正负数之分,存储数据的范围是:-2147783648~2147483647。
13!的结成显然超出了long的存储范围。所以有如上限制。

对输入不合理数据的剔除、队会引起错误的特殊值的处理、对超运算范围的值的筛选,在编程中占用的代码行数,远比核心算法的代码要多得多。

9 楼

溢出的结果,你可以把do和loop两行去掉,运行时输入一个大于12的数,就知道了。

[size=5][color=green]纸上得来终觉浅,要知此事须躬行。[/color][/size]

10 楼

谢谢,真是遇到贵人了.我虽看不懂但是结合以前学的东西有点熟悉的感觉.谢谢您!
还有您的教诲,我会再好好看书的. 
再向您请教一下:我是一名正在准备计算机二级考试的在校生vb是我自学的,如果方便的话以后还会有很多问题向您老请教的!
谢谢

我来回复

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