1. 全班45位同学拍毕业照,每排15人共3排,全班最高的一批站第3排,最低的一批站第一排,每排最高的站中间(第8个),两边依次身高递减。小王设计一个程序,实现队列安排功能,程序界面如下图所示。

代码如下:

Dim a(1 To 100) As String, a1(1 To 100) As String, b(1 To 100) As Integer, b1(1 To 100) As Integer

Private Sub Form_Load()

    '读取数据库中学生相关信息,姓名存数组a,身高存数组b

End Sub

Private Sub Command1_Click()

    Dim temp As Integer, temp2 As String, k As Integer, s As String, s1 As String

    For i = 1 To 44

        For j = i + 1 To 45

            If b(i) > b(j) Then

                temp = b(i): b(i) = b(j): b(j) = temp

                temp2 = a(i): a(i) = a(j): a(j) = temp2

            End If

        Next j

    Next i

    For x = 1 To 3

        k = 0

        For y = 15 * x ToStep -1

            If x Mod 2 = 1 Then

                If y Mod 2 = 1 Then

                    b1(15 * (x - 1) + 8 - k) = b(y)

                    a1(15 * (x - 1) + 8 - k) = a(y)

                Else

                    k = k + 1

                    b1(15 * (x - 1) + 8 + k) = b(y)

                    a1(15 * (x - 1) + 8 + k) = a(y)

                End If

            Else

                If y Mod 2 = 1 Then

                    k = k + 1

                    b1(15 * (x - 1) + 8 - k) = b(y)

                    a1(15 * (x - 1) + 8 - k) = a(y)

                Else

                    b1(15 * (x - 1) + 8 + k) = b(y)

                    a1(15 * (x - 1) + 8 + k) = a(y)

                End If

            End If

        Next y

    Next x

    For i = 1 To 45

        s = s + " " + a1(i)

        s1 = s1 + " " + Str(b1(i)) + " "

        IfThen

            Label1.Caption = Label1.Caption + " 第" + Str(i \ 15) + " 排" + s + vbCrLf + s1 + vbCrLf

            ' fvbCrLf 表示回车换行

            s = ""

            s1 = ""

        End If

    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

综合题 困难