1. 某班级(人数不超过40人)参加合唱比赛,需要整理队形。先将所有人按身高升序排好,再将人数每10人排成1排,每排中间低两边高。

编写VB程序,依据上述要求排队。运行程序,在列表框 List1中显示了排序前的人员身高,单击“排序”按钮Command1后,在列表框List2中显示身高升序排序结果,再单击“站位”按钮Command2后,按10人一排站好,结果显示在列表框List3中。界面如图所示。

Dim h(0 To 40) As Integer         '学生身高

Dim n As Integer

Private Sub Form_Load()

    '从数据库中读取身高,共n条记录,存入h数组中,代码略

End Sub

Private Sub Command1_Click()

    For i =2 To n

        h1 = h(i): j = i – 1

        Do While

            j = j - 1

        Loop

        For k = i To j +2 Step -1

            h(k) = h(k - 1)

        Next k

           ①  

    Next i

    '在列表框 List2中输出排序结果,代码略

End Sub

Private Sub Command2_Click()

    '按人数每10人一排

    Dim x As Integer

    x = n \ 10

    For i =1 To x

        Call fenpai(   ②   )      '过程fenpai作用:将人员按中间低两边高排好,代码略

    Next i

    If n Mod 10 >0 Then Call fenpai(x * 10 + 1, n)

    '将站位结果输出在列表框 List3 中,代码略

End Sub

(1) 下列对象中,不具有Caption 属性的是(单选,填字母:A . Command1 / B .Form1 / C .List1 / D .Label1)。
(2) 请将划线处补充完整

 ② 

(3) 加框处代码有错误,请改正
【考点】
分支结构语句及程序实现; 循环结构语句及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
真题演练
换一批
1. 某银行网点有5个窗口,银行最少要保持3个窗口营业,另2个窗口初始为备用状态。客户按批次进入大厅,每个客户的业务办理时间为1个单位,银行每过1个时间单位就允许下一批客户进入。对于进入银行的客户,如果某窗口正空闲,则可上前办理业务,反之,若所有窗口均有客户,他便会排在最短的队伍后面。当平均每个营业窗口前的队伍人数大于等于7人时(队伍包括正在办理业务的客户在内),银行可临时将备用窗口中一个或两个改为营业窗口,当所有窗口平均客户少于7人时,将立即停用一个营业窗口转为备用,窗口平均人数若继续减少至以上情况,可再停止一个营业窗口,但最多只能有两个窗口为备用状态。

现模拟该银行排队程序,效果如下图所示,输出10个人各自的等待时间单位:

输出格式描述: (客户编号:等待的时间)

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

mins=3    #常用窗口3个

maxs=5    #最多可开设5个窗口

lims=7    #正常服务时每个窗口平均等待的最多人数

tm=int(input("请输人客户共多少批: "))

ps= list(map(int ,input("输人每批客户人数"). split(","))) 

 # list(map(int,["1","2","3"]) )返回:[1, 2, 3]

sw= mins

if len(ps)! = tm:

print("输入有误! " )

pid, cnt=0,0

head, tail=0,0

qe=[[0,0]]* 1000    #创建等待队列

def updatetime(s):

forj in range( len(s)):

s[j][1]+= 1

for i in range(tm):

for j in range(sw):     #将轮到的人进行出队

if  :

print(f’({qe[ head][0]} :{qe[ head][1]})',end=")  #按格式出队输出

head += 1

cnt-=1

#人数减少后,检查人数和窗口数是否符合要求并按照要求减少窗口,代码略

if head!= tail:

  #更新等待队列里每个人的等待时间

for j in range (ps[i]) :

pid+= 1

qe[tail]=[pid,0]

tail += 1

cnt += 1

while  :

sw += 1

while cnt>0:

#最后一批人进入银行后,程序只需要处理等待队列剩余人员到出队

#和窗口的减少,直至人数为0,代码略。

(2) 共有3批客户,分别为22人、23人、21人,则输出结果中,第4个人等待时间单位是
综合题 困难
2. 给定一个m*m 的矩阵,它表示一个箱子的侧视图。箱子的每一个格子的状态可能为图-1所示, 表示钻石, 表示固定的障碍物;将这个箱子顺时针旋转90°,由于重力原因,部分钻石的位置会发生改变。每个钻石会垂直掉落,直到它遇到阻挡(固定的障碍物、另一个钻石或者箱子的底部)。重力不会影响固定障碍物的位置,同时箱子旋转不会产生惯性,也就是说钻石的水平位置不会发生改变。图-2为盒子顺时针旋转90°以后的状态。

如果用数字来表示该矩阵,2表示钻石,1表示固定的障碍物,0表示空位置。随机生成一个m*m的矩阵在listl中显示,点击Command1按钮,按照上述要求旋转90°后的矩阵在list2 中显示。程序运行界面如图-3所示:

(1) 若m=3时,矩阵存储在a中的值为“2,0,1,1,2,0,2,0,0”,顺时针旋转90°后,a(6)中存储的值为
(2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

Constm=6

Dima(1 Tom* m) As Integer     '存储矩阵状态,2代表钻石,1代表固定障碍物,0代表空格

Private Sub Form_ Load()

    '生成初始矩阵保存到a数组并输出到1ist1中,代码略

End Sub

Private Sub Command1_Click()

Dim q(1 To m) As Integer '存储有效空格位置

Dim f As Integer, t As Integer, k As Integer, p As Integer

    f=1:t=1:k=m

    '先模拟钻石下落过程

    For i=1Tom*m

        If  Then

            q(t) = k

            t=t+1

        ElseIf a(k) = 1 Then

           f=1:t=1

        ElseIf f<>t Then,

           

            f=f+1

            a(k) =0

            q(t) = k

            t=t+1

        End If

        If k Mod m=1 Then

            f=1:t=1

            k=k+2*m-1

        Else

            k=k-1

        End If

    Next i

    '顺时针旋转90°后输出

    p=(m-1)*m+1

    For i =1 To m*m

        s=s+Str(a(p))

        If I Mod m=0 Then

            List2. AddItem s

             s=””

             p=

        Else

            p=p-m

        End If

    Next i

End Sub

综合题 困难
3. 在100个小球中,只有一个小球轻于其它小球。如何用没有砝码的天平找出该小球?小安设计了一个三分查找程序来快速查找这个小球,程序认定当需查找的小球个数小于3个时,认为已找到,程序运行界面如图。

Dim a(1 To 100) As Integer

Private Sub Form_Load()

    '产生100个重量为10的小球,存储在数组a中

    '其中随机选取1个小球的重量改为8,代码略

End Sub

Private Sub Command1_Click()

    Dim left As Integer, right As Integer

    Dim mid As Integer, count As Integer

    Dim s(1 To 2) As Integer

    left = 1: right = 100: count = 1

    List2.AddItem Str(left) + "-------->" + Str(right)

    Do While  left<=right

        s(1) = 0: s(2) = 0

            ①   

        i = left: k = 1

        Do While i <= left + mid * 2 - 1

            s(k) = s(k) + a(i)

            If      ②    Then k = k + 1

            i = i + 1

        Loop

        If s(1) = s(2) Then

            left = left + 2 * mid

        ElseIf s(1) < s(2) Then

            right = left + mid - 1

        Else

            

            left = left + mid

        End If

        count = count + 1

        List2.AddItem Str(left) + "-------->" + Str(right)

    Loop

    List2.AddItem "经过" + Str(count) + "次后找到这个数"

End Sub

(1) 实线框处代码有错,请改正。
(2) 请在划线处填入合适代码。

 ② 

(3) 根据上述程序代码,若将虚线框处的两行代码交换一下顺序,则查找结果是(单选,填字母:A .下标越界  /B .找到这个数 /C .找不到这个数  /D .死循环)
综合题 普通