1. “字符洗牌”程序模拟扑克洗牌的操作,为了打乱牌序,把手上的扑克牌中间抽一部分放到最上面,完成一次洗牌(如字符串“1234ABCD”,若把中间的第3个到第5字母抽出并保持原来的顺序放到最前面,则一次洗牌操作后字符串变成“34A12BCD”),也可以把扑克牌分成上下两部分,把下面的部分放置到上面(如字符串“1234ABCD”,把第3个字符到最后一个字符移到前面,变成“34ABCD12”),多次重复做这个动作,就能达到洗牌的目的,效果如图所示。

 

(1) 若要把窗体的标题名称由“Form1”改为“字符洗牌”,应改变窗体的属性。
(2) 完成上述功能的程序代码如下,请在划线处填入合适的代码

Private Sub Command1_Click()

    Dim r As Integer, k1 As Integer, k2 As Integer

    Dim s As String, n As Integer

   '从文本框TxtIn中获取字符串

    Randomize

    r = Int(Rnd() * 10) + 1   '随机生成洗牌次数

    n = Len(s)

    Do While r >= 1        '洗牌操作

        k1 = Int(Rnd() * (n - 2)) + 2

        k2 = Int(Rnd() * (n - k1 + 1)) + k1

        s =  + Mid(s, 1, k1 - 1) + Mid(s, k2 + 1, n - k2)

        r = r - 1

    Loop

TxtOut.Text = s   ' 在文本框TxtOut中输出结果

End Sub

(3) 若加框处的语句改为TxtOut.Text = Str(s),则运行程序时会发生的错误消息为_________(单选,填字母) A. B. C. D.
【考点】
类、对象、属性、方法、事件和事件处理的概念及应用;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
真题演练
换一批
1. 有m个人结伴旅行(m≤9,每个人用整数1~m编号)。期间既有全员参与的集体活动,也有自主参与的小团队活动。每项活动的消费由参与人平均分摊,其中一人先行垫付并记录。记录内容包括该项活动的人均消费金额(整数,单位:元)、参与人。每项活动的参与人用字符串表示,垫付人排在第1位。如“25134”表示2、5、1、3、4号参与该项活动,其中2号是垫付人。旅行结束后依据所有活动的消费记录进行结算:

1)计算每个人的应还款(应还款=应分摊的总金额-先行垫付的总金额);

2)根据所有人的应还款数据计算转账明细(应还款为正的人转给应还款为负的人)。

根据上述要求编写VB程序,功能如下:运行程序,读取消费记录数据并在列表框List 1中显示。单击“结算”按钮Command 1,在列表框List 2中显示每个人的应还款,在列表框List 3中显示转账明细。程序运行界面如图所示。

(1) 结合程序与界面可知,AddItem是List 2的(单选,填字母:A .方法名/B .事件名/C .属性名)。
(2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

Const n=9, m=15

Dim x(1 To n)As Integer       ‘x(i)存储第i项消费记录的人均消费金额

Dim a(1 To n)As String        ‘a(i)存储第i项消费记录的参与人

Private Sub Form_Load( )

    ‘读取所有消费记录,存入数组x和a中,并显示在列表框List 1中

     ‘代码略

End Sub

Private Sub Command1_Click( )

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

    Dim c As Integer, w As Integer, v As Integer

    Dim b(1 To m)As Integer        ‘保存应还款数据

    For i= 1 To m

        b(i)=0

    Next i

    For i=1 To n      ‘根据消费记录计算应还款

        k=Len(a(i))

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

        b(p)=b(p)-(k–1)*x(i)

        For j=2 To k

            p=Val(Mid(a(i), j, 1))

            

        Next j

    Next i

    c=0

    For i=1 To m

        List 2. AddItem Str(i)+“号”+Str(b(i))

        If b(i)>0 Then c=c+1

    Next i

    i=1 : j=1               ‘根据应还款数据计算转账明细

    Do While  

        Do While b(i)<=0

            i=i+1

        Loop

    Do While b(j)>=0

        j=j+1

    Loop:

        

        If w>0 Then  Else v =b(i)

        b(i)=b(i)-v:b(j)=b(j)+v

        List 3. AddItem Str(i)+“号->”+Str(j)+“号   ”+Str(v)

        If w<=0 Then c=c–1

    Loop

End Sub

(3) 程序中加框处代码有错,请改正。
综合题 困难
2. 根据某场馆一天中每位参观者的进馆和出馆时间,可统计该场馆当天人流量的分布情况。每个人进、出馆的时间用一个长度为11的字符串表示,例如“08:05-08:45”表示进馆时间为8点5分,出馆时间为8点45分。现要求统计当天馆内人数超过指定人数的总时长。

根据上述要求编写VB程序,功能如下:读取n个人进,出馆的时间,显示在列表框List1中。程序运行时,在文本框Text1中输入指定人数,单击“统计”按钮Command1,在标签Label1中显示馆内人数超过指定人数的总时长。程序运行界面如图所示.

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

Const n = 800

Dim d(1 To n)As String,a(1 To 2 * n)As String

Private Sub Form_Load( )

    ‘读取n个人进、出馆的时间,存入数组d并显示在列表框List1中,代码略

End Sub

Private Sub Command 1_ Click( )

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

    Dim t As Integer,cnt As Integer,mts As Integer,sum As Integer

    Dim s As String

     ‘提取每个人的进、出馆时间,分别加上IN、OUT标记后存入数组a

    For i = 1 To n

        a(i)=Mid(d(i),1,5)+“IN”

         = Mid(d(i),7,5)+“OUT”

    Next i

    For i = 1 To 2 * n-1    ‘对数组元素a(1)到a(2*n)从小到大排序

       

        For j = i To 2 * n-1

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

        Next j

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

    Next i

    sp =Val(Text1.Text)

    t=-1:cnt=0:sum=0

    For i = 1 To 2 * n

        mts=Val(Mid(a(i),1,2))*60+Val(Mid(a(i),4,2))

        If Mid(a(i),6,2)=“IN” Then cnt = cnt + 1 Else

        If cnt > sp Then

            If t = -1 Then t = mts

        ElseIf t > -1 Then

           

            t=-1

        End If

    Next i

    Label1.Caption = “超过指定人数的总时长:”+Sir(sum)+“分钟”

End Sub

(3) 程序中加框处代码有错,请改正。
综合题 困难
3. 甲乙双方进行一场球类比赛,一局计分的规则是:赢1球得1分,用“1”表示;输1球失1分,用“0”表示。当任一方得分大于等于6分,且领先对方2分及以上,领先方赢一局。如甲选手一局比赛数据为“101110101”,表示甲选手得6分失3分,局比分

小王用一个字符串记录了甲选手多局比赛数据,其中有一处错误,位于连续多个“0”的最后一个。为了找出错误,小王的处理方法如图a所示,对示例中疑似错误位置6和20分别修改数据,并统计每局比分。他编写了VB程序,功能如下:在窗体Form l的文本框Text l中输入记录数据,单击“分析”按钮Command 1,在列表框List 1中输出修改位置以及修改后每局的比分。程序运行界面如图b所示。

图a

图b

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

Private Sub Command 1_Click( )

    Dim sp As String, s As String s       ‘s存储甲选手多局比赛的记录数据, 长度小于50

    Dim a(1 To 50)As Integer, e(1 To 20)As Integer

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

    Dim f1 As Integer, f2 As Integer

    s=Text 1.Text

    n=Len(s)

    For i=2 To n

        a(i)=Val(

    Next i

    m=0 : i=1

    Do While i<=n

        k=i

        Do While a(i)=0 And i<=n       找出疑似错误位置

            i=i+1

        Loop

        If  Then

            m=m+1:e(m)=i-1

        End If

        i=i+1

    Loop

    For i=1 To m       ‘对每个疑似错误位置分别修改数据,并统计每局比分

         f1=0 : f2=0

         k=e(1)

         a(k)=1

         sp="" & k &""

         For j=1 To n

             If a(j)=1 Then f1=f1+1 Else f2=f2+1

             If  Then

                 sp=sp & "/" & f1 &":" & f2

                 f1=0 : f2=0

             End If

         Next j

         If f1+f2>0 Then sp=sp & "" & f1 & ":"& f2

         List 1.AddItem sp

        

    Next i

End Sub

(3) 程序中加框处代码有错,请改正。
综合题 困难