num = 0
For i = 1 To 3
For j = 8 To i + 1 Step -1
If a(j) < = a(i) Then
temp = a(j): a(j) = a(i): a(i) = temp
num = num +1
End If
Next j
Next i
数组元素a(1)到a(8)的值依次为“25,44,16,34,57,25,34,60”,执行该程序段,变量num的值是( )
s=“7218634594” : n=Len(s): c=0
For i=1 To n-1
a(i)=Val(Mid(s, i, 2))
Next i
For i=1 To n-2 Step 2
k=i
For j=i+2 To n-1 Step 2
If a(j) < a(k) Then k=j
Next j
If k <> i Then
t=a(i): a(i)=a(k): a(k)=t: c=c+1
End If
Next i
Text1.Text=Str(c)
该程序段运行后,Text1中显示的内容是( )
实现以上功能的VB程序如下,在横处填入合适的代码。
Dim a(1 To 20) As Integer ‘存储区间的左端点数值
Dim b(1 To 20) As Integer ‘存储区间的右端点数值
Private Sub Form_Load()
‘将区间左端点存入数组a,区间右端点存入数组b,并在列表框List1显示,代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer
Dim curL As Integer, curR As Integer
For i=1 To n-1
For j=1 To n-i
IfThen
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
curL=a(1): curR=b(1)
For i=2 To n
IfThen
If curR < b(i) Then
Else
List2.AddItem“["+Str(curL)+Str(curR)+"]”
curL=a(i): curR=b(i)
End If
Next i
List2. AddItem “[”+Str(curL)+Str(curR)+“]”
End Sub
For i = 1 To n - 1
t = n - (n + i) Mod 2
For j = t To i + 2 Step -2
If d(j) > d(j - 2) Then t = d(j):d(j) = d(j - 2):d(j - 2)= t
Next j
Next i
已知n = 10,数组元素d(1)到d(10)的原始数据为1、2、3、4、5、6、7、8、9、10,程序运行后,d(10)的值为( )
s = “”
For i=1 To 3
For j = 7 To i + 1 Step-1
If a(j) < a(j-1) Then
k=a(1) : a(j) = a(-1) : a(j-1)=k
End if
Next j
s= s+ Str(a(i))
Next i
Text1. Text = s
数组元素a(1)到a(7)的数据依次为3,9,1,5,8,6,,经过该程序段“加工”后,文本框Text1中显示的内容是( )
实现上述功能的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, j As Integer,x As Integer
For i=1 To 100
k=Int (Rnd*7+3) ‘k表示第i个字符串的长度
For j = 1 To k ‘通过循环产生第i个字符串并存储在a(i)中
If Int(Rnd*2+1) = 1 Then ‘ 产生一个小写字母的 ASCⅡ码值
x = Asc("a")+ Int (Rnd*26)
Else
x = Asc("A") + Int(Rnd*26) ‘ 产生一个大写字母的ASCⅡ码值
①
a(i) = a(i)+Chr (x)
Next j
List1 AddItem a(i)
Next i
End Sub
Private sub command2_Click( )’ 对100个字符串按字符串权值降序排序
Dim i As Integer, j As Integer, y As Integer, s As string
For i =1 To 99
k =1
For = i + 1 To 100
③
Next j
If k <> Then
s = a(k) : a(k) = a(1) : a(1) = s
y = b(k) : b(k) = b(1):b(i) = y
End If
Next i
For i=1 To 100
List2 AddItem a(i)
Next i
End sub
① ② ③
排序前 |
55 |
70 |
70 |
78 |
71 |
79 |
75 |
80 |
80 |
90 |
排序后 |
55 |
70 |
70 |
71 |
75 |
78 |
79 |
80 |
80 |
90 |
查找该组数据中满足[k1, k2]范围的数据个数为:8 |
实现上述功能的VB程序如下,请回答下列问题:
Private Sub Command1_Click()
Const n = 10
Dim a(1 To n) As Integer, k As Integer
Dim i As Integer, j As Integer, k1 As Integer, k2 As Integer
Dim p As Integer, q As Integer
Dim b As Integer '查找满足条件的第一个数据所在数组元素的下标
'读取排序前的一组正整数,存储在数组a中。代码略
p= Val(Text1.Text)
q = Val(Text2.Text)
For i = p To q - 1
For j = Step -1
If a(j) < a(j - 1) Then
k = a(j): a(j) = a(j - 1): a(j - 1) = k
End If
Next j
Next i
k1 = Val(Text3.Text)
k2 = Val(Text4.Text)
i = 1: j = n
Do While i <= j
m = (i + j) \ 2
If ① Then
i = m + 1
Else
j = m - 1
End If
Loop
b = ②
i = 1: j = n
Do While i <= j
m = (i + j) \ 2
If a(m) <= k2 Then
i = m + 1
Else
j = m - 1
End If
Loop
Label1.Caption = Str ③
End Sub
① ② ③
①老年人(年龄≥60岁)比非老年人优先就诊;
②老年人按年龄从大到小的顺序就诊,年龄相同的按预约顺序就诊;
③非老年人按预约顺序就诊。
小王根据以上规则编写了一个VB程序,通过引入索引数组temp进行排序,使得age(temp(1))≥age(temp(2))≥age(temp(3))…≥age(temp(n))。如图a所示。
图a
图b
程序运行时,病人的数据显示在列表框List1中,单击“就诊排序”按钮Command1,排序结果显示在列表框List2中,程序运行界面如图b所示。
实现上述功能的VB程序如下,请回答下列问题:
Dim pname(1 To 100)As String ‘存放病人姓名
Dim age(1 To 100)As Integer ‘存放病人年龄
Dim num(1 To 100)As Integer ‘存放病人序号
Dim n As Integer
Private Sub Command1_Click( )
Dim temp1(1 To 100)As Integer, temp2(1 To 100)As Integer ‘索引数组
Dim i As Integer, j As Integer, k1 As Integer, k2 As Integer, t As Integer
k1=0:k2=0
For i=1 To n
If age(i)<60 Then
k1=k1+1
temp1(k1)=num(i)
Else
k2=k2+1
temp2(k2)=num(i)
End If
Next i
For i=1 To k2-1
For j=k2 To i+1 Step-1
If ① Then
t=temp2(j):temp2(j)=temp2(j-1):temp2(j-1)=t
End If
Next j
Next i
List2.Clear
List2.Addltem "就诊号 名单 年龄"
For i=1 To k2
List2.Addltem Str(i)&." "&.pname(temp2(i))&"r/&.Str(age(temp2(i)))
Next i
For j=1 To k1
List2.Addltem ② &" "&pname(templ(j)&" "&.Str(age(templ(j)))
Next j
End Sub
Private Sub Form_Load( )
Dim conn As New ADODB. Connection, rs As New ADODB. Recordset
Conn.ConnectionString="Provider=Microsoft. ACE. OLEDB. 12.0;DataSource="&App. Path&"\pdxt.accdb"
conn.Open
Set rs. ActiveConnection=conn
rs. Open"select*from jzmd"
n=0
List1.AddItem"预约号 名单 年龄"
Do While Not rs. EOF
③
num(n)=n
pname(n)=rs. Fields(1)
age(n)=rs Fields(2)
List1. Addltem Str(num(n))&" "&-pname(n)&." "&.Str(age(n))
rs. MoveNext
Loop
rs.Close:conn.Close
End Sub
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③。
For i=1 To 3
k=i
For j=i+1 To 6
If a(j)>a(k)Then k=j
Next j
t=a(i):a(i)=a(k):a(k)=t
Next i
若数组元素a(1)到a(6)的值依次为“8,2,9,3,5,1”,则经过该程序段“加工”后,数组元素a(1)到a(5)的值依次为( )
图1
小孟同学用VB编写模拟“节目队形”程序,功能如下:从数据库中导入所有学生的编号、性别和身高数据;单击“筛选并排序”Command1按钮,筛选出所有男生的身高并按照从低到高的顺序进行排序,结果显示在文本框Text1中;单击“设计队形”Command2按钮,队形的编号结果显示在文本框Text2中。程序运行界面如图 2 所示。
图2
举例说明如下:
实现上述功能的 VB 程序如下,请回答下列问题:
Const n = 8
Dim h(1 To n) As Integer, num1(1 To n) As Integer, num2(1 To n) As Integer Dim sex(1 To n) As Boolean '男生 sex = True,女生 sex = False
Dim i As Integer, j As Integer, m As Integer
Private Sub Form_Load()
'n名学生(包括男生和女生)的编号、性别和身高由数据库导出,分别存储在数组num1、h和sex中,代码略!
End Sub
Private Sub Command1_Click()
For i = 1 To n - 1
For j = n To i + 1 Step -1
If sex(j) = True Then
If Then
t = h(j): h(j) = h(j - 1): h(j - 1) = t
t = sex(j): sex(j) = sex(j - 1): sex(j - 1) = t
t = num1(j): num1(j) = num1(j - 1): num1(j - 1) = t
End If
End If
Next j
Next i
For i = 1 To n
If sex(i) Then
Text1.Text = Text1.Text + " " + Str(h(i))
End If
If Not sex(i) Then : Exit For '改错
Next i
End Sub
Private Sub Command2_Click()
Dim L, R As Integer, mid As Integer
mid = Int((1 + m) / 2) L = 0: R = 0
For i = 2 To m Step 2
R = R + 1
num2(mid + R) = num1(i)
L = L + 1
Next i
For i = 1 To m
Text2.Text = Text2.Text + " 男" + CStr(num2(i)) + "号 "
Next i
End Sub
1)将原始数据按升序分成若干有序段。
2)将第1段和第2段进行合并,使得合并后的数据依旧有序,得到新的有序段。
3)将新的有序段再次和下一个有序段进行合并。
4)重复上述操作,直到全部数据变成一个有序段为止,排序结束。
如数据:1、3、9、4、5、7、2、6,第1段为1、3、9,第2段为4、5、7,将第1段和第2段合并,得到新的第1段为1、3、4、5、7、9。继续和下一段2、6进行合并,合并后段数变为1段,则排序结束。
编写VB程序,实现分段排序功能:在文本框Text1中输入数据总量,单击“数据生成”按钮Command1后,在列表框List1中显示原始数据,然后单击“分段排序”按钮Command2,在列表框List2中显示排序后的结果。程序运行界面如图所示。
请回答下列问题:
A .List1.Clear / B .List1.List="" / C .List1.Text="" / D .List1.Caption="空白" )。
Dim a(1 To 1000) As Integer
Dim n As Integer
Private Sub Command1_Click()
'输入数据总量n,随机生成n个数据保存在数组
'a(1)~a(n)中,并在List1中显示数据,代码略
End Sub
Private Sub Command2_Click()
Dim b(1 To 10000) As Integer
Dim p1 As Integer, p2 As Integer, t1 As Integer, t2 As Integer
Dim t As Integer, k As Integer, i As Integer, j As Integer
p1 = 1
t1 = leng(p1)
p2 = p1 + t1
Do While p2 <= n
i = p1: j = p2: t = 1
Do While i < p2 Or j < p2 + t2
If j >= p2 + t2 Or i < p2 And a(i) < a(j) Then
b(t) = a(i): i = i + 1
Else
b(t) = a(j): j = j + 1
End If
t = t + 1
Loop
For k = 1 To
a(k) = b(k)
Next k
t1 = t1 + t2
Loop
'在List2中输出数组a(i)的值,代码略
End Sub
Function Leng(ByVal p As Integer) As Integer
'该函数返回数组a中数组下标p开始的升序有序段的长度,代码略
End Function
For i=1 To n-1
For j=________
If a(j)<a(j -1) Then
t=a(j): a(j)=a(j-1): a(j-1)=t
End If
Next j
Next i
为了使此程序段能实现数组a中的数据升序排列,则划线处应填入的代码是( )。
tail=6: i=1: r=2
Do While i<r
For j= tail To i+1 Step-1
If a (j)> a(j-1) Then
t=a(j):a(j)=a(j-1):a(j-1)=t
End If
Next j
i=i+1
For j=i To tail-1
If a(j)<a(j+1) Then
t=a(j):a(j)=a(j+1):a(j+1)=t
End If
Next j
tail=tail-1
Loop
数组元素值“73、56、28、61、44、92”,运行程序,数组元素a(1)到a(6)的值依次为( )
实现上述功能的VB程序如下,请回答下列问题:
Dim book(1 To 100) As String '存储书籍的编号
Dim bname(1 To 100) As String '存储书籍的书名
Dim pos(1 To 100) As String '存储书籍所在阅览室的位置
Dim rroom(1 To 4) As String '存储每个阅览室存放书籍的大类
Dim n As Integer'在架书籍总数
Private Sub Form_ Load ()
'在架书籍根据编号进行升序排序,书籍编号、书籍名称和所在阅览室的位置分别存放在数组book、bname 和pos中,在架书籍总数为n,代码略
rroom(1)="ABCDEF":rroom(2)="GHIJKN"
rroom(3)="OPQRST":rroom(4)="UVXZ" '每个阅览室存放的书籍大类
End Sub
Private Sub Command1_Click ()
Dim id As Integer,i As Integer,key1 As String,key2 As String,flag As Integer
Dim start1 As Integer,end1 As Integer
id = Val(Text1. Text)
key1= Mid(rroom(id),1,1)
key2=
start1 =check (key1,1)
end1 = check (key2,-1)
For i = start1 to
List1.AddItem "编号:"+gs(book(i))+"位置:"+gs(pos(i))+"书名:"+gs (bname(i))
Next i
End Sub
Function check(key As String, flag As Integer) As Integer
Dim left As Integer, right As Integer, m As Integer
left=1:right=n
Do While left <= right
m= (left + right) \ 2
If Then
right= m - 1
Else
left=m+1
End If
Loop
check = left
End Function
Function gs(s As String) As String
Dim i As Integer
For i=1To15-Len(s)
s=s+""
Next i
gs=S
End Function
Dim a(1 to 5) as integer
Dim b(1 to 20) as integer
a(1)=10: a(2)=9: a(3)=17: a(4)=18: a(5)=13
for i=1 to 5
b(a(i))=b(a(i))+1
next i
num =0
for j=1 to 20
for k=1 to b(j)
num=num+1
a(num)=j
next k
next j
执行该程序段后,数组元素a(1)到a(5)的值依次为( )
●对各个活动按结束时间先后进行升序排序,若结束时间相同,按开始时间先后升序排序。
●先安排结束时间最早的活动,依次考虑未安排的活动,如果和已安排的活动没有时间冲突,则予以安排;否则,不予安排。
小明为此编写了VB程序,功能如下:在列表框List1读取活动编号、活动时间(开始时间-结束时间)。按编号依次显示。单击“统筹安排”按钮Command1,对申请的活动按规定进行排序,并在列表框List2中输出当天能安排的活动编号、活动时间和数量。程序运行界面如图所示:
Dim a(1 To 100)As Integer, b(1 To 100)As Integer, c(1 To 100)As Integer
Dim m As Integer
Private Sub Form_Load( )
'从数据库中读取活动编号、开始时间和结束时间,分别存储在数组c、a、b中,并在列表框list1中显示;统计收到的活动申请数量,存储在变量m中
'代码略
End Sub
Private Sub Command1_ Click( )
Dim i As Integer,j As Integer,k As Integer
Dim temp As Integer,n As Integer, last As Integer
'对各个活动按时间进行排序
For i=1 To m-1
k=i
For j=i+ 1 To m
If b(c(j)) < b(c(k)) Then
k=j
ElselIf Then
k=j
End If
Next j
If k<> I Then
temp = c(k):e(k) = c(i): c(i)=temp
End If
Next i
last = b(c(1))
'CStr(n)将n转换成字符串并去除字符串前空格
List2.AddItem " "+ adj((c(1)),4)+ CStr(a(c(1)))+ "-" + CStrb(c(1)))
For i= 2 To m
If a(c(i)) >= last Then
List2.AddItem " "+ adj((c(i)),4)+ CStr(a(c(i)))+ "-" + CStrb(c(i)))
n=n+ 1
End If
Next i
List2.AddItem “最多能安排" & CStr(n)& "个活动”
End Sub
Function adj(a A s String, b A s Integer)
'将字符串对齐输出,代码略
End Function
n= 6
For i= 1 To 2
k=i
j=i+ 1
Do While j<= 3
If a(k) < a(j) Then k=j
j=j+ 1
Loop
If i<> k Then
t= a(i): a(i) = a(k): a(k)= t
End If
m=n-i+ 1
For j= m- 1 To 4 Step -1
If a(m)> a(j) Then m=j
Next j
If m<>n-i+ 1 Then
t= a(n-i+1):a(n-i+ 1)= a(m): a(m)= t
End If
t= a(i): a(i)= a(n-i+ 1):a(n-i+ 1)=t
Next i
数组元素a(1)到a(6)的初始值依次为“39,40,35,21,33,32”,运行程序后,a(4)的值是( )
我们可以用两种不同的方法来实现这一目的:
方法一:逐个地将数组a的后n-p个数依次移动到前面去。
数组 a:
1 |
2 |
3 |
4 |
5 |
3 | 1 | 2 | 4 | 5 |
3 | 4 | 1 | 2 | 5 |
3 | 4 | 5 | 1 | 2 |
方法二:将前p个数看作一个区间,后n-p个数看作另一个区间,依次将数交换,同时缩小区间的大小;若某一个区间达到末尾,则调整区间的范围,直到两个区间刚好同时达到末尾,即调整结束。
数组a:
互换并调整区间:第一个区间结束且第二个区间还有元素,调整区间 1 和区间 2 的范围,如图将区间 1 调整为[3,4],区间 2 调整为[5:5]。
互换并调整区间:第二个区间结束且第一个区间还有元素,仅调整第 1 个区间的起始位置。
互换并结束:两个区间同时到达末尾。
3 | 4 | 5 | 1 | 2 |
小明依据上面的方法设计了VB程序如下:
Dim a(1 To 100), i As Integer, j As Integer, tmp As Integer, p As Integer
Dim start1 As Integer, end1 As Integer, start2 As Integer, end2 As Integer '将序列保存到数组a中,序列长度保存到n中,移动数字的个数保存在p中
Private Sub Command2_Click() '用方法一实现
For i = p + 1 To n
tmp = a(i)
For j = i To ① Step -1
a(j) = a(j - 1)
Next j
② = tmp
Next i
End Sub
Private Sub Command3_Click() '用方法二实现
start1 = 1: end1 = p '第1个区间的起始状态
start2 = p + 1: end2 = n '第2个区间的起始状态
i = start1: j = start2
Do While ③
i = start1: j = start2
Do While i <= end1 And j <= end2
tmp = a(i): a(i) = a(j): a(j) = tmp
i = i + 1:j = j + 1
Loop
If i <= end1 Then '第2个区间结束且第1个区间还有元素
start1 = i
ElseIf j <= end2 Then '第1个区间结束且第2个区间还有元素
start1 = i: ④
start2 = j
End If
Loop
End Sub
请回答下列问题:
① ② ③ ④