在Form的Load中打
Combo1.AddItem "+"
Combo1.AddItem "-"
Combo1.AddItem "×"
Combo1.AddItem "÷"
Command1.Caption = "计算"
在Command1的Click中打
a = Val(Text1.Text)
b = Val(Text2.Text)
Select Case Combo1.Text
Case "+"
c = a + b
Case "-"
c = a - b
Case "×"
c = a * b
Case "÷"
c = a / b
End Select
MsgBox c
希望能帮到你~有什其他要求或问题可以追问我。
'这个程序是表达式运算程序,支持0-9数字输入,小数点,+,-,*,、四则运算及括号'expression函数式调用程序,输入为表达式字符串,返回值为结果字符串,在你的程序中只需要在等号处理程序中调用。若满意请及时采纳,谢谢
Dim MYNAME$(100)
Dim track$(100), oper$(100)
Dim trackp, operp As Integer
'按钮计算表达式
Private Sub Command1_Click()
Text2 = expression(Text1) '调用实例
End Sub
Private Function expression(a$) As String
p = 1: c$ = ""
trackp = 0: operp = 0 '栈初始化
MYNAME$(p) = "": plag = 0
For i = 1 To Len(a$)'扫描全输入
b$ = Mid$(a$, i, 1) '取一字符
If b$ = "+" Or b$ = "-" Or b$ = "*" Or b$ = "/" Or b$ = "(" Or b$ = ")" Then '运算符
If plag = 0 Then p = p + 1: plag = 1 '第一次遇到运算符则指针后移,并记录标志
MYNAME$(p) = b$: p = p + 1 '记录运算符,指针后移
MYNAME$(p) = "" '初始化下一段记录
Else
MYNAME$(p) = MYNAME$(p) + b$: plag = 0 '是数字,则记录,并复制标志
End If
Next i
p = p + 1 '加入#作为结束标志
MYNAME$(p) = "#"
s$ = ""
PUSHTRACK "#" '栈底标志
For i = 1 To p '循环扫描
a$ = MYNAME$(i) '取一个段
If a$ = "" Then
ElseIf a$ = "#" Then
Do
c$ = POPTRACK
If c$ = "#" Then Exit Do
PUSHOPER c$ 'd出内容进后缀缓冲
Loop
Exit For
ElseIf a$ <>"+" And a$ <>"-" And a$ <>"*" And a$ <>"/" And a$ <>")" And a$ <>"(" Then '不是运算符
PUSHOPER (a$) '直接进后缀缓冲
ElseIf a$ = "(" Then'是左括号
PUSHTRACK a$'直接进栈
ElseIf a$ = ")" Then'是右扩括号
Do
c$ = POPTRACK 'd出直到遇到左括号
If c$ = "(" Then Exit Do
PUSHOPER c$ 'd出内容进后缀缓冲
Loop
Else
c$ = POPTRACK
If c$ = "#" Then '空栈,直接写入
PUSHTRACK c$
PUSHTRACK a$
Else
Do
'是运算符,栈顶退栈
If ISP(c$) >= ISP(a$) Then '栈内运算符优先于该运算符
PUSHOPER c$
c$ = POPTRACK
Else
PUSHTRACK c$
PUSHTRACK a$
Exit Do
End If
Loop
End If
End If
Next i
For i = 1 To operp
s$ = s$ + oper$(i): If i <operp Then s$ = s$ + ","
Next i
s = 0: trackp = 0
For i = 1 To operp
a$ = oper$(i)
If Left$(a$, 1) >= "0" And Left$(a$, 1) <= "z" Then
PUSHTRACK a$
Else
a2$ = POPTRACK
a1$ = POPTRACK
If a$ = "+" Then
t = Val(a1$) + Val(a2$)
ElseIf a$ = "-" Then
t = Val(a1$) - Val(a2$)
ElseIf a$ = "*" Then
t = Val(a1$) * Val(a2$)
ElseIf a$ = "/" Then
t = Val(a1$) / Val(a2$)
End If
ss$ = LTrim$(Str$(t)): PUSHTRACK ss$
End If
Next i
expression = t
End Function
Private Sub PUSHTRACK(a$)
track$(trackp) = a$
trackp = trackp + 1
End Sub
Public Function POPTRACK$()
trackp = trackp - 1
POPTRACK = track$(trackp)
End Function
Private Sub PUSHOPER(a$)
operp = operp + 1
oper$(operp) = a$
End Sub
Public Function ISP(a$)
Select Case a$
Case "#"
ISP = 0
Case "("
ISP = 1
Case "*", "/"
ISP = 3
Case "+", "-"
ISP = 2
Case ")"
ISP = 4
Case Else
ISP = 0
End Select
End Function
画一个Text1用于输入第一个数,画一个Text2用于输入第二个数,画一个Combo1用于选择运算法则,画一个Command1点击它开始计算!在Form的Load中打Combo1.AddItem\"+\"Combo1.AddItem\"-\"Combo1.AddItem\"×\"Combo1.AddItem\"÷\"Command1.Caption=\"计算\"在Command1的Click中打a=Val(Text1.Text)b=Val(Text2.Text)SelectCaseCombo1.TextCase\"+\"c=a+bCase\"-\"c=a-bCase\"×\"c=a*bCase\"÷\"c=a/bEndSelectMsgBoxc希望能帮到你~有什其他要求或问题可以追问我。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)