排序算法及程序实现 知识点题库

【加试题】自从“7选3”计入高考成绩,让考生告别“一考定终身”的窘困。各校均组织学生进行了7选3高考选考科目的选课工作。某校政治、历史、地理、物理、化学、生物、技术7科的选考人数如下表所示:

科目

政治

历史

地理

物理

化学

生物

技术

人数

193

151

112

186

167

103

179

设计VB程序,实现功能:将每个科目的选课人数按照选考人数降序排序后输出。其中,科目名称存放在数组a(i)中,人数存放在数组b(i)中。

程序运行界面设计如图所示,左边列表框List1是显示科目名称和选课人数,单击“排序”按钮Command1后,在右边的列表框List2中显示排序后的科目名称和选课人数。

Command1的处理事件过程如下,但加框处代码有错,请改正。

Private Sub command1_click()

Dim a(1 To 7)  As String

Dim b(1 To 7)  As Integer

Dim i As Integer, j As Integer, p As String, q As Integer

For i = 1 To 7

   List1.AddItem a(i) + " " + Str(b(i))

Next i

For i = 1 To 6

   k = i

   For j = i + 1 To 7

   

Next j

   If i <> k Then

     p = a(i): a(i) = a(k): a(k) = p

   End If

Next i

For i = 1 To 7

   List2.AddItem a(i) + " " + Str(b(i))

Next i

End Sub
   ②

【加试题】学校组织评委对竞选文明班级的5个班级打分,分数依次是85,81,93,95,82,若采用冒泡排序算法对其进行排序,第一遍排序的结果是95,85,81,93,82,则第二遍的排序结果是(   )
A . 95,93,85,82,81 B . 95,93,81,85,82 C . 95,85,93,81,82 D . 95,93,85,81,82 
活动课上,n个学生要两两组队进行拔河比赛,要求每个小组总体重不超过120kg,小林想知道最多可以组成多少个队伍,并希望得到可行的组队方案。于是设计了如下界面的程序,在文本框Text1中输入n 个学生的体重(数字之间用逗号隔开),单击“队伍”按钮Command1后在标签Label1上显示最多可组队数量,同时在列表框List1输出方案。

实现上述功能程序如下,在横线处填入合适的代码。

Dim n As Integer

Dim a(1 To 50) As Integer

Sub makedata(s As String)     ‘该过程实现将输入的体重分别存入数组a中

Dim in As Long, x As Long, c As String, i As Integer

m=Len (s) : n=0

For i=1 To m

 c=Mid(s, i, 1)

 If c >=“0” And c <=“9” Then

 

  x=x+Asc(c)-Asc(“0”)

 Else

  If x > 0 Then n=n+1: a(n)=x

  x=0

 End If

Next i

n=n+1: a(n)=x

End Sub

Private Sub Command1_Click()

Dim s As String, i As Integer, j As Integer, t As Integer

Dim cnt As Integer, st As Integer, ed As Integer

s=Text1.Text Call makedata(s)      ‘调用过程

For i=1 To n-1     ‘实现降序排序

For j=n To i+1 Step-1

IfThen

a(j)=a(j)+a(j-1) : a(j-1)=a(j)-a(j-1) :

  End If

 Next j

Next i

‘下列程序段实现计算最多可组队伍

cnt=0: st=1: ed=n

Do While st < ed

 If a(st)+a(ecl) <=120 Then

  List1. AddItem Str(a(st))+“和”+Str(a(ed))+“组队”

  cnt=cnt+1

  st=st+1

 

 Else

  st=st+1

 End If

Loop

Label2. Caption=“最多可以组”+Str (cnt)+“组队伍”

End Sub

编写一个VB程序,实现程序功能如下:随机产生10个1~20之间的整数存放在数组a,在列表框List1中显示,单击“排序”按钮Command1后,在列表框List2中显示升序排序后的结果。具体算法描述如下:引入数组index,index(i)存储i位置应放置的数组元素的下标。排序完毕,a(index(i))成为升序序列,即a(index(1))≤a(index(2))≤a(index(3))≤……≤a(index(i))。在数组a的所有元素中找出最小元素,将其所在位罝存放在数组元素index(1)中,然后在余下的元素中找出最小元素,将其所在位置存放在数组元素index(2)中,以此类推,直到完成所有元素排序。如n=5时,数组a排序后各变量值如下表所示。

i

1

2

3

4

5

a(i)

17

19

9

13

6

index(i)

5

3

4

1

2

a(index(i))

6

9

13

17

19

实现上述功能的VB程序如下,但加框处代码有错,请改正。

Const n = 10

Const maxn = 20

Dim a(1 To n) As Integer, index(1 To n) As Integer, flag(1 To n) As Boolean

Private Sub Form_Load()

Dim i As Integer

Randomize

For i = 1 To n

 flag(i) = False

 a(i) = Int(Rnd() * maxn) + 1

 List1.AddItem Str(a(i))

Next i

End Sub

Private Sub Command1_Click()

Dim i As Integer, j As Integer

Dim k As Integer

For i = 1 To n

 For j = 1 To n

  If flag(j) = False Then k = j: Exit For

 Next j

 For m = k + 1 To n

  If Then k = m     ‘⑴

 Next m

 index(i) = k

 flag(k) = True

Next i

For i = 1 To n

 List2.AddItem      ‘⑵

Next i

End sub

 ⑵ 

小王基于选择排序算法编写了一个VB程序,功能如下:读取若干数据依次存储在数组a中,并将数据分段排序,每段数据的元素个数及排序的次序要求依次存储在数组b中。如图,在文本框Text1中显示数组a的原始数据,在文本框Text2中显示每段数据的元素个数及排序次序要求(0表示升序、1表示降序);单击“排序”按钮Command1,根据要求输出对每段数据进行排序的结果。实现上述功能的VB程序如下:

Dim n As Integer

Dim a(1 To 100) As Integer

Dim b(1 To 100) As Integer

Private Sub Form Load()

‘读取若干数据依次存储到数组a中,并将数据元素的总个数存储到变量n中。

‘将每段数据的元素个数及排序的次序依次存储到数组b中;

‘b(1)、b(2)分别存储第1段数据的元素个数、排序的次序,

‘b(3)、b(4)分别存储第2段数据的元素个数、排序的次序,.....

“代码略。

End Sub

Private Sub Command1_Click())

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

    Dim pb As Integer, endpos As Integer

    pb=1: endpos =b(1)

    For i=1 To n-1

        If i=endpos Then

            pb=pb+2:i=endpos+1

               ①  

        End If

        k=i

        For j =i+1 To endpos

            If  Then k=j     ‘⑵

        Next j

        If k<>i Then

                ②  

        End If

    Next i

    Text3.Text =""     ‘⑷

    For i=1 To n

        Text3.Text=Text3.Text + Str(a(i))

    Next i

End Sub

  1. (1) 观察代码,排序后的数据输出在对象中(填对象名)。
  2. (2) 程序中加框处代码有错,请改正。
  3. (3) 为了实现上述功能,请在划线处填写合适的代码。

     ② 

  4. (4) 若程序运行时,读取了100个整数存储到数组a中,数组b各元素的值依次为“30,1,20,0,40,0,10,1”,则程序运行到(4)处代码时,endpos的值为
采用排序算法对数组a中的6个数据“10,8,7,2,15,9”进行排序,部分程序如下:

For I = 1 To 5

  t = 1

  For j = i + 1 To 6

    If a(t) < a(j) Then

    If i <> t Then

      temp = a(i)

    a(i) = a(t)

    a(t) = temp

    End If

  Next j

Next i

下列描述正确的是(  )

A . 程序为冒泡排序升序,实线框中的语句共执行了5次 B . 程序为冒泡排序降序,实线框中的语句共执行了7次 C . 程序为选择排序升序,实线框中的语句共执行了5次 D . 程序为选择排序降序,实线框中的语句共执行了7次
编写“区间覆盖”程序,实现如下功能:输入数轴上的若干个封闭区间范围(均为正整数且左 坐标 < 右坐标),单击“统计”按钮,计算覆盖所有区间所需的数据点的个数。

例如:依次输入以下区间:[2 5],[4 7],[1 4],[5 9],[4 5],[2 4],数轴如下:

 坐标点“4”覆盖了[2 5],[4 7],[1 4],[4 5],[2 4]共5个区间,坐标点“9”覆盖了[5 9]区间,所以覆盖这6个区间所需的坐标点数为2个。

程序运行界面如图所示。实现上述功能的VB代码如下:

Dim n As Integer

Dim a(1 To 100) As Integer

Private Sub Input_Click()

'输入n个正整数区间,依次存放到数组

'a(1)到 a(2*n)中,并在List1中显示

'代码略

End Sub

Private Sub Count_Click()

  Dim right As Integer, t As Integer, k As Integer

  Dim tmp As Integer, i As Integer, ans As Integer

   

      tmp = a(k): a(k) = a(t): a(t) = tmp

      tmp = a(k + 1): a(k + 1) = a(t + 1): a(t + 1) = tmp

    End If

  Next i

   ‘改错

  ans = 1: t = 3

  Do While t < 2 * n

    If    ①    Then

      If a(t + 1) < right Then right = a(t + 1)

    Else

      ans = ans + 1

      right = a(t + 1)

    End If

          ②   

  Loop

  Text3.Text = Str(ans)

End Sub

请回答下列问题:

  1. (1) 根据程序可知,“统计”按钮的对象名为
  2. (2) 根据虚线框中算法可知,如示例所示输入的数据[4 7]和[4 5],在排序后,这两组数据在数组 中的前后位置顺序是否发生改变? 。(填:是/否)
  3. (3) 程序中加框处代码有误,请改正。
  4. (4) 请在划线①②处填入合适的代码。

     ②

某校运动会跳远比赛,共m位(m≤20)选手参加该比赛,第一轮初赛每位选手跳3次,然后按每位选手的最好成绩,按高到低取前k名(若最好成绩相同,则名次相同)进入第二轮复赛。

每位选手的成绩数据记录规则如下:成绩数据以“;”(分号)结尾,中间用“/”(斜杠)分隔,例如:“王一超/4.10/-/3.78;李雨歆/3.87/3.85/4.20;”,表示第一位选手王一超,第一次成绩4.10米,第二次成绩无效(用“-”表示),第三次成绩3.78米,最好成绩为4.10米。第二位选手李雨歆,3次成绩分别是3.87米、3.85和4.20米,最好成绩为4.20米。

小强编写VB程序实现上述功能:程序运行时,读取所有选手数据保存在变量cj中,并显示在列表框List1中。在文本框Text1中输入进入第二轮的名次,单击“第二轮复赛名单”按钮 Command1,对数据进行统计分析,并在列表框 List2 中显示进入复赛的选手名单和最好成绩,程序运行界面如图所示,请回答下列问题。

  1. (1) 代码“List2.AddItem”中的AddItem是(单选,填字母:A .事件名 / B .方法名 / C .属性名)。
  2. (2) 实现上述功能的 VB 程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

       Dim cj As String, xm(1 To 20) As String, maxcj(0 To 20) As Single

       Dim s As String, c As String, t As Single, z As Integer

       Dim i As Integer, j As Integer, n As Integer, k As Integer, m As Integer

       '读取所有选手数据保存在变量cj中,并显示在列表框 List1中,代码略

       n = Len(cj)

       i = 1 : m = 1 : z = 1

       Do While i <= n

          c = Mid(cj, i, 1)

          j = i

          Do While                  ‘⑶

             i = i + 1

             c = Mid(cj, i, 1)

          Loop

          If z = 1 Then

            

          Else

             t = Val(Mid(cj, j, i - j))

             If t > maxcj(m) Then maxcj(m) = t

          End If

          z = z + 1 : i = i + 1

          If c = ";" Then m = m + 1: z = 1

       Loop

       m = m - 1

       k = Val(Text1.Text)

       For i = 1 To m - 1

          For j =

             If  maxcj(j) > maxcj(j - 1)  Then

                c = xm(j): xm(j) = xm(j - 1): xm(j - 1) = c

                t = maxcj(j): maxcj(j) = maxcj(j - 1): maxcj(j - 1) = t

             End If

          Next j

          If  Then

             List2.AddItem xm(i) + Str(maxcj(i))

          Else

             Exit For

          End If

       Next i

    End Sub

  3. (3) 程序中加框处代码有错,请改正。
采用冒泡排序算法对数据序列4,5,1,2,3,0完成降序排序,则需要交换的次数是(   )。
A . 4次 B . 5次 C . 11次 D . 15次
小王编写一个VB程序模拟数据筛选,功能如下:程序运行时从数据库中读取成绩数据,按升序排序后在列表框List1中显示,在文本框Text1中输入成绩1,在文本框Text2中输入成绩2,单击“筛选”按钮Command1,筛选出大于等于成绩1且小于等于成绩2的记录,并显示在列表框List2中,程序运行界面如图所示。
  1. (1) 运行上述程序,若在文本框Text1中输入75,Text2中输入85,单击“筛选”按钮,则筛选到的记录有条(填数字)。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Const n = 20

    Dim score(1 To n) As Single

    Function adj(s As String, n As Integer)

    ‘此函数功能:在字符串 s 前添加若干个空格,使其长度变为 n。代码略

    End Function

    Function search_left(key As Integer)

    ‘此函数功能:返回大于等于 key 的数组元素的起始位置。代码略。

    End Function

    Function search_right(key As Integer)

        Dim i As Integer, j As Integer, m As Integer

        i = 1: j = n

        Do While i <= j

            

            If key >= score(m) Then i = m + 1 Else j = m - 1

        Loop

       

    End Function

    Private Sub Form_Load()

    ‘从数据库中读取成绩存数组 score,记录数存 n,并对此数组 score 升序排序,代码略

    End Sub

    Private Sub Command1_Click()

        Dim num1 As Integer, num2 As Integer, first As Integer, last As Integer

        List2.Clear

        num1 = Val(Text1.Text): num2 = Val(Text2.Text)

        first = search_left(num1): last = search_right(num2)

       

        If total <= 0 Then

            List2.AddItem "无筛选到的记录!"

        Else

            List2.AddItem "筛选到" + Str(total) + "条记录!"

            List2.AddItem "依次是:"

            For i = first To last

                List2.AddItem adj(Str(i), 3) + adj(Str(score(i)), 6)

            Next i

        End If

    End Sub

小明编写了一个有关整数闭区间合并操作的VB程序:从数据库读取闭区间数据(左端点和右端点),存储在数组a中,按区间数据左端点升序排序,然后进行合并操作,操作结果存储在数组b中。

例如,读取的数据为2、3、15、25、10、14、1、5、30、60、15、25,过程是:

⑴设置区间信息为[2,3],[15,25],[10,14],[1,5],[30,60],[15,25];

⑵按区间左端点升序排序,得到J区间信息为[1,5],[2,3],[10,14],[15,25],[15,25],[30,60],[15,25];

⑶合并区间,得到[1,5],[10,25],[30,60]。说明:区间[1,5]和[2,3]合并为[1,5],区间[10,14]和[15,25]合并为[10,25],区间[10,25]和[15,25]合并为[10,25],因此合并后的结果为:[1,5],[10,25],[30,60]三个区间。

程序功能如下:单击“读数据库”按钮Command1,程序从数据库读取数据,输出在文本框Text1中;单击“开始处理”按钮Command2,程序进行区间排序,并进行区间合并操作,操作后的结果输出在文本框Text2中。程序运行结果如图所示。

实现上述功能的VB程序如下,请回答下列问题:

  1. (1) Private Sub Command1_CIick()中的Click()是(单选,填字母:A .对象名;B .属性名;C .事件名;D .事件处理过程名)
  2. (2) 从数据库中读入的区间为[1,10],[15,20],[6,18],[25,30],[31,200],则合并操作后的区间为
  3. (3) 请在划线处填入合适的代码。

    Dim a(1 To 100) As Integer         ′数组a存储合并前的区间

    Dim b(1 To 100) As Integer         ′数组b存储合并后的区间

    Dim n As Integer                        ′n表示区间个数

    Private Sub Command1_Click()

        Dim s1 As String, i As Integer

        '读取数据,并存储到数组a中,并输出在文本框Text1中,代码略

    End Sub

    Private Sub Command2_CIick()

        Dim s2 As String, i As Integer, j As Integer, k As Integer

        Dim n As Integer, t As Integer, x As Integer

        For i=1 To n-1

            For j=1 To 2 * n-2 * i Step 2

                If Then

                    t=a(j): a(j)=a(j+2): a(j+2)=t

                    t=a(j+1): a(j+1)=a(j+3): a(j+3)=t

                End If

            Next j

        Next i

        k=2

        b(1)=a(1): b(2)=a(2)

        i=2: j=3

        Do While j <=2 * n

            If b(i) >=a(j) Then

                If b(i) <=a(j+1) Then  

                Else If b(i)+1=a(j) Then

                    b(k)=a(j+l)

            Else

                k=k+1:

                k=k+1: b(k)=a(j+1)

                i=i+2

            End If

            j=j+2

        Loop

        For x=1 To k-2 Step 2

            s2=s2 & "[" & b(x) & "," &b(x+1) & "]" & ","

        Next x

        s2=s2 & "[" & b(x) & "," & b(x+1) & "]"

        Text2.text=s2

    End Sub

编写一个查找最接近的数的VB程序:程序运行时,在文本框Text1中输人产生随机数的个数(1到100之间),单击命令按钮“产生随机数并升序排列”后,在列表框List1中显示已经按升序排列后的随机整数,然后在文本框Text2中输入要查找的整数,单击命令按钮"查找"后,在标签Label3中显示随机整数序列中与待查找数最接近的整数(当最接近的数有2个时,输出较大的一个)。程序运行效果如图所示:

实现上述功能的VB代码如下,请在横线处填入合适代码。

Dim n As Integer          '存储随机数的个数

Dim f(1To100)As Boolean

'f(i)为True时表示随机整数i已经产生过

Dim a(1 To 100)As Integer

'依次存放升序排序后的n个随机数

Private Sub Command1_Click()

'命令按钮“产生随机数并升序排列”的单击事件

    Dim i As Integer

    Randomize

    For i=1 To 100

        f(i)=False

    Next i

    n=Val(Text1. Text)

    For i=1 To n

        t=Int(Rnd * 100+1)

        Do While f(t)=True

            t=Int(Rnd * 100+1)

        Loop

       

    Next i

    j=0

    For i=1 To 100        '实现排序并输出

        If f(i)=True Then

           

            a(j)=i

            List1.AddItem Str(i)

        End If

    Next i

End Sub

Private Sub Command2_Click()

'命令按钮“查找”的单击事件

    Dim key As Integer

    key=Val(Text2. Text)

    If key <=a(1) Then Label3. Caption=Str(a(1)): Exit Sub

    If key >=a(n) Then Label3. Caption=Str(a( n)): Exit Sub

    L=1: R=n

    Do While L<=R                '找到与 key 较为接近的两个数a(R)和a(L)

        m=(L+R)\2

        If key<=a(m)Then

            R=m-1

        Else

            L=m+1

        End If

    Loop

    If Then

    '在a(R)和 a(L)中选出更接近key的数

        Label3. Caption=Str(a(R))

    Else

        Label3. Caption=Str(a L))

    End If

End Sub

以下VB程序利用选择排序思想对数组a进行升序排序。

For i=1 To n\2

    iMax= i:iMin= i

    For j=i+ 1 To n-i+1

        If a(j) > a(iMax) Then iMax=j

        If a(j) < a(iMin) Then iMin=j

    Next j

   

    If iMax= i Then

        

    Else

        

    End If

Next i

上述程序段中方框处可选语句为:

①temp=a(i):a(i)=a(iMin):a(iMin)=temp

②temp=a(iMin):a(iMin)=a(n-i+1):a(n-i+1)=temp

③temp=a(iMax):a(iMax)=a(n-i+1):a(n-i+1)=temp

则方框处的语句依次为(   )

A . ①②③ B . ①③② C . ②①③ D . ③②①
有如下VB程序段:

a(1) = 1: a(2) = 2: a(3) = 3: a(4) = 4: a(5) = 5

k = Int(Rnd * 4) + 1: m = k

For i = 1 To m

    If i <> k Then

        If a(i) < a(k) Then

            t = a(i): a(i) = a(k): a(k) = t

            If k < 5 Then k = k + 1

        End If

    End If

Next i

执行该段程序段后,数组元素a(1)~a(5)的值依次不可能为(        )

A . 1 2 3 4 5 B . 2 3 1 4 5 C . 4 5 3 2 1 D . 3 4 1 2 5
数组a中各元素在列表框List1中以“个数逐行递增”的形式分布如图所示,在文本框Text11中输人行号,单击“排序”按钮,对该行数据做排序处理,并将排序之后的数据显示在文本框Text2。VB程序段如下:

Dim a(1 To 15) As Integer

'生成数组a, a(1)=24:a(2)= 17:a(3)=21:

a(4)=15:a(5)=14    …代码略

n= Val(Text1. Text)

For i=1 To n-1

    For j=(n+1) * n/2 To   ①   Step-1

        If   ②   Then

            t=a(j):a(j)=a(j- 1):a(j- 1)=t

        End If

    Next j

Next i

'将处理后的数组,以金字塔形显示,代码略

上述程序段中①②处的语句分别为(    )

A . (n-1) *n/2+1+I    a(j)>a(j- 1) B . (n-1) *n/2+1+i    a(j)<a(j-1) C . (n+1) * n/2+i-1    a(j)<a(j-1) D . (n+1) * n/2+i-1    a(j)>a(j-1)
有一组数据(共n*n)个,分别存放在a(1)至a(n*n)中,将这些数据平均分为n段,通过下列程序实现n段数据升序排序,例如,当n=4时,排序结果如图所示:

For i = 1 To    ①     

    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

    s = s + Str(a(i))

    If    ③      Then

        List1.AddItem s: s = ""

        End If

Next i

划线处的代码应为(      )

A . ① n*n ② ((i - 1) \ 4 + 1) * 4 ③ i Mod 4 = 0 B . ① n*n ② (i \ 4) * 4 ③ i \ 4 = 0 C . ① n*n-1 ② ((i - 1) \ 4 + 1) * 4 ③ i Mod 4 = 0 D . ① n*n-1 ② (i \ 4) * 4 ③ i \ 4 = 0
有如下程序段:

For i = 1 To 4

    For j = i + 1 To 5

        If a(j) > a(i) Then t = a(j): a(j) = a(i): a(i) = t

    Next j

Next i

数组元素a(1)~a(5)的值依次为“15,4,12,7,9”,整个排序过程中,数组中数据比较次数和交换次数分别是(  )

A . 比较11次,交换3次 B . 比较11次,交换4次 C . 比较10次,交换3次 D . 比较10次,交换4次
有如下程序段:

For i=1 To 2

    For j=5 To i+1 Step-1

    If a(j)<a(j-1) Then

        t=a(j) : a(j)=a(j-1) : a(j- 1)=t

    End If

  Next j

Next i

数组元素a(1)到a(5)的值依次为“95,88,66,80,75”,经过该程序段“加工”后,数组元素a(1)到a(5)的值依次为(     )

A . 66,75,95,88, 80 B . 66,75,80,95,88 C . 95,88,66,80,75 D . 95,88,80,75,66
无重叠区间。在若干个区间中,删除重复区间,使得剩余区间互不重叠(区间[1,2]和[2,3]虽有边界值2相等,但不认为是重叠区间)。小李设计VB程序,在文本框Text1中输入用逗号分隔的整数,相邻两个整数表示一个区间(任意区间的左边数据小于右边数据)。如图中所示为区间[1,2],[2,3],[3,4],[2,4]。点击“判断”按钮Command1后,删除重复区间[2,4],在文本框Text2输出满足无重复区间时需要删除的最小区间数量。运行界面如图所示。

  1. (1) 若输入的区间集合为[2,4],[1,3],[3,4],[5,6],则需要删除区间的最小数量为
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click( )

        Dim a(1 To 100) As Integer

        Dim i As Integer, j As Integer

        Dim temp As Integer, k As Integer

        Dim res As Integer, ed As Integer

        '从文本框Text1中读入整数存储到数组a中,整数的个数存放在变量k中,代码略

        For i=1 Tok\ 2-1   '以区间左边数据为主要关键字升序排序

            For j=k\2 To i+1 Step-1

                If  Then

                    temp=a(j*2-1):a(j*2-1)=a((j-1)*2-1):a((j-1)*2-1)=temp.

                    temp=a(j*2):a(j*2)=a((j-1)*2):a((j-1)*2)=temp

                End If

            Next j

        Next i

        ed=a(2)

        res= 0

        For i=2 To k\2     '计算需要删除区间的最小数量

            If  Then

                res=res+1

                ed= min(ed, )

            Else

                ed=a(i * 2)

            End If

        Next i

        Text2. Text= Str(res)

    End Sub

    Function min(x As Integer, y As Integer) As Inte-ger    '函数功能:返回x与y的最小值

    '代码略

    End Function

使用如图a所示的九宫格键盘输入单词,每个单词对应一个按键组合,如“tree对应的按键组合为“8733”;而按键组合“8733”对应的单词有“tree”、“used”等。抽取n个英文单词(可重复),使用九宫格键盘输入,统计最频繁使用的按键组合。

编写VB程序,实现上述功能。运行程序,在列表框List1中显示n个英文单词(单词仅由小写字母组成且字母个数至少为1),单击“统计”按钮Command1,在列表框List2升序显示全部单词的按键组合,在文本框Text1中显示最频繁使用的按键组合,若有多个,则全部输出。程序运行界面如图b所示。

  1. (1) 下列类中生成的对象具有Text属性的是 (单选,填字母: A . Label / B . TextBox/ C . CommandButton )。
  2. (2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

    'n为常量,代码略

    Dim a(1 To n) As String       '数组a存储所有单词

    Dim b(1To2*n) As String       '数组b存储转换后的按键组合

    Private Sub Form_ Load()

        '读取所有单词存入数组a,并显示在列表框List1中

        '初始化数组b各元素为空字符串,代码略

    End Sub

    Private Sub Command1_Click()

        Dim i As Integer, j As Integer, k As Integer, p As Integer, max As Integer

        Dim m As Integer, key As String, t As String, s1 As String, s2 As String

        key= 222334455566677889999      'key 表示a-z各个字母所对应的键盘数字

        max=0

        '以下代码实现将数组a中的每个单词转化成按键组合,并依次存入数组b中

        For i= 1 To n

            t= ""

            For j= 1 To Len(a(i))

                m = Asc(Mid(a(i), j, 1))- Asc("a")

                t=

            Next j

            b(i)= t

        Next i

        '以下代码实现对数组元素b( 1)~b(n)升序排序

       

        Do While i>=1

            For j= 1 To i

                If b(j+ 1)< b(j) Then

                    t=b(j+ 1): b(j+ 1)= b(j): b(j)=t

                End If

            Next j

            i=i- 1

        Loop

        '将排序后数组元素b(1)~b(n)显示在列表框List2中,代码略

        s1= b(1)

        p=n+ 1

        i= 1:j= 2

        Do While j<= n      '从数组元素b(n+1)开始存储最高频次的按键组合

            s2 = b(j)

            If s1 < s2 Then

                If  Then

                   max=j-i

                   p=n+ 1

                   b(p)=s1

                Else If max=j- i Then

                    p=p+ 1

                    b(p)= sl

                End If

                s1= s2

               

            End If

            j=j+ 1

        Loop

        t=""

        If max<j- i Then

            t= s1

        Else

            For k=n+ 1 To p

                t=t+ b(k)+" "

            Next k

            If max=j- I Then t=t+" "+s1

        End If

        Text1.Text= "最频繁按键组合为: " &t

    End Sub

  3. (3) 程序中加框处代码有错,请改正。