某次技术考试后进行成绩处理,学生信息包括姓名、班级、成绩,要按班级从小到大,同一班级按成绩从高到低进行排序。按上述要求,编写一个VB程序,功能如下:在列表框List1中显示排序前的数据,单击“排序”按钮Command1,在列表框List2中显示排序后结果,程序运行界面如图所示。
(1)
将数组元素temp1(1)到temp1(500)分为10段,每段刚好存储一个班的学生成绩,10个班的学生数如下表所示。从数组temp1第1个元素开始依次存储这10个班的学生成绩,如1班学生成绩存储在temp1的第1个元素到第50个元素,则3班学生成绩存储在temp1的第个到第个元素(填数字)。
班级
1班
2班
3班
4班
5班
6班
7班
8班
9班
10班
人数
50
45
50
51
49
55
50
48
52
50
(2)
请在划线处填入合适的代码。
Const n = 500
'总学生数
Const m = 10
'总班级数Dim score(1 To n) As Integer
Dim stu_name(1 To n) As
Integer Dim class(1 To n) As
Integer Dim temp1(1 To n) As Integer
Dim temp2(1 To n) As Integer Dim
temp3(1 To n) As Integer Function
adj(s As String)
'本函数在字符串s 前添加若干空格,实现右对齐,代码略
End Function
Private Sub Form_Load()
'本过程读取学生姓名、班级和成绩数据分别存储在数组stu_name,class 和score 中,
'并在 List1 中显示,代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer,
k As Integer, t1 As Integer, t2 As String
Dim c(0 To
m + 1) As Integer
For i = 0 To m
c(i) = 0
Next i
For i = 1 To n
c(k) = c(k) + 1
Next i
For i = 1 To m
c(i) = c(i) + c(i - 1)
Next i
For i = n To 1 Step -1
k = class(i)
temp1(c(k)) = score(i)
temp2(c(k)) = stu_name(i)
temp3(c(k)) = class(i)
Next i '处理完毕 c(i+1)表示第 i 个班级的最后一个学生的存储位置
c(m + 1) = n
For k = 1
To m '对每一个班级学生成绩进行排序For i = c(k) + 1
To c(k + 1) - 1
For j = c(k + 1) To i + 1 Step -1
If Then
t1 = temp1(j): temp1(j) =
temp1(j - 1): temp1(j - 1) = t1
t2 = temp2(j): temp2(j) =
temp2(j - 1): temp2(j - 1) = t2
t1 = temp3(j): temp3(j) =
temp3(j - 1): temp3(j - 1) = t1
End If
Next j
Next i
Next k
For i = 1 To n
score(i) = temp1(i): stu_name(i) =
temp2(i): class(i) = temp3(i)
List2.AddItem adj(Str(stu_name(i))) &
adj(Str(class(i))) & adj(Str(score(i)))
Next i
End Sub
答案: 【1】96【2】145
【1】k = class(i)【2】c(k) = c(k) - 1【3】temp1(j) > temp1(j - 1)