题库 高中信息

题干

   “中国好声音”节目组要小杰用VB编写一个程序:现场将有900个观众,要在900个观众中产生10个中奖号码的程序,每位观众用三位数字进行编号,要求产生的10个号码不能重复,并且升序排列输出。

①检查产生号码是否重复:把产生的中奖号码放在数组a中,新产生的号码与已经产生的号码进行一一对比,如果找到相等的数,则重新产生新号码。

②找到新产生号码存放的数组下标:从下标为1的数组元素开始,新号码(第i个号码)分别与他们进行一一比较,找到第一个比新号码大的数,该数所在的下标就是新号码应存放的下标。如果在已经产生的数中没有找到比新号码大的数,则新号码应存放在下标为i的数组元素中。下表以产生第5个号码为例,如果产生的号码是130,第一个比他大的数是a(2),下标为2的数组元素应存放新号码;如果产生的号码是300,则新号码应存放在下标为5的数组元素中。


③移动数组元素到新的位置:如果在已经产生的号码中找到比新号码大的数,从上一个产生的号码开始,到新号码应存放的数组元素,依次把他们向后面移动。以②中产生130为例,从a(4)开始,让a(5)的值等于a(4),a(4)的值等于a(3),依次类推,直到新号码应存放的数组元素a(2)为止。

④将新产生的号码放在相应的数组元素中。

程序运行的界面如下图所示,实现上述功能的VB程序代码如下:


Dim a(10) As Single
Private Sub Command1_Click()
Dim i As Integer, j As Integer
Dim temp As Single, k As Integer   'temp产生随机数,k随机数存放数组元素的下标
Randomize
a(1) = Int(Rnd() * 900 + 100)
For i = 2 To 10
temp = Int(Rnd() * 900 + 100)
If seach(temp, i - 1) = True Then
i = i - 1
Else
k = i
For j = 1 To i - 1
If   ①temp < a(i)  Then k = j: Exit For  
Next j
For j = i - 1 To k Step -1
a(j + 1) = a(j)
Next j

End If
Next i
List1.Clear
For i = 1 To 10
List1.AddItem Str(a(i))
Next i
End Sub
'函数实现在数组a中,从下标为1的数组元素到下标为t数组元素,查找有无s的数值
Function seach(s  As Single, t As Integer) As Boolean
Dim i As Integer
seach = False
For i = 1 To t
If      Then seach = True: Exit For
Next i
End Function
(1)程序代码中①划线处有错,应改为:___________________
(2)程序代码中划线处②应填入_________________________
(3)程序代码中划线处③应填入_________________________
上一题 下一题 0.99难度 填空题 更新时间:2019-06-20 08:09:37

答案(点此获取答案解析)

同类题2

(加试题)某活动要从 100 名参赛者中选出成绩最高的前十名给予一定的奖励。活动组织者编写了如下程序,功能是根据成绩进行排序,程序中数组 a 保存所有参赛者的组次,数组 b 保存对应的成绩,如第 1 位参赛者的组次 1 保存在 a(1)中,成绩保存在 b(1)中。程序界面如图所示,左边列表框 List1 中显示原始数据(序号和相应的成绩),单击“排序”按钮(Command1),排序后的结果按成绩从高到低显示前 10 名选手的序号和成绩在列表框 List2 中,若最后一名成绩有相同的也一起输出。界面如下图所示:

实现上述功能的 VB 程序如下,但划线处代码有错,请改正。
Const n=100
Dim a(1 To n) As Integer
Dim b(1 To n) As Integer
Private Sub Form_Load()    '窗体被加载时
‘获取原始数据,将参赛者序号和最后得分分别存在数组 a 和数组 b 内,并在列表框 List1 中显示。代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, k As Integer, temp As Integer
List2.Clear
For i = 1 To 10 k = i
For j = 10 To i+1   ‘________
If b(k) < b(j) Then k = j
End If
Next j
If k <> i Then
temp = b(i): b(i) = b(k): b(k) = temp temp = a(i): a(i) = a(k): a(k) = temp
End If
List2.AddItem Str(a(i)) + "    " + Str(b(i)) Next i
m = 10
For i = 11 To n
If   b(i) = b(i-1)    then    ‘________
m = m + 1
List2.AddItem Str(a(i)) + "    " + Str(b(i)) End If
Next i
Label3.Caption = "本次十佳歌手一共有" + Str(m) + "组"
End Sub

同类题5

某省举办大型活动,面向省内城市招募有志愿服务工作经历的志愿者,每个志愿者的报名数据包含城市序号、姓名(字母缩写)和参加志愿服务的次数。现需整理报名数据,要求是:先按城市序号从小到大排列;然后,同一城市的志愿者按参加志愿服务的次数从多到少排列。
按上述要求,编写一个VB程序,功能如下:在列表框List 1中显示整理前的数据,单击“整理”按钮Command 1,整理结果显示在列表框List 2中,程序运行界面如图所示。

(1)将数组元素q(1)到q(200)分为10段,如果每段恰好包含20个元素,采用选择排序算法分别对每段中的元素进行排序,整个排序过程中,数组元素之间的比较次数是________(单选,填字母:
A.次/B.次/C.次)。
(2)请在划线处填入合适的代码。
    报名总人数
城市数

 存储每个城市的报名人数


Private Sub Form_Load()
本过程读取城市序号,姓名和参加次数的数据分别存储在数组city;pname和times中,
并在List 1中显示,代码略
End Sub
Private Sub Command 1_Click()
Dim i As Integer,j As Integer,k As Integer,t As Integer,pos As Integer


Next i
   统计每个城市报名人数
 ①

Next i




Next i


  

Next i

  对各城市报名数据按参加志愿服务的次数进行排序



Next j

Next i

List 2.AddItem " " & city(q(i))& " " & pname(q(i))& " " & times(q(i))
Next i
End Sub
Function fp(head As Integer,tail As Integer)As Integer
Dim i As Integer,k As Integer

   

Next i

End Function