- 基础理论
- 数据及数据库技术
- 人工智能
- 算法理论
- 算法实例
- + 面向对象程序设计 VB开发工具
- 程序设计语言
- 循环结构
- 分支结构
- 顺序结构
- 类、对象、属性、方法、事件和事件处理的概念
- VB应用程序的界面设计与调试
- 基本数据类型
- 常量、变量、数组
- 常用的标准函数
- 基本运算及表达式
- 赋值语句
- 选择语句
- 循环语句
- 算法实例的程序实现
- 算法及算法的表示方法
- 多媒体理论
- 基础软件操作
- 算法软件操作
- 多媒体软件操作
- 网络技术应用
某校教务处安排选考科目考场办法是这样的:依据上次的考试名次由小到大把考生安排到各考场(考场号从 1 开始编号),每个考场 35 人,7 行 5 列,S 形排列。为方便教务人员快速将每次考试每科考场座位表打印出来,技术组老师利用VB 编写了一个程序,相关信息、程序界面及代码如下,为实现上述功能,请回答以下问题:
(1)根据程序代码可以知道,安排考场的原始数据来自_______________数据库的_______________数据表。
(2)完善①②③处程序代码。

Dim xm (1 To 1000) As String, dayinkm (1 To 1000) As String
Dim zuhe(1 To 1000) As String,mc(0 To 1000) As Integer, n As Integer
Private Sub Command1_Click()
Dim conn As New ADODB. Connection 'conn 是数据库链接对象
Dim rs As New ADODB. Recordset 'rs 是数据记录集对象
conn. Open "Provider=Microsoft. Jet. OLEDB. 4. 0;Data Source=" & App. Path & "\xk. accdb" & ";"
Jet OLEDB:Database Password=""
strSQL = "SELECT∗FROM 2019xk"
' 考号、姓名信息存放在 xm 数组;7 选 3 选课组合存放 zuhe 数组;名次存放 mc 数组,代码略
Label3. Caption = "共有" + Str(n) + "人"
' 学生总人数存放变量 n 中
End Sub
' 下面代码是:先按名次升序排序,再筛选要打印的学科到数组 xinkm
Private Sub Command2_Click()
Dim xk(1 To 7) As Integer,t As String
For i =①_________
t1 = mc(i): t2 = xm(i): t3 = zuhe(i): j = i- 1
Do While t1 < mc(j)
mc(j + 1) = mc(j): xm(j + 1) = xm(j): zuhe (j + 1) = zuhe(j)
j = j - 1
Loop
mc(j + 1) = t1: xm(j + 1) = t2: zuhe(j + 1) = t3
Next i
'将排序后的数据输出到列表框 list1 中,代码略km = "物理化学生物政治历史地理技术":dykm =
Text1. Text
For i = 1 To 7
If②__________Then kmh = i: Exit For
Next i
k = 1
For i = 1 To n
For j = 1 To 3
If dykm = Mid(zuhe(i), 2 ∗ (j - 1) + 1,2) Then
xk(kmh) = xk(kmh) + 1
dayinkm(k) = xm(i)
k = k + 1
End If
Next j
Next i
Label2. Caption = "选考" + dykm + "学科共有" +Str(xk(kmh)) + "人"
End Sub
'将数组 dayinkm 中的数据按考场 S 形输出
Private Sub Command3_Click()
Dim kc As Integer
Dim p As Integer, q As Integer
Dim i As Integer, num As Integer, ks As Inte⁃
ger
List2. Clear
List2. AddItem "讲台"
List2. AddItem "----------"
p = 7: q = 5: kc = Val(Text2. Text)
ks = q ∗ p ∗ (kc - 1)
For i = 1 To p
ks = ks + 1
s = " " + xinkm(ks)
For j = 1 To q - 1
If j Mod 2 = 1 Then
③_________
Else
num = ks + p ∗ j
End If
If num > n Then
s = s + " "
Else
s = s + " " + xinkm(num)
End If
Next j
List2. AddItem s
List2. AddItem "----------"
Next i
End Sub
(1)根据程序代码可以知道,安排考场的原始数据来自_______________数据库的_______________数据表。
(2)完善①②③处程序代码。

Dim xm (1 To 1000) As String, dayinkm (1 To 1000) As String
Dim zuhe(1 To 1000) As String,mc(0 To 1000) As Integer, n As Integer
Private Sub Command1_Click()
Dim conn As New ADODB. Connection 'conn 是数据库链接对象
Dim rs As New ADODB. Recordset 'rs 是数据记录集对象
conn. Open "Provider=Microsoft. Jet. OLEDB. 4. 0;Data Source=" & App. Path & "\xk. accdb" & ";"
Jet OLEDB:Database Password=""
strSQL = "SELECT∗FROM 2019xk"
' 考号、姓名信息存放在 xm 数组;7 选 3 选课组合存放 zuhe 数组;名次存放 mc 数组,代码略
Label3. Caption = "共有" + Str(n) + "人"
' 学生总人数存放变量 n 中
End Sub
' 下面代码是:先按名次升序排序,再筛选要打印的学科到数组 xinkm
Private Sub Command2_Click()
Dim xk(1 To 7) As Integer,t As String
For i =①_________
t1 = mc(i): t2 = xm(i): t3 = zuhe(i): j = i- 1
Do While t1 < mc(j)
mc(j + 1) = mc(j): xm(j + 1) = xm(j): zuhe (j + 1) = zuhe(j)
j = j - 1
Loop
mc(j + 1) = t1: xm(j + 1) = t2: zuhe(j + 1) = t3
Next i
'将排序后的数据输出到列表框 list1 中,代码略km = "物理化学生物政治历史地理技术":dykm =
Text1. Text
For i = 1 To 7
If②__________Then kmh = i: Exit For
Next i
k = 1
For i = 1 To n
For j = 1 To 3
If dykm = Mid(zuhe(i), 2 ∗ (j - 1) + 1,2) Then
xk(kmh) = xk(kmh) + 1
dayinkm(k) = xm(i)
k = k + 1
End If
Next j
Next i
Label2. Caption = "选考" + dykm + "学科共有" +Str(xk(kmh)) + "人"
End Sub
'将数组 dayinkm 中的数据按考场 S 形输出
Private Sub Command3_Click()
Dim kc As Integer
Dim p As Integer, q As Integer
Dim i As Integer, num As Integer, ks As Inte⁃
ger
List2. Clear
List2. AddItem "讲台"
List2. AddItem "----------"
p = 7: q = 5: kc = Val(Text2. Text)
ks = q ∗ p ∗ (kc - 1)
For i = 1 To p
ks = ks + 1
s = " " + xinkm(ks)
For j = 1 To q - 1
If j Mod 2 = 1 Then
③_________
Else
num = ks + p ∗ j
End If
If num > n Then
s = s + " "
Else
s = s + " " + xinkm(num)
End If
Next j
List2. AddItem s
List2. AddItem "----------"
Next i
End Sub
某排序算法的 VB 程序段如下:
K=1
For i = 1 To 2
For j = 1 To 6 - 2 ∗i
If K∗a(j) < K∗a(j + 2) Then
t = a(j): a(j) = a(j + 2): a(j + 2) = t
End If
K=-K
Next j
Next i
数组元素 a(1) ~a(6)的初始值依次为“10,15,8,35,26,17”,执行该程序段后,数组 a 元素的值分别为( )
K=1
For i = 1 To 2
For j = 1 To 6 - 2 ∗i
If K∗a(j) < K∗a(j + 2) Then
t = a(j): a(j) = a(j + 2): a(j + 2) = t
End If
K=-K
Next j
Next i
数组元素 a(1) ~a(6)的初始值依次为“10,15,8,35,26,17”,执行该程序段后,数组 a 元素的值分别为( )
A.8,10,15,17,26,35 | B.35,26,17,15,10,8 |
C.26,35,10,17,8,15 | D.26,15,10,17,8,35 |
(加试题)有如下VB程序段:
a(1)=1
For i=2 To 6
Randomize
a(i)=a(i-1)+Int(Rnd*5+1)
If a(i) Mod 2=1 Then
a(i)=a(i)\2+1
EIse
a(i)=a(i)/2
End If
Next i
执行程序后,a数组各元素可能是
a(1)=1
For i=2 To 6
Randomize
a(i)=a(i-1)+Int(Rnd*5+1)
If a(i) Mod 2=1 Then
a(i)=a(i)\2+1
EIse
a(i)=a(i)/2
End If
Next i
执行程序后,a数组各元素可能是
A.1 3 4 6 7 9 | B.1 2 0 3 5 6 | C.1 2 3 4 5 4 | D.1 3 4 5 1 1 |
给定一个序列 a,这个序列由 n 个数组成(n 个数依次保存在数组 a(1) ~a(n)中),现在给定一个整数 p,要求将序列 a的前 p 个数与后 n-p 个数对调,且不改变这 p 个数(和 n-p个数)之间的相对位置。例如长度为 5 的序列 1,2,3,4,5,当 p=2 时重排的结果为 3,4,5,1,2。
我们可以用两种不同的方法来实现这一目的:
方法一:逐个地将数组 a 的后 n-p 个数依次移动到前面去。
数组 a:



方法二:将前 p 个数看作一个区间,后 n-p 个数看作另一个区间,依次将数交换,同时缩小区间的大小;若某一个区间达到末尾,则调整区间的范围,直到两个区间刚好同时达到末尾,即调整结束。
数组 a:

互换并调整区间:第一个区间结束且第二个区间还有元素,调整区间 1 和区间 2 的范围,如图将区间 1 调整为[3,4],区间 2 调整为[5:5]。

互换并调整区间:第二个区间结束且第一个区间还有元素,仅调整第 1 个区间的起始位置。

互换并结束:两个区间同时到达末尾。
小明依据上面的方法设计了 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
请回答下列问题:
(1)若序列为:9,8,13,22,7,6,5,37,6,p=4 时,使用方法一,则 a(3)的值依次是 13,_________________(用逗号隔开,顺序填写曾存储过的值)。
(2)请在划线处填入合适的代码。
①_______________________
②_______________________
③_______________________
④_______________________
我们可以用两种不同的方法来实现这一目的:
方法一:逐个地将数组 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
请回答下列问题:
(1)若序列为:9,8,13,22,7,6,5,37,6,p=4 时,使用方法一,则 a(3)的值依次是 13,_________________(用逗号隔开,顺序填写曾存储过的值)。
(2)请在划线处填入合适的代码。
①_______________________
②_______________________
③_______________________
④_______________________
有如下VB程序段:
Dim x As String, y As String
Dim ans As Integer
x = "5": y="20": ans = 0
If x > y Then
ans = val(x)-1
Else
ans= Val(y)+1
ans= ans+ Val(x +y)
Text1. Text = Str(ans)
执行该程序段后,文本框Text1中显示的是( )
Dim x As String, y As String
Dim ans As Integer
x = "5": y="20": ans = 0
If x > y Then
ans = val(x)-1
Else
ans= Val(y)+1
ans= ans+ Val(x +y)
Text1. Text = Str(ans)
执行该程序段后,文本框Text1中显示的是( )
A.46 | B.29 | C.524 | D.541 |
如下VB程序段“a=13 b=32 a=b”关于语句“a=b”的含义,下列叙述中正确的是( )。
A.把变量a的值赋给变量b |
B.判断变量a的值是否等于变量b的值 |
C.把变量b的值赋给变量a |
D.把变量a的值与变量b的值交换 |
某算法流程图如图所示,若输入k的值为11,执行这部分流程后,最终输出的s,i的值分别为( )

A.18,12 | B.18,11 | C.19,12 | D.19,11 |
某算法流程图如下图所示,该流程图完整执行一次后,下列说法错误的是( )


A.变量s存储的值为![]() |
B.变量i的值为30 |
C.语句“s←s+i”共执行了10次 |
D.语句“i<30”共执行了30次 |
已知赋值语句 s="Good Bye!",则下列定义变量s正确的是( )
A.dim s as integer |
B.dim s as long |
C.dim s as double |
D.dim s as string |