- 基础理论
- 数据及数据库技术
- 人工智能
- 算法理论
- 算法实例
- 面向对象程序设计 VB开发工具
- + 算法实例的程序实现
- 过程和自定义函数
- 枚举算法及程序实现
- 解析算法及程序实现
- 递归算法及程序实现
- 排序算法及程序实现
- 查找算法及程序实现
- 算法及算法的表示方法
- 多媒体理论
- 基础软件操作
- 算法软件操作
- 多媒体软件操作
- 网络技术应用
(加试题)下列有关排序和查找算法的说法正确的是( )
A.对N个数组元素进行排序,冒泡排序比选择排序的交换次数少 |
B.对N个数组元素进行排序,冒泡排序比选择排序的比较次数多 |
C.能用对分查找完成的任务,就一定可以使用顺序查找 |
D.只要待查找的数据是有序的,使用对分查找比顺序查找的效率高 |
在以下数组a中,采用对分查找思想查找数据"all",则以下说法正确的是( )。
a(1) | a(2) | a(3) | a(4) | a(5) | a(6) | a(7) |
all | bro | car | due | eve | fre | geo |
A.只需查找1次就能找到数据"all" |
B.第2次查找的范围是a(1)——a(4) |
C.查找过程中依次被访问到的数据是"due"、"bro"、"all" |
D.该数组中存放的都是字符型数据,无法使用对分查找 |
(加试题)火柴棒等式。用火柴棒可以摆出0-9的数字,摆放规则如下图所示:

有一种火柴棒游戏,将火柴棒摆成形如“A+B=C”的火柴棒等式。用n根火柴棒摆放数学等式的规则约定如下:
(1)A、B都是不大于1000的正整数,若数值非零,则最高位不能是0
(2)摆放“+”与“=”各使用两根火柴棒
(3)A+B=C 与 B+A=C 视为相同的等式
(4)n根火柴棒必须全部用上
小明依据上述规则使用VB编写程序,研究“使用n根火柴棒,可以摆放出哪些不同的等式”,代码如下所示。请回答下列问题。
(1)请在划线处填入合适的代码。①__________,②__________,③________;
(2)某次运行程序时,显示的等式中包含“7+17=24”,根据程序分析,输入的n的值为:______。
Dim sz(0 To 9) As Integer ’数组元素sz(i)用于存储数字i所使用的火柴棒的数量
Private Sub Form_Load()
sz(0) = 6 : sz(1) = 2 : sz(2) = 5 : sz(3) = 5 : sz(4) = 4
sz(5) = 5 : sz(6) = 6 : sz(7) = 3 : sz(8) = 7 : sz(9) = 6
End Sub
‘自定义函数hcs用于求解摆放数字x需要使用的火柴棒数量
Function hcs(ByVal x As Integer) As Integer
Dim s As Integer,k as integer
s = 0
Do While ①
k = x Mod 10
s=s+sz(k)
x = x \ 10
Loop
hcs = s + sz(x)
End Function
Private Sub Command1_Click()
Dim n As Integer
Dim a As Integer, b As Integer, c As Integer
n = Val(Text1.Text)
ans = 0
List1.Clear
For a = 0 To 999
For b = ② To 999
c = a + b
If ③ Then
List1.AddItem (Str(a) + "+" + Str(b) + "=" + Str(c))
ans = ans + 1
End If
Next b
Next a
List1.AddItem ("共有" + Str(ans) + "种等式")
End Sub

有一种火柴棒游戏,将火柴棒摆成形如“A+B=C”的火柴棒等式。用n根火柴棒摆放数学等式的规则约定如下:
(1)A、B都是不大于1000的正整数,若数值非零,则最高位不能是0
(2)摆放“+”与“=”各使用两根火柴棒
(3)A+B=C 与 B+A=C 视为相同的等式
(4)n根火柴棒必须全部用上
小明依据上述规则使用VB编写程序,研究“使用n根火柴棒,可以摆放出哪些不同的等式”,代码如下所示。请回答下列问题。
(1)请在划线处填入合适的代码。①__________,②__________,③________;
(2)某次运行程序时,显示的等式中包含“7+17=24”,根据程序分析,输入的n的值为:______。
Dim sz(0 To 9) As Integer ’数组元素sz(i)用于存储数字i所使用的火柴棒的数量
Private Sub Form_Load()
sz(0) = 6 : sz(1) = 2 : sz(2) = 5 : sz(3) = 5 : sz(4) = 4
sz(5) = 5 : sz(6) = 6 : sz(7) = 3 : sz(8) = 7 : sz(9) = 6
End Sub
‘自定义函数hcs用于求解摆放数字x需要使用的火柴棒数量
Function hcs(ByVal x As Integer) As Integer
Dim s As Integer,k as integer
s = 0
Do While ①
k = x Mod 10
s=s+sz(k)
x = x \ 10
Loop
hcs = s + sz(x)
End Function
Private Sub Command1_Click()
Dim n As Integer
Dim a As Integer, b As Integer, c As Integer
n = Val(Text1.Text)
ans = 0
List1.Clear
For a = 0 To 999
For b = ② To 999
c = a + b
If ③ Then
List1.AddItem (Str(a) + "+" + Str(b) + "=" + Str(c))
ans = ans + 1
End If
Next b
Next a
List1.AddItem ("共有" + Str(ans) + "种等式")
End Sub
(加试题)使用VB程序研究“回文素数在素数表中的位置”,程序运行界面如下图所示。程序将10000以内的全部素数按顺序保存到数组a中,在文本框中输入需要查找的回文数,单击“查找”按钮command1,在标签label1中显示该回文素数在全部素数中的位置。

实现上述功能的程序如下,加框处的代码有错,请改正。
Dim a(1 To 10000) As Integer
Dim n As Integer
Private Sub Form_Load()
‘将1000以内的素数从小到大依次存入数组a中
‘将素数的个数存入变量n中
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, mid As Integer
Dim key As Integer, flag As Boolean
key = Val(Text1.Text)
If key > 10000 Or Not hws(key) Then
MsgBox "输入的数据不是10000以内的回文数"
Else
i = 1 : j = n
flag = False
Do While flag = False
mid = (i + j) \ 2
If key > a(mid) Then
i = mid + 1
ElseIf key < a(mid) Then
j = mid - 1
Else
flag = True
End If
Loop
If Not flag Then
Label1.Caption = "该回文数不是素数"
Else
Label1.Caption = "回文素数" + Str(key) + "是第" + Str(mid) + "个素数"
End If
End If
End Sub
‘自定义函数 hws(y)用于判断y是否是回文数
Function hws(y As Integer) As Boolean
Dim x As Integer, k As Integer
x = 0: k = y
hws = True
Do While k > 0
x = x + k Mod 10
k = k \ 10
Loop
If x <> y Then hws = False
End Function

实现上述功能的程序如下,加框处的代码有错,请改正。
Dim a(1 To 10000) As Integer
Dim n As Integer
Private Sub Form_Load()
‘将1000以内的素数从小到大依次存入数组a中
‘将素数的个数存入变量n中
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, mid As Integer
Dim key As Integer, flag As Boolean
key = Val(Text1.Text)
If key > 10000 Or Not hws(key) Then
MsgBox "输入的数据不是10000以内的回文数"
Else
i = 1 : j = n
flag = False
Do While flag = False
mid = (i + j) \ 2
If key > a(mid) Then
i = mid + 1
ElseIf key < a(mid) Then
j = mid - 1
Else
flag = True
End If
Loop
If Not flag Then
Label1.Caption = "该回文数不是素数"
Else
Label1.Caption = "回文素数" + Str(key) + "是第" + Str(mid) + "个素数"
End If
End If
End Sub
‘自定义函数 hws(y)用于判断y是否是回文数
Function hws(y As Integer) As Boolean
Dim x As Integer, k As Integer
x = 0: k = y
hws = True
Do While k > 0
x = x + k Mod 10
k = k \ 10
Loop
If x <> y Then hws = False
End Function
有如下程序段:
i=1
Do while i<=2
j=1
Do while j<=7-i
If a(j) > a(j+1) Then
t = a(j): a(j) = a(j+1): a(j+1) = t
End If
j=j+1
Loop
i=i+1
Loop
数组元素a(1)到a(7)的值依次为“44,24,33,67,77,58,12”,经过该程序段“加工”后,数组元素a(1)到a(7)的值依次为 ( )
i=1
Do while i<=2
j=1
Do while j<=7-i
If a(j) > a(j+1) Then
t = a(j): a(j) = a(j+1): a(j+1) = t
End If
j=j+1
Loop
i=i+1
Loop
数组元素a(1)到a(7)的值依次为“44,24,33,67,77,58,12”,经过该程序段“加工”后,数组元素a(1)到a(7)的值依次为 ( )
A.24,33,44,58,12,67,77 | B.12,24,33,67,77,58,44 |
C.12,24,44,33,58,67,77 | D.44,24,33,58,12,67,77 |
小李编写了一个 VB 程序,读取某数据库中的数据,数据表打开后界面及部分VB代码如下:
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim a(1 to 1000) as string,strconn as string
strconn="provider=Microsoft.AC
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim a(1 to 1000) as string,strconn as string
strconn="provider=Microsoft.AC
A.OLEDB.12.0;data source ="+ App.Path+"\score.accdb" conn.ConnectionString =strconn Conn.Open Set rs.ActiveConnection = conn rs.Open "Select * from stuinfo" ![]() Do While Not rs.EOF n=n+1 a(n)=rs.fields(1) rs.MoveNext Loop rs.Close conn.Colse 下列对于以上代码的理解正确的有 ( ) ① 连接的数据库文件名是“score.accdb” ② “ConnectionString“是 conn 对象的属性值 ③ 查询的数据表名称是“stuinfo” ④ 程序运行后,a(1)=”101” ⑤ 程序运行后,读取的记录总数共n条 | ||
B.①②③ B.①③④ | C.①③⑤ | D.②④⑤ |
数组d中的数据存放情况如下表,以下流程图的功能是( ) 。


d(1) | d(2) | d(3) | d(4) | d(5) | d(6) |
15 | 10 | 33 | 11 | 71 | 9 |
A.在数组d中顺序查找10,找遍所有数据后,若找到输出”Y”,若没找到则输出”N”。 |
B.在数组d中顺序查找10,一旦找到则结束查找并输出”Y”;若找遍所有数据后仍没找到则输出”N”。 |
C.在数组d中顺序查找10,一旦找到则输出其存储位置 |
D.在数组d中顺序查找、统计10的个数并输出 |
(加试题) 数组 a 中依次存放 6 个有序数据“ 23 33 44 55 66 77”。
Dim a(1 To 10) As Integer
Dim s As String, n, key As Integer
a(1) = 23: a(2) = 33: a(3) = 44: a(4) = 55: a(5) = 66: a(6) = 77
i = 1: j = 6: c = 0: key = 35
Do While i <= j
c = c + 1
m = (i + j) \ 2
If (j - i + 1) Mod 2 = 0 Then m = m + 1
If a(m) = key Then Exit Do
If key < a(m) Then j = m - 1 Else i = m + 1
Loop
该程序段运行后,下列各变量的值不正确的是:
Dim a(1 To 10) As Integer
Dim s As String, n, key As Integer
a(1) = 23: a(2) = 33: a(3) = 44: a(4) = 55: a(5) = 66: a(6) = 77
i = 1: j = 6: c = 0: key = 35
Do While i <= j
c = c + 1
m = (i + j) \ 2
If (j - i + 1) Mod 2 = 0 Then m = m + 1
If a(m) = key Then Exit Do
If key < a(m) Then j = m - 1 Else i = m + 1
Loop
该程序段运行后,下列各变量的值不正确的是:
A.i=3 | B.j=2 | C.c=3 | D.m=2 |
(加试题) 有如下 VB 程序段:
Dim a(1 To 10) As Integer
Dim s As String, n, i As Integer
s = "54851845236": n = Len(s)
For i = 1 To n - 1
a(i) = Val(Mid(s, i, 2))
Next i
For i = 1 To n - 2
k = i
For j = i + 1 To n - 1
If a(k) < a(j) Then k = j
Next
If k <> i Then
t = a(k): a(k) = a(i): a(i) = t
End If
Next i
Text1.Text = Str(a(1))
该程序段运行后,文本框 Text1 中显示的内容是:
Dim a(1 To 10) As Integer
Dim s As String, n, i As Integer
s = "54851845236": n = Len(s)
For i = 1 To n - 1
a(i) = Val(Mid(s, i, 2))
Next i
For i = 1 To n - 2
k = i
For j = i + 1 To n - 1
If a(k) < a(j) Then k = j
Next
If k <> i Then
t = a(k): a(k) = a(i): a(i) = t
End If
Next i
Text1.Text = Str(a(1))
该程序段运行后,文本框 Text1 中显示的内容是:
A.18 | B.54 | C.85 | D.8 |
小明编写了一个 VB 程序对成绩数据进行排序。为保证相同分数的同学相对位置(指原数据中的前后关系)不发生改变,他试着采用一种新的排序算法来解决。为便于描述算法的实现过程,假定有如下数组 a:
第一步:统计数组 a 中每个值 a(i)出现的次数,存入 b(a(i)),统计完成后数组 b 的情况如下:
第二步:从前向后,依次使数组 b 中的每个值等于其与前一项之和,这样数组 b(a(i))就代表了数组 a 中小于或等于 a(i)的元素个数,完成第二步后数组 b 如下:
第三步:从后往前,依次将数组 a 中元素填入数组 c 中,将数组元素 a(i)放在数组 c 的第 b(a(i))项,如元素 a(1)=5,应该放在数组 c 的 b(5)位(即 c(5) )。每放一个元素就将 b(a(i))递减;完成第三步后,数组 c 如下所示,已经完成升序排序,且相对位置不变,即原来 a (2)的值 3 仍然在 a(3)的值 3 前面。
程序运行界面如右图所示:

实现上述功能的 VB 程序如下,回答以下问题:
(1) 从代码中可以得知,用于连接数据库的对象名是:________
(2) 请在划线处填上相应代码。
Dim a(1 To 50) As Integer '存放学生的成绩
Dim sname(1 To 50) As String '存放学生姓名
Dim n As Integer
Private Sub Command1_Click
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
conn.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
App.Path + "\stu.accdb"
conn.Open
strSQL = "SELECT * From stucj"
Set rs.ActiveConnection = conn
rs.Open strSQL
n = 0
List1.AddItem "姓 名" & " " & "成绩"
Do While Not rs.EOF
n = n + 1
a(n) = rs.Fields("cj")
sname(n) = rs.Fields("xm")
List1.AddItem sname(n) & " " & Str(a(n))
①_________
Loop
rs.Close
conn.Close
End Sub
Private Sub Command2_Click
Dim i As Integer, k As Integer
Dim b(0 To 100) As Integer
Dim c(1 To 50) As Integer, c1(1 To 50) As String 'c 和 c1 作为临时数组
For i = 1 To n
b(a(i)) = b(a(i)) + 1
Next
For i = 1 To 100
b(i) = ②__________
Next
For i = n To 1 Step -1
c(b(a(i))) = a(i)
c1(b(a(i))) = sname(i)
③_________________
Next
For i = 1 To n '把临时数组 c 和 c1 中的数据放入 a 和 sname 数组
a(i) = c(i)
sname(i) = c1(i)
Next
List2.AddItem "姓 名" & " " & "成绩"
For i = 1 To n
List2.AddItem sname(i) & " " & Str(a(i))
下标 | 1 | 2 | 3 | 4 | 5 |
值 | 5 | 3 | 3 | 2 | 4 |
第一步:统计数组 a 中每个值 a(i)出现的次数,存入 b(a(i)),统计完成后数组 b 的情况如下:
下标 | 1 | 2 | 3 | 4 | 5 |
值 | 0 | 1 | 2 | 1 | 1 |
第二步:从前向后,依次使数组 b 中的每个值等于其与前一项之和,这样数组 b(a(i))就代表了数组 a 中小于或等于 a(i)的元素个数,完成第二步后数组 b 如下:
下标 | 1 | 2 | 3 | 4 | 5 |
值 | 0 | 1 | 3 | 4 | 5 |
第三步:从后往前,依次将数组 a 中元素填入数组 c 中,将数组元素 a(i)放在数组 c 的第 b(a(i))项,如元素 a(1)=5,应该放在数组 c 的 b(5)位(即 c(5) )。每放一个元素就将 b(a(i))递减;完成第三步后,数组 c 如下所示,已经完成升序排序,且相对位置不变,即原来 a (2)的值 3 仍然在 a(3)的值 3 前面。
下标 | 1 | 2 | 3 | 4 | 5 |
值 | 2 | 3 | 3 | 4 | 5 |
程序运行界面如右图所示:

实现上述功能的 VB 程序如下,回答以下问题:
(1) 从代码中可以得知,用于连接数据库的对象名是:________
(2) 请在划线处填上相应代码。
Dim a(1 To 50) As Integer '存放学生的成绩
Dim sname(1 To 50) As String '存放学生姓名
Dim n As Integer
Private Sub Command1_Click
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
conn.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
App.Path + "\stu.accdb"
conn.Open
strSQL = "SELECT * From stucj"
Set rs.ActiveConnection = conn
rs.Open strSQL
n = 0
List1.AddItem "姓 名" & " " & "成绩"
Do While Not rs.EOF
n = n + 1
a(n) = rs.Fields("cj")
sname(n) = rs.Fields("xm")
List1.AddItem sname(n) & " " & Str(a(n))
①_________
Loop
rs.Close
conn.Close
End Sub
Private Sub Command2_Click
Dim i As Integer, k As Integer
Dim b(0 To 100) As Integer
Dim c(1 To 50) As Integer, c1(1 To 50) As String 'c 和 c1 作为临时数组
For i = 1 To n
b(a(i)) = b(a(i)) + 1
Next
For i = 1 To 100
b(i) = ②__________
Next
For i = n To 1 Step -1
c(b(a(i))) = a(i)
c1(b(a(i))) = sname(i)
③_________________
Next
For i = 1 To n '把临时数组 c 和 c1 中的数据放入 a 和 sname 数组
a(i) = c(i)
sname(i) = c1(i)
Next
List2.AddItem "姓 名" & " " & "成绩"
For i = 1 To n
List2.AddItem sname(i) & " " & Str(a(i))
Next
End Sub