【排名次问题】小王编写了一个依据成绩计算名次的VB程序,成绩为0到100之间的整数。算法的基本思想:先统计每个分数的个数,然后按照分数从高到低依次计算每个有效分数(该分数的个数不为0)对应的名次分数相同时名次并列。最高分为第1名,该分数的名次与个数之和为下一个有效分数的名次,以此类推。程序用数组A存放每个分数对应的个数,数组B存放每个分数对应的名次。例如,下表中最高分100有2个,并列第1名,则分数96的名次为分数100的名次加上分数100的个数,即第3名。
分数
100
99
98
97
96
95
94
…
0
个数
(A数组)
2
0
0
0
1
0
3
…
0
名次
(B数组)
1
3
4
…
程序运行时,学生数据显示在列表框List1中,单击“计算”按钮Command1,计算结果显示在列表框List2中,程序运行界面如图所示。
实现上述功能的VB程序如下,请回答下列问题:
(1)
如表所示,若分数93的个数为2,则该分数对应的名次为。
(2)
请在划线处填入合适的代码
Dim
sName (1To50) As string ‘ 存放学生姓名
Dim
sScore (1To50) As Integer ‘ 存放学生分数
Dim
recCount As Integer ‘ 存放学生人数
Private
Sub Form_Load ( )
‘ 本过程从数据库中读取学生数据,存储在相应的变量中,并在List1中显示
‘ 代码略
End
sub
‘ 整数转换成长度固定的字符串
Function
ads (x As Integer, n As Integer) As string
Dim
sx As String, nx As Integer, i As Integer
sx =
Str (x):nx = Len (sx)
For i
=1 To n-nx
sx =
“”+ sx
Next
i
①
End
Function
Private
Sub Command1_Click ( )
Dim A
(0 To 100) As Integer ‘存放每个分数的个数
Dim B
(0 To 100) As Integer ‘存放每个分数的名次
Dim
mc As Integer, score As Integer, i As Integer
For i
= 0 To 100
A(i) = 0
Next
i
For i
= 1 To recount ‘ 计算每个分数的个数
②
Next
i
mc = 1
For i
= 100 To 0 step -1 ‘ 计算每个分数的名次
If A(i) <> 0 Then
B(i) = mc
③
End If
Next
i
List2.
clear
List2.
AddItem “姓名
分数 名次 ”
List2.
Additem “------------------------------”
For i
= 1 To recCount
score = sScore(i)
mc = B (sScore(i))
List2. AddItem sName(i) + ads ( score,5) + "第" + ads(mc,3) + "名”
Next
i
End
sub
① ② ③
答案: 【1】7
【1】ads=sx【2】A(sScore(i)) = A(sScore (i)+1)【3】mc=mc+a(i)