某校组织文艺汇演比赛,共20个班级参加,每5个班级划为一个团队,1~5班为甲队,6~10班为乙队,11~15班为丙队,16~20班为丁队。20个班级根据抽签的顺序依次上台,共有6位评委为每个班级的表演打分,去掉一个最高分和一个最低分,剩下4个分数的平均值叩为该班最终得分。现要求编写VB程序对比赛数据进行汇总,左侧List1中显示原始数据,点击“汇总”按钮后,在List2中按顺序输出班级号以及对应计算得到的最终得分,并在Label3中输出每个团队的总分,程序运行界面如图所示。
(1)
如上图所示数据,若要通过冒泡排序对3班的6个得分从大到小排序,需要交换的次数是次。
(2)
请在划线处填入合适代码。
Const nc=20 ‘班级总数
Constn= 8
Dim a(1 To n*nc) As Single
Dim sum(1 To 4) As Single ‘存储每个团队的总分
Dim q(1 To nc) As Integer ‘存储演出时班级出现的顺序
Private Sub Form_Load()
‘本过程读取班级号和6个打分情况存储到a数组中。a(1)存储第一个上台的班级号,a(2)~a(7)中存储该班的6个得分,a(8)预留出来,用来存储该班最终得分,初值为0;a(9)存储第二个上台的班级号,a(10)~a(15)中存储第二个上台班级的6个得分,a(16)预留,用来存储该班最终得分,初值为0,以此类推。在List1中输出班级号和6个得分,代码略。
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, k As Integer, s As String
For i=1 To n* nc ‘将每个班的6个得分排序
If i Mod n<>0 And i Mod n<>1 Then
k=i
For j=i+1 To
If a(j)>a(k) Then k=j
Next j
If k<>i Then t=a(k): a(k)=a(i): a(i)=t
End If
Next i
For i=1 To n* nc Step n ‘计算每个班的最终得分,存入相应位置
a(i+n-1)=(a(i+2)+a(i+3)+a(i+4)+a(i+5))/4
Next i
For i=1 To n* nc Step n ‘计算每个团队总分
Next i
For i=1 To n* nc Step n
k=a(i)
q(k)=i
Next i
For i=1 To nc
List2.Addltem Str(i)&" "&
Next i
s="甲:"+Str(sum(1))+"乙:"+Str(sum(2))+"丙:"+Str(sum(3))+"丁:"+Str(sum(4))
Label3.Caption=s
End Sub
答案: 【1】9
【1】((i-1)\n+1)*n-1【2】sum((a(i)-1)\5+1)=sum((a(i)-1)\5+1)+a(i+n-1)【3】Str(a(q(i)+n-1))