小明接受了一个任务:要对照赋分表完成对本次高三技术摸底考试的卷面成绩赋分,赋分表数据如下:
赋分成绩 | 100 | 99 | 98 | 97 | 96 | …… | 42 | 43 | 41 |
卷面成绩 | 90 | 88 | 86 | 85 | 83 | …… | 30 | 30 | 30 |
赋分成绩最低40分,卷面成绩低于30分则赋0分。赋分表数据存人数组ffb,如ffb(100)=90,则表示卷面成绩90时,赋分100分。小明设计的赋分具体步骤如下:
第一步:对学生的卷面成绩进行降序排序;
第二步:对照赋分表,对每-名学生卷面成绩进行赋分。
小明编写了VB赋分程序,在列表框List1中显示学号和学生卷面成绩,在列表框List2中显示赋分表数据,单击按钮“我要赋分”后,按照之前的学号顺序在列表框List3中显示学号、卷面成绩和赋分成绩。VB程序界面如下:
Const m = 10000
Dim xh(1 to 10000) As String '存储学生学号
Dim cj(1 To 10000) As Integer '存储学生卷面成绩
Dim ffcj(1 To 10000) As Integer '存储学生赋分成绩
Dim ffb(40 To 100) As Integer '存储赋分表数据
Private Sub Form_ Load()
'读入m名学生的学号、技术考试卷面成绩分别存人数组xh和cj中,并在List1中显示;读入赋分表成绩存人数组ffb中,代码略
End Sub
Private Sub Command1_ Click()
Dim a(0 To 100) As Integer
Dim b(0 To 100) As Integer
Dim c(1 To 10000) As Integer
List2.AddItem "赋分成绩卷面成绩"
For i=100 To 40 Step-1 '在List2显示赋分表数据
List2. AddItem Str(i)+ "" +Str( ffb(i))
Next i
For i=1 To m '统计各分数段的人数
①
a(t)=a(t)+1
Next i
j= 100
Do While a(j)=0
j=j-1
Loop
b(j)=1
For k=j- 1 To 0 Step -1
b(k)=b(k+1) + a(k+ 1)
Next k
For i=1 To m
t=cj(i)
c(b(t))=i
②
Next i
p=1:q= 100
Do While p<=m
If cj(c(p))> = ffb(q) Then
③
p=p+1
ElseIf q=40 Then
ffcj(c(p))=0
p=p+1
Else
q=q-1
End If
Loop
List3. AddItem "学号卷面成绩赋分成绩"
For i=1 To m
List3. AddItem xh(i)+" " + Str(cj(i)) + ""+Str(ffcj(i))
Next i
End Sub