输入一个表达式(运算符号只有加、减、乘、除和小括号,表达式是正确的,不需要检查),求表达式中最后一次计算的运算符号位置。比如表达式a*(b+c)-4+d最后一次运算的运算符号是在第10个位置的“+”,输出10。算法的思想是从表达式右边开始往左边查找,对碰到的字符分四种情况考虑:
1)若是运算符“+”,保存该位置并结束查找。
2)若是第一次碰到或“/”,保存该位置,若不是第一次碰到或“/”,继续往左边查找。
3)若是“)”,调用函数找到和它对应的位置,跳过该括号内容,继续往左查找。
4)若是非运算符,继续往左查找。
运行界面如下图:
(1)
表达式c*a+(a+b),最后一次计算的运算符号位置是。
(2)
实现上述功能的VB程序如下,根据算法将下列程序补充完整。
Function find(y As String, x As Integer) As Integer
‘该函数的功能是返回表达式y中和位于第x位置的“)”配对的位置,代码略
Do While Mid(y, x, 1) <> “(”
Loop
find = x
End Function
Private Sub Command1_Click()
Dim s As String, t As Integer, ans As Integer, p As Integer
s = Text1.Text ‘输入表达式
t = Len (s): p = 0
Do While t > 0
If Mid(s, t, 1) = “+” Or Mid(s,t, 1) = “-” Then ‘处理+、-
ans = t
Exit Do
End If
IfThen ‘处理*、/
ans=t
p=1 ‘用来标记乘号或除号已经出现了
End If
If Mid(s, t, 1) =“)”Then ‘处理括号
t = find(s, t)
End If
Loop
Label2.Caption=“最后计算的运算符号位置为”+Str(ans)
End Sub
答案: 【1】4
【1】x=x-1【2】(p=0) And (Mid(s, t, 1) = “*” Or Mid(s, t, 1) = “/”)【3】t = t-1