组卷网 > 高中信息技术综合库 > 算法理论 > 算法实例的程序实现 > 排序算法及程序实现
题型:操作题 难度:0.15 引用次数:23 题号:11737699
有多人在不同楼层要乘坐同一部电梯,所有人都是去往更高楼层,电梯初始位置为第一批用户出发的楼层位置。电梯在运行时,上升一层需耗时3秒,在某一层停留时(含电梯初始位置和电梯结束位置),不论有多少人进出都算8秒。小马同学利用上述算法编写了一个VB程序,在列表框list1中显示所有人的出发与到达楼层,按照出发楼层升序(出发楼层相同按到达楼层升序)排序,在列表框list2中输出排序后结果,最后在文本框Text1中输出电梯本次运行的总时间。程序运行界面如图所示,回答下列问题:       

(1)若有5批用户出发与到达楼层分别是“10-25、5-15、15-20、15-30、5-10”,按照上述电梯运行规则,则电梯本次运行的总时间为_______秒。
(2)给划线处填上合适代码,使程序完整.   
Dim a(1 To 10) As Integer, b(1 To 10) As Integer
Private Sub Command1_Click()
Dim i As Integer, time As Integer, k As Integer
Dim c(1 To 20) As Integer, nc As Integer
c(1) = a(1): nc = 1
For i = 1 To 9                                '删除起点重复数据后添加到数组c
       If a(i) <> a(i + 1) Then
                 nc = nc + 1
                 __________
       End If
Next i
For i = 1 To 10                            '删除终点重复数据后添加到数组c
       k = nc
       Do While b(i) < c(k)
                 k = k - 1
          Loop
          If________ Then                 '非重复数据(新停靠楼层)添加到数组c
                 For j = nc To k + 1Step -1
                       c(j + 1) = c(j)
                 Next j
                 nc = nc + 1
                 c(j + 1) = b(i)
          End If
Next i
time =   (c(nc) - c(1)) * 3 + nc * 8
Text1.Text = “总时间--” + Str(time) + “秒”
End Sub
Private Sub Form_Load()
'生成10批人的起止楼层,分别给数组a和b,并在列表框list1输出,代码略.
For i = 1 To 9
   For j = 10 To i + 1 Step -1
          If a(j) < a(j - 1) Or__________ Then
                    t = a(j): a(j) = a(j - 1): a(j - 1) = t
                    t = b(j): b(j) = b(j - 1): b(j - 1) = t
               End If
          Next j
Next i
For i = 1 To 10
   List2.AddItem Str(a(i)) + Str(b(i))
Next i
End Sub

相似题推荐

操作题 | 困难 (0.15)
【推荐1】小明基于选择排序算法编写了一个VB程序,功能如下:在文本框Text1中显示排序前的数据,单击“排序”按钮Command1,在文本框Text2中显示剔除重复数据后的升序排序结果。程序运行界面如下图所示。
                         
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Const n 10
Private Sub Form Load()
'排序前数据存储在数组a中,并在文本框Text1中显示,代码略
End Sub
Private Sub Command1 Click()
Dim i As Integer, bottom As Integer
Dim a(1 To n) As Integer, j As Integer
i=1:bottom=n
Do While i< bottom

k =i

j=i+1

Do While<= bottom

If a(j)=a(k) Then

a(j)=a(bottom)

                                                     '(1)___________

bottom =bottom-1

ElseIf a(j)<a(k) Then

k=j

End If

j=j+1

Loop

If      Then                                '(2)__________

t= a(i):a(i)=a(k):a(k)=t

End If

i=i+1


Loop
'排序后数据存储在数组a中,并在文本框Text2中显示
End Sub
2020-04-14更新 | 35次组卷
操作题 | 困难 (0.15)

【推荐2】小杰为学校教务处编写了一个排考场座位的VB程序,考场采用“6排5列”共30人的模式,程序执行后,考生的考号与姓名显示在列表框List1中,单击“考场座位”按钮,考场号与座位显示在Text1中,程序运行界面如图所示,数据表如图



实现上述功能的VB程序如下,请回答下列问题:
(1)程序中读取的数据库文件是____________
(2)当“Form_load() 事件处理过程运行结束后,变量x的值为___________
(3)请在划线处填入合适的代码
Dim sName(100) As String
Dim kh(100) as string
Private Sub Command1_Click()
Dim y As Integer
Dim start As Integer      '考场第1位数据元素的下标
Dim pa As Integer            '数据库导入VB时学生数据下标
Dim pb As Integer             '考场座位数据下标
Dim i As Integer,j As Integer,k As Integer,m As Integer
Dim kcsName(100) As String
start = 1
pa = start
recCount = x-1
If recCount Mod 30 <> 0 Then          
_______________          
For i = 1 To y      '将当前考生人数添加到30的整数倍        
recCount = recCount +1        
       sName(recCount) = " "
Next i
End If
For j = 1 To recCount / 30    
pa = start    
pb = start    
For i = 1 To 30        
kcsName(pb) = sName(pa)        
pb = pb +1        
If   i Mod 5 = 0 Then            
pa = start +i \5        
Else                  
________________          
End If    
Next i    
start = start +30
Next j
Text1.Text = " "
start = 1
For k = 1 To recCount /30    
m = start    
Text1.Text = Text1.Text + "第" + Str(k) + "考场" + vbCrLf    
'vbCrLf为换行标志符,实现Text1中内容换行显示    
For i = 1 To 6        
For j = 1 To 5            
Text1.Text = Text1.Text +"  " +kcsName(m)            
m = m +1        
Next j        
Text1.Text = Text1.Text +vbCrLf    
Next i    
Text1.Text = Text1.Text +vbCrLf +vbCrLf          
______________________
Next k
End Sub
Private Sub form_load()
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
conn.ConnectionString = "provider=microsoft.ace.oledb.12.0;data source=" & App.Path & "/kaochang.accdb"
conn.Open
Set rs.ActiveConnection = conn
rs.Open "select * from banji"
x = 1
List1.AddItem "  考号    姓名"
Do While Not rs.EOF       '
kh(x) = rs.fields("kh")
sName(x) = rs.fields("xm")
List1.AddItem kh(x) + "   " + sName(x)
x = x + 1
rs.MoveNext
Loop
rs.Close
End Sub

2019-06-19更新 | 22次组卷
操作题 | 困难 (0.15)
名校
【推荐3】某小卖部商品相关数据分别存放在相应的数据表中,如图 1 和图 2 所示。
          

图1                                                            图2


编写“商品销售统计”程序功能如下:窗体加载时从数据库中读取商品的相关数据,对各商品类别总销量及名次进行统计,结果在列表框 List1 中显示;单击“查询”按钮 Command1, 按商品类别编号从小到大排列,同一类别商品按销量从大到小排序,在列表框 List2 中显示。程序运行界面如图3所示。

图3


(1) 阅读程序可知,gtype(b(3))的初始值为__________
(2) 请在划线处填入合适的代码。
Dim a(1 To 2000) As Integer, b(1 To 2000) As Integer, s(1 To 2000) As Integer
Dim gid(1 To 100) As Integer, t(1 To 2000) As Integer
Dim c(1 To 2000) As String, gtype(1 To 100) As String
Dim ts(1 To 100) As Integer '数组 ts 存储每个类别商品总销量
Dim k(1 To 2000) As Integer '数组 k 存储每个类别商品总数
Dim m As Integer, n As Integer
Private Sub Form_Load()
'从数据库读取 m 条记录中类别编号、商品类别数据分别存储在数组 gid、gtype 中
'从数据库读取n 条记录中类别编号、商品名称、商品销量数据分别存储在数组 b、c、s中,代码略

For i = 1 To n       '统计各类别商品总销量及商品总数

______________

k(b(i)) = k(b(i)) + 1

Next i

For i = 1 To m               '计算各类别商品总销量的名次

p = 0

For j = 1 To m

If ts(i) < ts(j) Then p = p + 1

mc(i) = p + 1

Next j

Next i

List1.AddItem "类别   销量   名次"

For i = 1 To m

List1.AddItem gtype(i) + "   " + Str(ts(i)) + "     " + Str(mc(i))

Next i


End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, pos As Integer, tmp As Integer, p As Integer
p = 1

For i = 1 To m

a(i) = p

p = p + k(i)

Next i

For i = 1 To n

p = b(i)

t(a(p)) = i

a(p) = a(p) + 1

Next i

pos = 1

For i = 1 To m       '对各类别商品按商品销量进行排序

For j = pos To pos + k(i) - 2

__________________

tmp =t(j): t(j) = t(p): t(p) = tmp

Next j

pos = pos + k(i)

Next i


List2.AddItem "类别        商品        商品销量"
For i = 1 To n
List2.AddItem     ___________ + " " + geshi(c(t(i))) + "   " +Str(s(t(i)))
Next i
End Sub
Function f(head As Integer, tail As Integer) As Integer

Dim i As Integer, p As Integer

p = head - 1

For i = head To tail

If s(t(i)) > s(t(p)) Then p = i

Next i

f = p

End Function

Function geshi(s As String) As String '格式输出,代码略


End Function
2020-09-11更新 | 49次组卷
共计 平均难度:一般