visual basic程序设计教程第四版答案(刘炳文)
VB编程:编写求解一元二次方程 ax2+bx+c=0 的过程,要求a、b、c及解X1、X2都以参数传送的方式与主程序交换数据,输入a,b,c和输出X1,X2的操作入放在主程序中。
解:一元二次方程 ax2+bx+c=0 的解通常有以下几种可能。
(1)当a=0时,不是二次方程,不进行处理。
(2)当b2-4ac=0时,方程有两个相等实根。
(2)当b2-4ac>0时,方程有两个不等实根。
(2)当b2-4ac<0时,方程有两个共轭实根。
求解一元二次方程的通用过程如下:
Sub equa(a As Single, b As Single, c As Single, x1, x2)
If Abs(a) <= 0.000001 Then
MsgBox "该方程不是二次方程"
Exit Sub
Else
disc = b * b - 4 * a * c
End If
If Abs(disc) <= 0.000001 Then
Flag = 1
x1 = -b / (2 * a)
x2 = -b / (2 * a)
ElseIf disc > 0.000001 Then
Flag = 2
x1 = (-b + Sqr(disc)) / (2 * a)
x2 = (-b - Sqr(disc)) / (2 * a)
Else
Flag = 3
realpart = -b / (2 * a)
imagpart = Sqr(-disc) / (2 * a)
x1 = realpart & "+" & imagpart & "i"
x2 = realpart & "-" & imagpart & "i"
End If
End Sub
在上面的过程中,首先判断a的值是否为0,如果为0则退出。如果不为0,则计算判别式b2-4ac的值,并把它赋予变量disc。这里应注意,disc是一个实数,由于实数在计算和存储会有一些小的误差,因此不能直接判断disc是否等于0,因为这样可能会出现本来是0的量,由于上述误差而被判定为等于0,从而导致结果错误。这里采取的办法是,判别disc的绝对值(Abs(disc))是否小于一个很小的数(例如10-6),如果小于此数,则认为disc=0。过程用realpart和imagpart分别代表实部和虚部。
上述过程中的Flag是一个标志变量,在窗体层定义,当该变量为1,2和3时,分别代表方程有两个相同实根,两个不同的实根和两个共轭复根三种情况。通过一个Function过程来返回这三种情况,该过程如下:
Function RootRet() As String
If Flag = 1 Then
RootRet = "方程有两个相等实根"
ElseIf Flag = 2 Then
RootRet = "方程有两个不等实根"
ElseIf Flag = 2 Then
RootRet = "方程有两个共轭实根"
End If
End Function
该过程中的Flag的值在Equa过程中赋予。其初值为0,在Form_load过程中设置,过程如下:
Private Sub Form_Load()
Flag = 0
End Sub
在下面的事件过程中调用上面的两个通用过程,输出一元二次方程的解:
Private Sub Form_click()
equa 2, 6, 1, x1, x2
Print
Print "a=2,b=6,c=1"
Print RootRet
Print "x1="; x1, "x2="; x2
Print
Flag = 0
equa 1, 2, 1, x1, x2
Print
Print "a=1,b=2,c=1"
Print RootRet
Print "x1="; x1, "x2="; x2
Print
Flag = 0
equa 1, 2, 2, x1, x2
Print
Print "a=1,b=2,c=2"
Print RootRet
Print "x1="; x1, "x2="; x2
Flag = 0
End Sub
该过程通过三组数调用Equa和RootRet过程。这里直接对a,b,c进行赋值,也可以用InputBox函数从键盘上输入。程序运行后单击窗体,结果如下图所示。
来源:visual basic程序设计教程第四版答案(刘炳文)
本文链接:http://www.wb98.com/vb1/post/vb_9.5.html
本站文章搜索: