1. 对于一组a(1)~a(n)进行左右交替下降排序,排序后的数据有如下特点:a(1)>a(n)>a(2)>a(n- 1)> a(3)>a(n- 3) ……。例如“99  77  55……44  66  88”就是左右交替下降排序后的数据,如下表所示。

a(1)

a(2)

a(3)

……

a(n-2)

a(n-1)

a(n)

99

77

55

……

44

66

88

根据上述排序特点,小达编写了一个VB程序,其功能如下:在文本框Text1中输入n个正整数(以“,”为分割符),单击“排序”按钮Command1进行排序,在文本框Text2中显示左右交替下降的数据,程序运行界面如图所示。

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

(1) 运行程序后,若在文本框Text1中输数据“3,15,56,34,27,42”,单击“排序”按钮,则在文本框Text2中显示的内容为
(2) 请在划线处填入合适的代码。

Private Sub Command1_Click( )

    Dim a(1 To 100) As Integer

    Dim s As String, ch As String, k As Integer, t As Integer

    Dim n As Integer, i As Integer, j As Integer, s1 As Integer

    s= Text1. Text : n=0 : s1=0

    For i=1 To Len(s)

        ch= Mid(s,i,1)

        If ch>= "O" And ch <= "9" Then

            s1 =

        Else

            n=n+1: a(n)=s1: s1=0

        End If

    Next i

    For i=1 To n-1

        If i Mod 2=1 Then

            k=i \2+1

        Else

            k=

        End If

        pos= k

        For j=i\ 2 + 1 To n- (i- 1)\ 2

            If a(j) > a( pos) Then

        Next j

        If k <> pos Then t= a(k) : a(k) =a(pos) : a(pos)=t

    Next i

    For i=1 To n

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

    Next i

End Sub

【考点】
排序算法及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
真题演练
换一批
1. 某商场有升降货梯需要在各个楼层(商场总楼层m=7)之间实现货物运送,已知需要运送的货物量为n件,分别需要从各个起点楼层送去目标楼层,例如“1-7”表示货物需要从楼层1送到楼层7,上下楼层间运作和停顿时间为3分钟,其他时间(包括空闲时上升或下降)不计。设计一个VB程序模拟运送过程,并计算输出上升过程和下降过程分别需要的时间。若起始位置楼层大于目标位置楼层,表示货物需要往下运送,为了提高运送的效率,先将货梯从下往上运送,再实现从上往下运送。

设计一个VB程序,模拟生成10件货物的上升或者下降需求,在数组en和ex中分别记录每件货物起始楼层和目标楼层,将初始需求输出到列表框List1中,然后点击按钮Command1完成货物起始楼层先升后降的排序,当起始楼层相同时,上升中则目标楼层升序,下降中则目标楼层降序。将排序结果输出到列表框List2,最后计算出上升和下降分别需要的总时长输出到文本框Text1。程序界面如下:

(1) 程序界面中有(填数字)类控件没有Caption属性。
(2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

Const n = 10:Const m = 7

Dim en(1 To n) As Integer, ex(1 To n) As Integer

Dimf(1 To n) As Integer      '值为1表示货物往上运送,值为-1表示货物往下运送

'n件货物起始楼层、目标楼层以及升降值分别存入数组en,ex,f,输出到List1,代码略

Private Sub Command1_Click()

    Dim i As Integer, j As Integer, up1 As Integer, up2 As Integer

    Dim t(1 To 2) As Integer, first As Integer, last As Integer, p As Integer

    For i = 1 To n -1

        For j = n To i + 1 Step -1

            up1 = f(j)*(en(j)*10+ex(j)): up2 = f(j-1)*(en(j-1)*10+ex(j-1))

            If f(j) > f(j -1) Or f(j) = f(j -1) AndThen

                p = f(j): f(j) = f(j -1): f(j -1) = p

                p = en(j): en(j) = en(j -1): en(j -1) = p

                p = ex(j): ex(j) = ex(j -1): ex(j -1) = p

            End If

        Next j

    Next i

    i = 1: first = en(1): last = ex(1): p = 1

    Do While i < n       '计算货梯上升时间和下降时间

        i = i + 1

        If  Then     '改错

            t(p) = t(p) + (last -first) * 3

            last = ex(i): first = en(i)

           

        ElseIf f(i) * (en(i) -last) > 0 Then

            t(p) = t(p) + f(i) * (last -first) * 3

            last = ex(i): first = en(i)

        ElseIf f(i) * (en(i) -last) <= 0 And f(i) * (ex(i) -last) > 0 Then

           

        End If

    Loop

    t(p) = t(p) + f(i) * (last -first) * 3

    Text1.Text = "升降货梯分别需要" & t(1) & "和" & t(2)& "分钟完成。"

    '将排序后的升降信息输出到List2,代码略

End Sub

(3) 程序中加框处代码有错,请改正。
综合题 困难
2. 某超市管理人员需要对一周以来商品交易的部分流水账单进行分析,以找出销售额排在前3名(同金额同名次)的商品信息。

编写VB程序,实现上述功能。运行程序,在列表框List1中显示每笔交易流水记录的商品货号与销售金额,单击“分析”按钮Command1,汇总同类商品的销售额并在列表框List2中显示销售额前3名的商品货号与销售金额。程序运行界面如图所示。

(1) 在列表框中显示结果时,使用到的“AddItem” 是

(单选,填字母: A .类名/B .属性名/C .方法名/D .事件名)

(2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

'n是交易流水的记录总数,ng是商品种类,代码略

Dim goods(1 To n) As String      '每笔交易的商品货号

Dim money(1 To n) As Single      '每笔交易的销售金额

Dim g(1 To ng) As String

Dim c(1 To ng) As Single

Private Sub Form_ Load ()

    '读取每笔交易流水,分别将商品货号存入数组goods、销售金额存入数组money

    'g(1)~g (ng)分别存储ng种商品的货号,在List1中显示交易记录信息,代码略

End Sub

Private Sub Command1_Click ()

    Dim i As Integer, j As Integer, tc As Single, tg As String

    For i=1 To n

        For j=1 To ng

             If goods(i) = g(j) Then

        Next j

    Next i

    i =1

    Do While i <= ng

        Fo rj=ng To i+1 Step-1

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

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

                tg=g(j) : g(j)=g(j-1) : g(j-1)=tg

             End If

        Next j

        If  Then Exit Do

        i =i+1

    Loop

    For j=1 To

        List2.AddItem g(j) +“”+ Str(c(j))

    Next i

End Sub

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

(1) 若输入的区间集合为[2,4],[1,3],[3,4],[5,6],则需要删除区间的最小数量为
(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

综合题 困难