1. 【加试题】字符串排序。编写VB程序,实现如下功能:程序运行时,单击命令按钮Command1 产生100个随机字符串(每个字符串长度不超过10),并显示在列表框List1中,单击命令按钮Command2对产生的100个随机字符串按权值进行降序排序,将排序结果显示在列表框List2中。每个字符串的权值定义为该字符串中ASCII码值最大的字母的ASCII码值,例如字符串“Hello”中ASCII码值最大的字母是“o”(ASCII码值为111),则字符串“Hello”的权值为111。程序运行效果如图所示。实现上述功能的VB代码如下,但加框处代码有错,请改正。

Dim a(1 To 100) As String '依次存放100 个随机字符串

Dim b(1 To 100) As Integer '依次存放每个字符串的权值

Private Sub Command1_Click() '产生100 个随机字符串

Dim i As Integer, k As Integer, t As Integer, x As Integer

Randomize

For i = 1 To 100

k = Int(Rnd * 10 + 1) : t = 0  'k 表示第i 个字符串的长度

Do While t < k '通过循环依次产生第i 个字符串a(i)的k 个字符

If Int(Rnd * 2 + 1) = 1 Then '产生一个小写字母的ASCII 码值

x = Asc("a") + Int(Rnd * 26)

Else

x = Asc("A") + Int(Rnd * 26) '产生一个大写字母的ASCII 码值

End If

                '①

If b(i) < x Then b(i) = x

t = t + 1

Loop

List1.AddItem a(i)

Next i

End Sub

Private Sub Command2_Click() '对100 个字符串按字符串权值降序排序

Dim i As Integer, j As Integer, y As Integer

Dim s As String

For i = 1 To 99

k = i

For j = i + 1 To 100

    '②

Next j

If k <> i Then

s = a(k): a(k) = a(i): a(i) = s

y = b(k): b(k) = b(i): b(i) = y

End If

Next i

For i = 1 To 100

List2.AddItem 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

综合题 困难