某志愿服务APP用于整理浙江省内各城市志愿者服务工作情况,每个志愿者的数据用一个长度为8的字符串表示,例如“6 YFH 5 ”,6表示城市序号,YFH为志愿者姓名字母编写,5为参加志愿者服务次数。整理要求:先按城市序号从小到大排列;然后,同一城市的志愿者按参加志愿服务的次数降序排列。按上述要求,编写VB程序,功能如下:在列表List1中显示整理前的数据,单击“整理”按钮Command1,整理结果显示在列表框List2中,程序运行界面如图所示。
(1)
在VB表达式Command1_Click()中,Command1、Click、Command1_Click()依次表示(单选,填字母:A .方法名、属性名、事件名/B .对象名、事件名、事件处理过程名/C .函数名、对象名、方法名)
(2)
实现上述功能的VB程序如下,请在划线处填入合适的代码。
Const nc=10 '城市数
Const n=200000'志愿者总人数
Dim a(1 To n) As String'存储志愿者数据
Private Sub Form_Load()
'本过程读取志愿者数据,存入数组a并显示在列表框List1中,代码略
End Sub
Private Sub Command1_Click()
Dim city(1 To n) As Integer,pname(1 To n) As String,cs(1 To n) As Integer
Dim t As Integer,t1 As String
Dim b(1 To nc) As Integer '存储每个城市的报名人数
Dim index(1 To n) As Integer '定义索引数组
For i = 1 To n
city(i) = Val(Mid(a(i), 1, 1))
pname(i) =
cs(i) = Val(Mid(a(i), 7))
Next i
i = 1 '按城市序号升序排序
Do While i < n
k = i: i = n
For j = n To k + 1 Step -1
If city(j) < city(j -1) Then
t = city(j): city(j) = city(j -1): city(j -1) = t
t1= pname(j): pname(j) = pname(j -1): pname(j -1) = t1
t = cs(j): cs(j) = cs(j -1): cs(j -1) = t
End If
Next j
Loop
For i = 1 To n
index(i) = i
Next i
pos = 1 '相同城市志愿者按服务次数降序排序
For i = 1 To nc
For j = pos To pos + b(i) -2
k = j
For p = j + 1 To
If cs(index(p)) > cs(index(k)) Then k = p
Next p
t = index(j): index(j) = index(k): index(k) = t
Next j
pos = pos + b(i)
Next i
'最终结果显示在列表框List2中,代码略
End Sub
(3)
程序中加框处代码有错,请改正。
答案: 【1】B
【1】Mid(a(i), 3, 3)【2】i=j【3】pos+b(i)-1
b(city(i)) = b(city(i)) + 1