1. 某运动会100米比赛的晋级规则是根据个人年度最好成绩分组,采用交叉排序法,把成绩好的队员分开到各个小组,保证最优秀的队员能进入最后的决赛。100米比赛分两轮进行:预赛和决赛。预赛:共三个小组,每组8名运动员,取各组的前两名再从剩下18名运动员中取成绩最好的两名共8名进入决赛。决赛跑道分配规则是按预赛成绩的第1名到第8名分别对应第4、5、3、6、2、7、1、8跑道。某同学编写VB程序实现以下功能,点击“决赛名单”按钮将在Listl中显示姓名、预赛成绩和决赛的跑道。程序运行界面如图所示。请回答下列问题:

(1) 根据程序界面和代码,“决赛名单”按钮的“名称”属性值是
(2) 在程序划线处填入合适代码

Dim Group_ score(0 To 24) As Single

Dim Group _name(1 To 24) As String

Dim flag(1 To 24) As Integer

Dim Finals_ name(1 To 8) As String         '参加决赛名单

Dim Finals_ score(1 To 8) As Single        '参加决赛的预赛成绩

Dim First As Integer, second1 As Integer

Private Sub Form Load ()

    '读取三个小组的运动员姓名和预赛成绩(不存在相同成绩),分别存放在Group_ name

    '和Group_ score 数组,其中Group_ name(1) 到Group_ name(8) 、Group_ score(1) 到Group_ score (8)

    '是第1小组运动员的姓名和成绩。以此类推存放第2、3组的数据,并且对flag数组

    '的各元素赋初值为0。代码略

End Sub

Private Sub Comd1_Click ( )

    Dim i As Integer, j As Integer, Left As Integer, Right As Integer

    Dim Temp As Single ,Name As String , runway As String

    runway = "45362718”

    Group_ score(0) = 1000

    For i=1 To 3

    Call search(i, 8)

        Finals_ score(2 * i - 1) = Group_ score (First): Finals_ name (2* i- 1) = Group_ _name (First)

        Finals_ score(2 * i) = Group_ score (second1): Finals_ name(2 *i) = Group_ name (second1)

    Next i

    Call

    Finals_ score(7) = Group_ score (First) :Finals_ name(7) =Group_ name (First)

    Finals_ score(8) = Group_ score (secondl):Finals_ name(8) =Group_ name (second1)

    For i=3 To 8

        Left = 1

        Right =

        Temp = Finals_ score(i) : Name = Finals_ name(i)

        Do While Left <= Right

            m=(Left+Right)\2

            If Finals_ score(i) < Finals_ score(m) Then Right = m- 1

            Else Left=m+ 1

        Loop

        For

            Finals_ score(j) = Finals_ score(j- 1) : Finals_ name (j)= Finals_ name(j - 1)

        Next j

        Finals_ score(Left) = Temp :

        Finals_ name(Left) = Name

    Next i

    For i=1 To 8

        List1. AddItem Finals_ name(i) +””+ Str(Finals_ score(i))+””+ Mid(runway, i, 1)

    Next i

End Sub

Private Sub search(ByVal a As Integer, ByVal b As Integer)

    Dim j As Integer

    First=0:second1=0

    For j =

        If Group_ score(j) < Group_score(First) And flag(j) = 0 Then

            second1 = First

            First = j

        ElseIf Group_ score(j) < Group_ score (secondl) And flag(j) =0 Then

            second1 = j

        End If

    Next j

    flag(First) = 1: flag(second1) = 1

End Sub

(3) 加框处代码有错,请改正
【考点】
排序算法及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
真题演练
换一批
2. 现需要对某企业大型招聘活动面试成绩进行排名,面试数据包含专业编号(整数,顺序编号)、专业名称、姓名(字母编写)和面试分。整理面试数据的要求是:先按专业编号从小到大排列;然后,同专业的面试者按面试成绩从大到小排列(同分同名次)。按上述要求,编写一个VB程序,功能如下:在列表List1中显示整理前的数据,单击“整理”按钮Command1,整理结果显示在列表框List2中,程序运行界面如图所示。

(1) n个元素两两比较大小,需要比较的次数是
(2) 请在划线处填入合适的代码。

Const n=200      '报名人数

Const nz=10       '专业数

Dim zybh(1 To n) As Integer, zyname(1 To n) As String, sname(1 To n) As String, zymark(1 To n) As Integer

Dim b(1 To nz) As Integer           '存储每个专业的人数

Dim c(1 To nz) As Integer

Dim d(1 To n) As Integer

Dim q(1 To n) As Integer

Private Sub Form_ Load()

    '本过程读取专业编号、专业名称、姓名和面试分的数据分别存储在数组zybh,zyname,sname, zymark中,并在List1中显示,代码略

End Sub

Private Sub Command1_ Click( )

    Dim i As Integer, j As Integer, k As Integer, t As Integer, pos As Integer

    For i=1 To nz

        b(i)=0

    Next i

    For i=1 To n

        d(i)=0 : q(i)=0

    Next i

    For i=1 To n

        k= zybh(i)

        b(k)=b(k) + 1

    Next i

    k=1

    For i=1 To nz

        c(i)=k

        

    Next i

    For i=1 To n-1

        For j=i+1 To n

           If zybh(i)= zybh(j) And zymark(i) < <> zymark(j) Then

               If  Then

                   d(j)=d(j)+1

               Else

                   d(i)=d(i)+1

               End If

           End If

        Next j

    Next i

    For i=1 To n

        j=0

        Do While

            j=j+1

        Loop

        q(c(zybh(i))+d(i)+j)=i

    Next i

    For i=1 To n

        List2.AddItem "" & zybh(q(i)) & " " & zyname(q()) & " " & sname(q(i))& "" & zymark(q(i) & "" & d(q(i)) + 1

      Next i

End Sub

综合题 困难
3. 小明接受了一个任务:要对照赋分表完成对本次高三技术摸底考试的卷面成绩赋分,赋分表数据如下:

赋分成绩

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

(1) 从图中赋分表数据可知ffb(92)= 77,ffb(91)=77,ffb(90)=77。结合阅读程序,请问学号为“30311”的同学卷面成绩为77分,则其赋分成绩为 。
(2) 请在划线处填写合适的代码。

 ② ③ 

综合题 困难