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

某4S店2015年7到12月的销售数据存放在数组a中,如下表所示

a(1)

a(2)

a(3)

a(4)

a(5)

a(6)

69

58

32

21

39

33

若采用冒泡排序算法对这组数据进行升序排列,那么在完成第一遍排序时,数组元素a(1)到a(6)的数据依次是(   )

A . 21,69,58,32,39,38 B . 21,58,69,32,33,39 C . 21,69,58,32,33,39 D . 69,58,21,32,39,33
某校5名学生会推荐成员网络人气得票数依次为1201,2120,1009,1987,2009,

若采用选择排序算法对其进行从大到小排序,则第二趟的排序结果是(   )

A . 2120   2009   1009   1987   1201 B . 2120   2009   1009   1201   1987 C . 1009   1201   2120   1987   2009 D . 1009   1201   2009   2120   1987
【加试题】小李要给全班学生拍合照,要求所有学生站成一排,中间高,两端低,小李采用如下排队方法:按身高信息从高到低排序,让身高第一位的同学单独站出来,身高第二位同学站在他的左手边,身高第三位同学站在他的右手边,再依次向两端安排其他人。每个学生的学号与身高信息已存人数据库中。小李编写了VB程序,从数据库中读取学号和身高信息,在“原始信息”下方的列表框List1中显示,单击“排队”按钮Command1,在“排好的队形”下方的列表框List2中显示排好的队形,程序界面如图所示。

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

  Const maxn=100

  Dim id(1 To maxn)As Integer     ‘存储每个学生的学号

  Dim tall(1 To maxn)As Single     ‘存储每个学生的身高

  Dim n As Integer                ‘存储学生的个数

  Private Sub Form_Load()

  ‘从数据库得到学生的总人数n

    ‘从数据库读取学号信息,并存入id数组中

    ‘从数据库读取身高信息,并存入tall数组中

    ‘在列表框List1中显示学号与身高

  End Sub

  Private Sub Command1_Click()

  Dim a(1 To maxn)As Integer    ‘存储排好队形的学号

  Dim b(1 To maxn)As Single     ‘存储排好队形的身高

  Dim i As Integer,j As Integer

  Dim t1 As Integer,tr As Integer,mid As Integer

  Dim tmp1 As Single,tmp2 As Integer

  For i=1 To n-1

    For j=n To i+1 Step-1

      If  Then        ‘(1)

        tmp1=tall(j):tall(j)=tall(j-1):tall(j-1)=tmp1

        tmp2=id(j):id(j)=id(j-1):id(j-1)=tmp2

      End If

     Next j

    Next i

    If n Mod 2=0 Then     ‘根据总人数的奇偶性,确定队形的中间位置

       mid=n\2+1

    Else

       mid=(n+1)\2

    End If

    ‘身高第一位的同学,安排在队形的中间位置

    a(mid)=id(1)

    b(mid)=tall(1)

    t1=mid-1

    tr=mid+1

    For i=2 To n

      If  Then           ‘(2)

        a(tr)=id(i)

      b(tr)=tall(i)

      tr=tr+1

    Else

      a(t1)=id(i)

      b(t1)=tall(i)

      t1=t1-1

     End If

    Next i

    List2.AddItem“位置”+“学号 ”+“身高”

    For i=1 To n

      List2.Addltem Str(i)+”  ”+Str(a(i))+”  ”+Str(b(i))

    Next i

  End Sub

  1. (1) 处加框代码应改为
  2. (2) 处加框代码应改为
有一组正整数,要求对其中的数据进行排列,排列后奇数在前,偶数在后。其中最后一个数据排到奇数与偶数交接处;自前到后的第一个偶数排到最后一个位置,空出的位置排列自后向前的第一个奇数,依此类推。排序示例如下。

排序前

71

85

64

55

42

62

33

17

34

30

排序后

71

85

17

55

33

30

62

42

34

64

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

Const n=10

Dim a(1 To n) As Integer

Private Sub Command1_Click()

Dim i As Integer,j As Integer

Dim temp As Integer,flag As Boolean

'读取一组正整数,存储在数组a中,代码略

i=1:j=n

temp=a(j):flag=True

Do While i<j

If flag Then

If a(i) Mod 2=0 Then

   a(j)=a(i)

   j=j-1

   flag=Not flag

Else

    '

End If

Else

If a(j) Mod 2=1 Then

   a(i)=a(j)

   flag=Not flag

Else

   j=j-1

End If

End If

Loop

 '

'依次输出排序后的数据,代码略。

End Sub

小刘在研究n个数的冒泡排序算法,发现可以从两个方面进行优化:

1)在每遍冒泡过程中,若最后一次交换的是last与last-1位置的数,则last位置之前的相邻数据均已有序。进行下一遍冒泡,无序区域设置为[last,n],每一遍排序均可能使当前的无序区域缩小。

2)若在某一遍排序中没有数据交换,说明待排序数据都已经有序,冒泡排序过程可在此遍排序后结束。因此可以引入一个变量lag,记录在每遍排序过程中是否发生了交换。

小刘按上述方法设计了一个冒泡优化VB程序功能如下:单击“生成数据”按钮 Command1后,随机生成一组无重复的两位整数存入数组a,并显示在列表框List1中。单击“排序”按钮Command2后,将数组a中的数据进行降序排序,排序后的数据显示在列表框List2中,排序过程中实际的冒泡遍数显示在Label3中。程序运行界面如图所示。实现上述功能的VB程序如下,回答下列问题。

  1. (1) 若按优化后的冒泡排序算法,数据28,15,10,8,12进行降序排序,冒泡的遍数是(填数字)。
  2. (2) 在划线处填入合适的代码。

    Dim a (1 To 20) As Integer

    Private sub command1_Click ( )    ‘ 随机生成不重复的两位数

    Dim i As Integer, j As Integer

    List1, Clear : List2. Clear

    Randomize

    For i = 1 To 20

      a(i) = Int (Rnd*90) + 10

      For j = 1 To i-1

        If     ①       Then i =i-1:Exit For

      Next j

    Next i

    For i=1 To 20

      List1.AddItem Str(a(i))

    Next i

    End Sub

    Private Sub Command2_ Click ( )

    Dim flag As Boolean, i As Integer, j As Integer

    Dim temp As Integer, num As Integer, last As Integer

    num = 0 : last = 1

    flag= True

    Do While flag=True

             ②     

      For j = 20 To last +1   Step -1

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

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

                 ③      

          flag = True ' 有交换发生

        End if

      Next j

      num = num +1

    Loop

    For i =1 To 20

      List2 AddItem Str(a(1)

    Next i

    Label13. Caption = "本次排序的冒泡遍数为:" & str(num)

    End sub

     ② ③ 

编号分别为1~n(n为偶数)的学生分成两组进行投篮比赛,奇数编号的为第一组,偶数编号的为第二组。对每个分组的成绩按从高到低排序,先比较处于分组第1位的两个队员成绩,成绩高的得1分,低的扣1分,相等均不得分,再依次比较处于分组相同位置的队员成绩,最后得到每组得分。

    如10名运动员1号到10号的成绩分别是“13,6,9,8,10,11,10,14,16,13”,从高到低排序后,第一组的成绩依次是“16,13,10,10,9”,第二组的成绩依次是“14,13,11,8,6”。第1位的成绩分别是16和14,则第一组获胜得1分,第二组扣1分,再比较两个分组第2位的成绩13和13,则两组均不得分。依次处理,比较完剩余队员的成绩,可得第一组得分为2,第二组得分为-2。

    编写一个VB程序,实现如下功能:在文本框Text1中依次输入成绩(偶数个整数,用逗号分隔并以逗号结尾),单击“确定”按钮Command1后,在列表框List1中显示对阵编号、对阵成绩及两个分组的最后得分。程序运行界面如图所示。

  1. (1) 下列对象不具有Caption属性的是(单选,填字母:A .Command1/B .Form1/C .Text1/D .Label1)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Private Sub Command1_Click()

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

    Dim s As String, ch As String, sum1 As Integer, sum2 As Integer

    Dim bh (1 To 50) As Integer, cj(1 To 50) As Integer

    s= Text1.Text

    j= 1: k=0

      For i= 1 To   ①  

        ch = Mid(s, i, 1)

        If Not (ch>= "0" And ch <= "9") Then

            k=k+1

            bh(k)=k

            cj(k) = Val(Mid(s, j, i-j))

                ②   

        End If

      Next i

      For i= 1 To k-2 Step 2

        For j= k To   ③   Step -1

            If cj(j)> cj(j-2) Then

                t= cj(j): cj(j)=cj(j-2): cj(j-2)=t

                t= bh(j): bh(j)= bh(j-2): bh(j-2)=t

            End If

        Next j

      Next i

      sum1 = 0: sum2= 0

      List1 .AddItem "对阵编号  对阵成绩"

      For i=1 To k- 1 Step 2

        If cj(i)> cj(i+1) Then

            sum1 = sum1 + 1: sum2 = sum2- 1

       

            sum1=sum1-1: sum2=sum2+1

        End If

        List1.AddItem adj(bh(i)) + "<-->" + adj(bh(i+1)) + adj(cj(i)) + "<-->" + adj(cj(i+1)

      Next i

      List1.AddItem"第一组得分: "+ adj(sum1)

      List1.AddItem"第二组得分: " + adj(sum2)

    End Sub

    Function adj(x As Integer) As String

    ‘函数功能:将数值x转换成字符串,并在字符串的左侧添加若干空格。代码略

    End Function

     ② ③ 

  3. (3) 程序代码中的加框处代码有误,请改正。
小奕同学基于排序算法设计了一个数字矩阵排序的程序。程序界面如下图所示,在文本框中输入矩阵大小,点击“生成”按钮Command1,在左侧列表框List 1中输出一个长宽均为指定大小的随机整数矩阵,随机整数范围为【1,99】。点击“排序”按钮Command2,结果输出在右侧列表框List 2中,奇数行从左到右依次递增,偶数行从右至左依次递增,且保持输出矩阵的长宽不变。

  1. (1) 实现上述功能的VB程序如下,显示数据用的add item是一种(单选,填字母:A .属性名/B .事件名/C .方法名/D .过程名)。
  2. (2) 请在划线处填入合适的代码。

    Dim a( 1 To 100) As Integer

    Dim n As Integer

    Function dq(s As String, L As Integer) As String      ‘自定义对齐函数

        ‘在输入的字符串s前加若干空格,输出长度为L的字符串,代码略

    EndFunction

    Private SubCommand1_Click()     '生成数字矩阵

    ‘随机生成n^2个数字,存储在数组a中,代码略

    ‘以一行n个,共n行的格式显示在List 1中,代码略

    End Sub

    Private Sub Command2_Click()     '数字矩阵排序

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

         Dim f As Boolean

         List 2.Clear

         f=True

         For i=1 To n^2 Step n

              s=“”

             For j=i To

             k=n^2

             Do While   ① 

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

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

             End If

             k=k-1

    Loop

      If f=True Then

             s=s+“”+dq(Str(a(j) ) , 2)

      Else

      s=“”+dq(Str(a(j) ) , 2) +s

      End If

      Next j

      List 2.Add Items

        ② 

    Next i

    End Sub

     ② 

  3. (3) 程序中加框处代码有错,请改正。
某 VB 程序如下:

Dim a(1 To 10) As Integer,b(1 To 10) As Integer

k = 0

For i = 10 To 1 Step -1

Do While b(i) <> 0 k = k + 1

a(k) = i: b(i) = b(i) - 1

Loop

Next i

若 a(1)~a(10)的值分别为 7,9,8,1,9,4,4,2,1,1,则运行以上程序后,下列说法正确的是(  )

A . 这是一段冒泡排序程序 B . 运行后 a(1)~a(10)的值分别为 1,1,1,2,4,4,7,8,9,9 C . 加框部分运行后 b(1)~b(10)的值分别为 3,1,0,2,0,0,1,1,2,0 D . 本算法是通过比较交换数据来实现排序的
下表列出了存放在数组d中8个跳高运动员的成绩(单位:厘米),若按非递减排序,并采用选择排序算法自左向右进行比较和交换,在第三轮数据比较和交换过程结束后,数组变量d[6]的值应该为(     )。

d[1]

d[2]

d[3]

d[4]

d[5]

d[6]

d[7]

d[8]

206

216

210

222

218

208

220

202

A . 206 B . 208 C . 210 D . 216
完成某排序算法的VB程序段如下:

For i=1 To 7

  flag=False

  For j=8 To i+1 Step-1

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

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

        flag=True

    End If

  Next j

  If Not flag Then Exit For

Next i

数组a(1)到a(8)存储的数据依次为“38,11,21,62,59,65,77,79”,如果用上述算法排序,程序执行后,变量i的值为(  )

A . 2 B . 3 C . 4 D . 7
某地选考赋分规则如下:

划分赋分等级:将考生每门选考科目的原始成绩从高到低划分为A、B+、B、C+、C、D+、D、E共8个等级,各等级人数所占比例分别为3%、7%、16%、24%、24%、16%、7%、3%,如下表所示。

等级

A

B+

B

C+

C

D+

D

E

比例

3%

7%

16%

24%

24%

16%

7%

3%

转换赋分成绩: 将A至E等级内的考生原始成绩,依照等比例转换法则,分别转换到91-100、81-90、71-80、61-70、51-60、 41-50、31-40、21-30八个分数区间,得到考生的赋分成绩,如图a所示。

转换公式如下: t=t2+(s-s2)*(t1-t2)/(s1-s2), 其中t表示转化后的赋分成绩,t1 表示该档最高转化分,t2 表示该档最低转化分,s表示原始分,s1 表示该档最高原始分,s2表示该档最低原始分。

比如选择物理的学生有20000人,小明物理卷面分90分,排名为1800名,则他在物理学科中的比例是9%。按照赋分等级表可知他所处等级为B+。若原始分4%-10%区间的最高分为94,最低分为88,B+区间分数为81-90分。小明转化后的赋分成绩为81+ (90-88)* (90-81)/(94-88)=84分。

编写一个VB程序计算某校学生某科目成绩的赋分,功能如下:从数据库中读入学生学号、姓名、班级和原始成绩,并在列表框List1中显示,单击“赋分”按钮Command1,在列表框List2中按原始成绩从高到低显示赋分等级和赋分成绩。赋分时,先按原始成绩从高到低排序,再根据人数比例计算切分位置,最后对落入同一等级的学生进行赋分。若切分位置有相同分数学生,则归为同一个等级。例如,某等级切分位置是第100位,但第101位学生的原始成绩和第100位相同,则这两名学生的赋分等级相同。程序运行界面如图b所示。

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

  1. (1) 分析程序,可知存放学生成绩的数据表为
  2. (2) 请在划线处填上合适的代码。

    Const max = 1000

    Dim n As Integer          '存放学生人数

    Dim xh(1 To max) As String, xm(1 To max) As String

    Dim bj(1 To max) As Integer, fs(0 To max) As Single

    Dim ffcj(1 To max) As Integer    '数组ffdj存储学生的赋分等级

    Dim ffdj(O To max) As String     '数组ffcj存储学生的赋分成绩

    Private Sub Form_ Load()

        Dim i As Integer, km As String

        Dim conn As New ADODB. Connect ion

        Dim rs As New ADODB. Recordset

        Conn.ConnectionString =“prov ider-microsoft.ace.oledb.12.0;data source=” +App. Path + “\s tudent. accdb”

        conn. Open

        Set rs. ActiveConnection = conn

        Rs. Open' 'select * from stu_ info"

    ‘本过程其它代码从数据库中读入学生学号、姓名、班级和原始成绩存储到数组xh、xm、bj和fs中,并在List1中显示。学生数存储在变量n中。

        Loop

    End Sub

    Private Sub Command1_ Click()

        Dim q(1 To max) As Integer, p(1 To 8) As Single, dj(1 To 8) As String

        Dimi As Integer,j As Integer, t As Integer, pos As Integer, last As Integer

        Dim t1 As Integer, t2 As Integer, s1 As Single, s2 As Single

        p(1) =0.03: p(2) = 0.07: p(3) =0.16: p(4) = 0.24

        p(5) =0.24: p(6) =0.16: p(7) =0.07: p(8)=0.03

        dj(1)="A : dj(2) = "B+*: dj(3) = "B": dj(4) = C+

        dj(5)= "C: dj(6) = "D+*: dj(7) = "D": dj(8)="E”

        For i=2 To 8     ‘计算到该等级累计所占比例

            p(i) =

        Next i

        For i=1 To n

            q(i) = i

        Next i

        For i=1 To n- 1

            For j=n To i+1 Step-1

                If fs(q(j)) > fs(q(j - 1)) Then

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

                End If

            Next j

        Next i

        pos=1

        t1=100:t2=91

        For i =1 To 8

            last=Int(n*p(i)+0.5)

            Do While

                last=last+1    ‘处理切分位置的同分数学生

            Loop

            s1 = fs(q(pos)): s2 = fs(q(last))

            Do While pos <= last

                

                ffcj(q(pos)) = t2 + (fs(q(pos)) - s2) / (s1 - s2) * (t1 - t2)

                pos=pos+1

            Loop

            t1 = t1 -10:t2=t2- 10

        Next i

        For i=1 To n

            List2. AddItem xh(q(i)) + xm(q(i)) + Str(bj(q(i))) + dj(ffdj(q(i))) +Str (ffcj(q(i)))

        Nexti

    End Sub

给定n个学生成绩,筛选男生或女生中成绩居前百分之k的学生。筛选规则如下:m=男生或女生记录数×k%,若m<1,则m取1;否则m向下取整,如m=3.1,则筛选最大的3项。若有数据和第m项的值相同,则一起筛选出。如有男生成绩分别是“78,99,98,99,90”,以“最大10百分比”筛选,则5×10%=0.5,筛选最大的1项,筛选出“99,99”。

编写一个VB程序,实现上述功能。程序运行时,在列表框List1中显示n名学生的姓名、性别和成绩,在文本框Text1中输入性别,Text2中输入k,单击“筛选”按钮Command1,在列表框List2中显示筛选出的学生姓名、性别和成绩。程序运行界面如图所示。

  1. (1) 下列VB语句可以实现清空文本框Text1内容的是(单选,填字母:A .Text1.Clear / B .Text1.Caption = "" / C .Text1.Text = "")
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Dim n As Integer

    Dim xm(1 To n) As String

    Dim xb(0 To n) As String

    Dim cj(0 To n) As Integer

    Private Sub Form_Load()

    '读取学生姓名、性别和成绩分别存 xm、xb 和 cj 数组,并在列表框 List1 中显示。

    '学生人数存变量 n,代码略。

    End Sub

    Private Sub Command1_Click()

        Dim s As String, k As Single, m As Single, mm As Integer

        Dim c As Integer, p As Integer, i As Integer, j As Integer

        Dim t1 As String, t2 As Integer

        s = Text1.Text

        k = Val(Text2.Text)

        c = 0

        For i = 1 To n

            If xb(i) = s Then

        Next i

        m = c * k / 100

        If m < 1 Then

            mm = 1

        Else

            mm =

        End If

        i = 1

        Do While i <= n

            p = i

            For j = i + 1 To n

                If xb(j) = s Then

                    If  Then p = j

                End If

            Next j

            If i <> p Then

                t1 = xb(i): xb(i) = xb(p): xb(p) = t1

                t2 = cj(i): cj(i) = cj(p): cj(p) = t2

            End If

            If i > mm And (xb(i) <> xb(i - 1) Or cj(i) <> cj(i - 1)) Then Exit Do

            i = i + 1

        Loop

       

        For i = 1 To mm

            List2.AddItem xm(i) + " " + xb(i) + " " + Str(cj(i))

        Next i

    End Sub

  3. (3) 程序加框处的代码有误,请改正。
有如下部分程序段:

a(1)="20": a(2)="16": a(3)= "12": a(4)="o": a(5)="k"

For i=1 To 4

    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

    Next j

    List3.AddItem a(i)

Next i

该程序段运行后,列表框List1中显示的内容为(   )

A . 12,16,20,o,k B . o,k,20,16 C . o,k,20,16,12 D . 20,16
要对报告厅内参加表演和观看演出的学生座位进行安排,具体学生相关数据如下表1所示。班级已经按从小到大排定,节目共4个,编号依次为1-4,不参加表演的学生的节目编号为5;已知报告厅有200个座位(10排20列),全部报名人数为150人,其中参加节目表演的学生为12人。座位安排规则如下:①左上区域有12个座位(3 排4列)为表演学生专座,用“○”表示,从左至右,从前至后,按节目顺序从小到大依次安排座位。②其他区域用“□”表示,从左至右,从前至后,按班级顺序依次安排不参加表演的学生的座位。

在Text1中输入班级,在Text2中输入姓名,单击“查询”按钮Command1,显示:①学生行列位置显示在标签Label2中:②学生具体位置显示在列表框List1中。程序运行界面如图所示。

  1. (1) 根据表1显示的数据,1班的黄楠,所在的位置是(例填:第1排第1列)。

    班级

    1

    1

    1

    1

    1

    2

    2

    2

    3

    3

    ……

    姓名

    王宽

    彭建飞

    杨健

    黄楠

    李明

    李英

    张本初

    吴曦

    宋纯

    姜明

    ……

    节目编号

    1

    5

    2

    5

    5

    2

    1

    4

    5

    5

    ……

    表1

  2. (2) 请在划线处填入合适的代码。

    Const n = 150

    Const row = 10: Const col = 20

    Const acty = 3: Const actx= 4

    Dim a(1 To n) As Strire, b(1 To n) As String, c(1 To n) As String

    Dim e(1 To row * col) As String    ‘存储学生姓名

    Private Sub Command1_Click( )

        num = f(Text1. Text, Text2. Text)

        If num <> 0 Then

            l= (num-1) \col + 1

           

           '在list1中用实心图形标记查找到的位置,代码略

            Label2. Caption =“你的位置在:第“+ Str(1) +”排,第“+ Str(r) + ”列”

        Else

             Label2. Caption =“没有找到你的座位!”

        End If

    End Sub

    Private Sub Form _Load( )

        Dim lastn As Integer, m As Integer ,flag As Boolean,k As Integer

        '读取班级、学生姓名、参加节目编号到数组a、b、c中,代码略

        flag = True: lastn = 1

        Do While flag

           

            For j=n To lastn+1 Step -1

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

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

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

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

                    lastn = j:flag = True

                End If

            Next j

        Loop

         ‘座位初始化,并且在list1中显示,代码略

        m=1:k=13

        For i=1 To row

            For j=1 To col

                If  Then

                    e((i-1) *col+j)=b(m):m=m+1

                ElseIf k <= n Then

                    e((i - 1) * col + j) = b(k):k=k+1

                End If

            Next j

        Next i

    End Sub

    Function f(a As String,b As String) As Integer

        ‘函数f根据输入的班级、姓名返回在数组e中的位置,如果没有找到则返回数字0

    End Function

有如下程序段:

Const n=8

a(1)=33:a(2)=8:a(3)=49:a(4)=25:a(5)=56:a(6)=3:a(7)=12:a(8)=41

x=n\2

For i=x To 2 Step-1

    For j=1 To i - 1

        If a(j)< a(i) Then

            t=a(j):a(j)=a(i):a(i)=t

        End If

    Next j

Next i

i =n

Do While i>x+ 1

    k=i

    For j=i-1Tox+1 Step -1

        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

    i=i-1

Loop

执行完这段代码后,数组a中各个元素的值为(    )

A . 8  25  33  49  3  12  41  56 B . 49  33  25  8  3  12  41  56 C . 8  25  33  49  56  41  12  3 D . 49  33  25  8  56  41  12  3
某VB程序段如下:

n=6:Text2. Text=" "

m=Val(Text1. Text)

For i=1 To 3

    k=i

    j=i+1

    Do While j<=m

        If a(k)> a(j) then k=j

        j=j+1

    Loop

    If i<>k Then

        Text2. Text= Str(a(k))+Text2. Text

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

    End If

Next i

数组元素d(1)到d(6)的值依次为“39,25,18,20,73,70”,现运行程序在文本框Text1里输入5,点击按钮Command1后文本框Text2中显示的内容是(    )

A . 18 20 70 B . 70 20 18 C . 18 20 25 D . 25 20 18
某志愿服务APP用于整理浙江省内各城市志愿者服务工作情况,每个志愿者的数据用一个长度为8的字符串表示,例如“6 YFH 5 ”,6表示城市序号,YFH为志愿者姓名字母编写,5为参加志愿者服务次数。整理要求:先按城市序号从小到大排列;然后,同一城市的志愿者按参加志愿服务的次数降序排列。按上述要求,编写VB程序,功能如下:在列表List1中显示整理前的数据,单击“整理”按钮Command1,整理结果显示在列表框List2中,程序运行界面如图所示。

  1. (1) 在VB表达式Command1_Click()中,Command1、Click、Command1_Click()依次表示(单选,填字母:A .方法名、属性名、事件名/B .对象名、事件名、事件处理过程名/C .函数名、对象名、方法名)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const nc=10    '城市数

    Const n=200000'志愿者总人数

    Dim a(1 To n) As String'存储志愿者数据

    Private Sub Form_Load()

        '本过程读取志愿者数据,存入数组a并显示在列表框List1中,代码略

    End Sub

    Private Sub Command1_Click()

    Dim city(1 To n) As Integer,pname(1 To n) As String,cs(1 To n) As Integer

        Dim t As Integer,t1 As String

        Dim b(1 To nc) As Integer           '存储每个城市的报名人数

        Dim index(1 To n) As Integer          '定义索引数组

        For i = 1 To n

    city(i) = Val(Mid(a(i), 1, 1))

            pname(i) =

            cs(i) = Val(Mid(a(i), 7))

        Next i

        i = 1                '按城市序号升序排序

        Do While i < n

            k = i: i = n

            For j = n To k + 1 Step -1

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

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

                    t1= pname(j): pname(j) = pname(j -1): pname(j -1) = t1

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

                    

                End If

            Next j

        Loop

        For i = 1 To n

           

            index(i) = i

        Next i

        pos = 1       '相同城市志愿者按服务次数降序排序

        For i = 1 To nc

            For j = pos To pos + b(i) -2

                k = j

                For p = j + 1 To

                    If cs(index(p)) > cs(index(k)) Then k = p

                Next p

                t = index(j): index(j) = index(k): index(k) = t

            Next j

            pos = pos + b(i)

        Next i

        '最终结果显示在列表框List2中,代码略

    End Sub

  3. (3) 程序中加框处代码有错,请改正。
对11个元素进行排序,用冒泡法进行排序时,需比较的次数共为(    )
A . 110 B . 132 C . 55 D . 66
有如下ⅤB程序段:

‘生成6个随机正整数,依次存入数组元素a(1)到a(6),代码略

For i=1 To 2

    For j=6 To i+ 1 Step -1

        If a(j)Mod 3 >a(j-1)Mod 3 Then

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

        End If

    Next j

Next i

执行上述程序段后,下列选项中,a(1)到a(6)各元素值不可能的是(    )

A . 2,1,4,3,6,7 B . 7,7,6,3,3,1

C . 5,2,1,7,8,3 D . 8,7,4,3,3,2
某学校开展了艺术节活动,数组a中存储了n个节目的编号和得分数据,数组存储结构如下图所示:

小明使用选择排序思想对上述n个节目按得分进行降序排序(得分相同的按编号升序排列),并依据得分插入各个节目的排名信息,处理后数组a的存储结构如下图所示:

程序运行时,单击命令按钮Command1后读取数据到数组a中并显示在列表框List1中,单击命令按钮Command2后将节目按照上述规则进行排序,并将排名结果显示在列表框List2中。实现上述功能的VB程序如下,请回答下列问题:

  1. (1) 已知窗体名称为Form1,要使程序加载时,窗体标题自动显示为“第15题程序”,则可在(单选,填字母:A .Form_ Click() / B .Form Load() / C .Form1_ Click() / D .Forml_ Load()) 事件过程中添加代码: Form1. Caption= "第15题程序"。
  2. (2) 请在划线处填入合适的代码。

    Const n = 20

    Dim a(1 To 3 * n) As Integer

    Private Sub Command1_Click ()

        ‘读取数据,存储在数组a中,并显示在列表框List1中。代码略

    End Sub

    Private Sub Command2_Click ()

        

            k=i

            For j=1 To i-1

                If a(2*j) < a(2*k) 0r  Then

                    k=j

                End If

            Next j

            a(3*i)=a(2*k)

            a(3*i-1)=a(2*k-1)

            

            a(2*k-1)=a(2*i-1)

        Next i

        List2. AddItem "第1名:编号”+ CStr(a(2)) + ",分数”+ Str(a(3))

        a(1) =1

        mc=1

        For i=2 To n

            If  Then mc=i

            List2. AddItem "第"+ Str(mc) + "名:编号" + CStr(a(3* i-1)) +",分数"+Str(a(3 * i))

            a(3*i-2)=mc

        Next i

    End Sub

  3. (3) 加框处代码有误,请改正。
最近更新