- 基础理论
- 数据及数据库技术
- 人工智能
- 算法理论
- 算法实例
- 面向对象程序设计 VB开发工具
- + 算法实例的程序实现
- 过程和自定义函数
- 枚举算法及程序实现
- 解析算法及程序实现
- 递归算法及程序实现
- 排序算法及程序实现
- 查找算法及程序实现
- 算法及算法的表示方法
- 多媒体理论
- 基础软件操作
- 算法软件操作
- 多媒体软件操作
- 网络技术应用
(加试题)由数组a生成数字方阵,并求方阵中对角线上数值的和:
1) 将数组a中的n个元素依次分割出若干个数据块,每个数据块有m×m个元素。
2) 对每个分割出的数据块,按照数字方阵方式显示。
3) 找出数字方阵中对角线上的数值,求出它们的和,若分割的数据块达不到m×m个元素,则忽略。
数字方阵过程如下:将数据块中m×m个元素按行序排列成一个数字方阵,以3×3数据块为例,排列过程如下图所示:

找出对角线上的数值分别是:12,19,83和34,19,54,它们的和分别是114,107
小明依据上述描述设计了如下VB程序。请回答下列问题:
(1)当n=30时,如下图所示,分割出每个数据块为2×2个元素,第二组数字方阵中的对角线和分别为_____________。
(2)请在划线处填入合适的代码。
Dim a(1 To 30) As Integer
Private Sub Form_Load()
'随机生成30个不重复的正整数到a()数组中。代码略
End Sub
Private Sub Command1_Click()
Dim t As Integer, i As Integer, m As Integer, j As Integer, x As Integer
Dim s As String, tt As String
Dim start As Integer '当前数字方阵的第1个元素下标
m = Val(Text1.Text)
t = 30 \ m ^ 2
If t = 0 Then
MsgBox "重新输入"
Else
List1.Clear
For i = 1 To t
start = ①
For j = 1 To m
For x = 1 To m
tt = tt + ②
Next x
List1.AddItem tt
tt = ""
Next j
List1.AddItem ""
s = sum1(start, m)
List2.AddItem "第" + Str(i) + "组的对角线分别是:" + s
Next i
End If
End Sub
Function sum1(begin As Integer, m As Integer) As String
Dim s1 As Integer, s2 As Integer
s1 = a(begin)
For i = 1 To m - 1
s1 = s1 + a(begin + i * (m + 1))
Next i
s2 = 0
For i = 1 To m
s2 = s2 + a(begin + i * (m - 1))
Next i
sum1 = ③
End Function
划线处代码为:
① ______________________________
② ______________________________
③ ______________________________
1) 将数组a中的n个元素依次分割出若干个数据块,每个数据块有m×m个元素。
2) 对每个分割出的数据块,按照数字方阵方式显示。
3) 找出数字方阵中对角线上的数值,求出它们的和,若分割的数据块达不到m×m个元素,则忽略。
数字方阵过程如下:将数据块中m×m个元素按行序排列成一个数字方阵,以3×3数据块为例,排列过程如下图所示:

找出对角线上的数值分别是:12,19,83和34,19,54,它们的和分别是114,107
小明依据上述描述设计了如下VB程序。请回答下列问题:

(2)请在划线处填入合适的代码。
Dim a(1 To 30) As Integer
Private Sub Form_Load()
'随机生成30个不重复的正整数到a()数组中。代码略
End Sub
Private Sub Command1_Click()
Dim t As Integer, i As Integer, m As Integer, j As Integer, x As Integer
Dim s As String, tt As String
Dim start As Integer '当前数字方阵的第1个元素下标
m = Val(Text1.Text)
t = 30 \ m ^ 2
If t = 0 Then
MsgBox "重新输入"
Else
List1.Clear
For i = 1 To t
start = ①
For j = 1 To m
For x = 1 To m
tt = tt + ②
Next x
List1.AddItem tt
tt = ""
Next j
List1.AddItem ""
s = sum1(start, m)
List2.AddItem "第" + Str(i) + "组的对角线分别是:" + s
Next i
End If
End Sub
Function sum1(begin As Integer, m As Integer) As String
Dim s1 As Integer, s2 As Integer
s1 = a(begin)
For i = 1 To m - 1
s1 = s1 + a(begin + i * (m + 1))
Next i
s2 = 0
For i = 1 To m
s2 = s2 + a(begin + i * (m - 1))
Next i
sum1 = ③
End Function
划线处代码为:
① ______________________________
② ______________________________
③ ______________________________
某VB程序段如下:
Dim a(1 To 5) As Integer, i As Integer
a(1) = 1: a(2) = 1
For i = 3 To 5
a(i) = a(i - 1) + a(i - 2)
Next i
Text1.Text = Str(a(i - 1))
该程序段运行后,文本框Text1中显示的内容是
Dim a(1 To 5) As Integer, i As Integer
a(1) = 1: a(2) = 1
For i = 3 To 5
a(i) = a(i - 1) + a(i - 2)
Next i
Text1.Text = Str(a(i - 1))
该程序段运行后,文本框Text1中显示的内容是
A.2 | B.3 | C.5 | D.8 |
(加试题)小王准备编写一个依据技术学考、加试成绩进行赋分的VB程序,需对成绩进行预处理。预处理算法的基本思想:先从数据库中读取考生的考号、学考、加试成绩,然后进行排序,排序规则是按学考+加试的总分降序,若总分相同按加试成绩降序排列。再根据排序结果给出名次,同分同名,学考、加试成绩相同,则名次相同。
程序运行时,学生数据显示在列表框List1中,单击“计算”按钮Command1,计算结果显示在列表框List2中,程序运行界面如图所示。

实现上述功能的VB程序如下,请回答下列问题:
(1)如图所示,学生总数为1500人,排名前1%的学生可赋分为100,则共有______名学生可赋分为100。
(2)分析数据,可知存放学生成绩的数据表为_________。
(3)请在划线处填入合适的代码。
Dim kh(1 To 1500) As String '存放学生考号
Dim a(1 To 1500) As Integer '存放学考成绩
Dim b(1 To 1500) As Integer '存放加试成绩
Dim pm(1 To 1500) As Integer '存放排名
Dim n As Integer '存放总人数
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 + "\cj.accdb"
conn.Open
Set rs.ActiveConnection = conn
rs.Open "select * from stu_cj"
List1.AddItem " 考号 " & " 学考 " & "加试"
n = 0
Do While Not rs.EOF '到记录集最后一条记录后退出循环
n = n + 1 '计数
kh(n) = rs.Fields("考号")
a(n) = rs.Fields("学考成绩")
b(n) = rs.Fields("加试成绩")
List1.AddItem kh(n) & " " & a(n) & " " & b(n)
rs.MoveNext '移动到下一条记录
Loop
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, t As Integer, k As String
For i = 1 To n - 1
For j = n To i + 1 Step -1
If a(j) + b(j) > a(j - 1) + b(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
k = kh(j): kh(j) = kh(j - 1): kh(j - 1) = k
End If
Next
Next
pm(1) = 1
For i = 2 To n
If a(i) = a(i - 1) And b(i) = b(i - 1) Then
②______________
Else
pm(i) = i
End If
Next
List2.Clear
List2.AddItem "排名 " & " 考号 " & " 学考 " & "加试"
For i = 1 To n
List2.AddItem pm(i) & " " & kh(i) & " " & a(i) & " " & b(i)
Next
End Sub
程序运行时,学生数据显示在列表框List1中,单击“计算”按钮Command1,计算结果显示在列表框List2中,程序运行界面如图所示。

实现上述功能的VB程序如下,请回答下列问题:
(1)如图所示,学生总数为1500人,排名前1%的学生可赋分为100,则共有______名学生可赋分为100。
(2)分析数据,可知存放学生成绩的数据表为_________。
(3)请在划线处填入合适的代码。
Dim kh(1 To 1500) As String '存放学生考号
Dim a(1 To 1500) As Integer '存放学考成绩
Dim b(1 To 1500) As Integer '存放加试成绩
Dim pm(1 To 1500) As Integer '存放排名
Dim n As Integer '存放总人数
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 + "\cj.accdb"
conn.Open
Set rs.ActiveConnection = conn
rs.Open "select * from stu_cj"
List1.AddItem " 考号 " & " 学考 " & "加试"
n = 0
Do While Not rs.EOF '到记录集最后一条记录后退出循环
n = n + 1 '计数
kh(n) = rs.Fields("考号")
a(n) = rs.Fields("学考成绩")
b(n) = rs.Fields("加试成绩")
List1.AddItem kh(n) & " " & a(n) & " " & b(n)
rs.MoveNext '移动到下一条记录
Loop
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, t As Integer, k As String
For i = 1 To n - 1
For j = n To i + 1 Step -1
If a(j) + b(j) > a(j - 1) + b(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
k = kh(j): kh(j) = kh(j - 1): kh(j - 1) = k
End If
Next
Next
pm(1) = 1
For i = 2 To n
If a(i) = a(i - 1) And b(i) = b(i - 1) Then
②______________
Else
pm(i) = i
End If
Next
List2.Clear
List2.AddItem "排名 " & " 考号 " & " 学考 " & "加试"
For i = 1 To n
List2.AddItem pm(i) & " " & kh(i) & " " & a(i) & " " & b(i)
Next
End Sub
在大小写英文字母组成的字符串中,当相邻两个字母的大小写不一致时,我们称为一次大小写变换。现编写“大小写字母变换次数统计”程序,实现如下功能:在文本框Text1中输入英文字母构成的字符串,单击“统计”按钮Command1,程序统计该字符串的大小写变换次数,并将结果显示在标签Label1中。程序运行界面如下图所示。

(1)设计程序界面时,要清空文本框Text1中的显示内容,应修改文本框的________属性。
(2)实现上述功能的VB程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim s As String, ch As String, i As Integer, res As Integer
Dim f1 As Boolean 'f1表示前一个字母的大小写状态
Dim f2 As Boolean 'f2表示当前字母的大小写状态
s =①_________
res = 0: ch = Mid(s, 1, 1)
f1 = ch >= "A" And ch <= "Z"
For i = 2 To Len(s)
ch = Mid(s, i, 1)
f2 = ch >= "A" And ch <= "Z"
If ②________ Then res = res + 1
f1 = f2
Next i
Label2.Caption = "大小写变换次数为" & ③_______ & "次"
End Sub
(3)运行程序,在文本框Text1中输入“AmericanRAILWAY”,单击“统计”按钮,则显示的大小写变换次数是_______次。
某书城五种畅销图书的市场价格(单位:元)存放在数组d中,如下表所示。现对这些数据进行升序排列,若采用冒泡排序算法自下而上进行比较和交换,那么在第一遍加工后,d[2]的值是______ 。
d[1] | 26 |
d[2] | 32 |
d[3] | 20 |
d[4] | 29 |
d[5] | 36 |
如图 1 所示,这是一个城市街道简图,小明从 A 点出发,到达 B 点,如果在每一个路口只能向右或向上走(0 表示向上走,1 表示向右走),问小明有多少条行走路线,并请输出每条路线。程序界面如图 2 所示

算法分析:从 A 点到 B 点共有 7 个路口,即可以有一个 7 位二进制数表示所走路线。观察以上路线,枚举所有满足路线特征的 7 位二进制数,再去掉不满足的二进制数即可。
(1)图 1 所示路线对应的十进制数为_____。
(2)实现上述功能的 VB 程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim b As String, t As Integer, i As Integer, c As Integer, d As Integer
t = 0 '可走路线计数
For i = 15 To 120 '所有可走路线用十进制枚举
d = i
c = 0
b = ""
Do While d <> 0
If d Mod 2 = 1 Then
b = "1" + b
c = c + 1
If c > 4 Then Exit Do '若"1"的总数超过 4 个表示路线错误,需退出 Do 循环 Else
①_____________ End If
②____________ Loop
If c = 4 And Len(b) = 7 Then
t = t + 1
List1.AddItem b
End If
Next i
Label1.Caption = Str(t) + " 条"
End Sub

算法分析:从 A 点到 B 点共有 7 个路口,即可以有一个 7 位二进制数表示所走路线。观察以上路线,枚举所有满足路线特征的 7 位二进制数,再去掉不满足的二进制数即可。
(1)图 1 所示路线对应的十进制数为_____。
(2)实现上述功能的 VB 程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim b As String, t As Integer, i As Integer, c As Integer, d As Integer
t = 0 '可走路线计数
For i = 15 To 120 '所有可走路线用十进制枚举
d = i
c = 0
b = ""
Do While d <> 0
If d Mod 2 = 1 Then
b = "1" + b
c = c + 1
If c > 4 Then Exit Do '若"1"的总数超过 4 个表示路线错误,需退出 Do 循环 Else
①_____________ End If
②____________ Loop
If c = 4 And Len(b) = 7 Then
t = t + 1
List1.AddItem b
End If
Next i
Label1.Caption = Str(t) + " 条"
End Sub
小吴编写了一个 VB 程序,实现功能如下:在 1000 至 9999 的自然数中,找出能被 7 整除,且百位或者个位数字是 6 的所有整数,并统计个数。程序界面如下:

(1)在设计程序界面时,要使按钮 Command1 上显示为统计,可在属性窗口通过修改其 ________ 属性完成。
(2)实现上述功能的 VB 程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As Integer, n As Integer
Dim a As Integer, b As Integer n = 0
List1.Clear
For s =1001 To 9999 Step 7
a = ①________
b= s Mod 10
If ②______Then
List1.AddItem Str(s)
③_________
End If
Next s
Label1.Caption = "共有" + Str(n) + "个"
End Sub

(1)在设计程序界面时,要使按钮 Command1 上显示为统计,可在属性窗口通过修改其 ________ 属性完成。
(2)实现上述功能的 VB 程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As Integer, n As Integer
Dim a As Integer, b As Integer n = 0
List1.Clear
For s =1001 To 9999 Step 7
a = ①________
b= s Mod 10
If ②______Then
List1.AddItem Str(s)
③_________
End If
Next s
Label1.Caption = "共有" + Str(n) + "个"
End Sub
对学生数据排序,排序后男生在前,女生在后,(“M”表示男,“F”表示女),男生和女生分别按“姓名”升序排序。编写一个VB程序,功能如下:在列表框list1中显示排序前学生数据,单击“排序”按钮Command1,在列表框list2中显示排序后的结果。程序运行界面如图所示。

实现上述功能的 VB程序如下,但加框处代码有错,请改正。
Const n = 10
Dim xm(1 To n)As String, xb(1 To n)As String
Function adj(sAs String, n As Integer) As String
'函数功能:在字符串 s 后添加若干个空格,使其长度变为 n,代码略。
End Function
Private Sub Form1_Load( )
'读取 10 个学生姓名和性别分别存数组 xm、xb,
并在列表框 list1 中显示,代码略。
End Sub
Private Sub Command1Click
Dim i As Integer, j As Integer
i = 1
Do While i <= n - 1
temp = xm(j): xm(j) = xm(j - 1): xm(j - 1) = temp
temp = xb(j): xb(j) = xb(j - 1): xb(j - 1) = temp
End If
j = j - 1
For i = 1 To n
End Sub

实现上述功能的 VB程序如下,但加框处代码有错,请改正。
Const n = 10
Dim xm(1 To n)As String, xb(1 To n)As String
Function adj(sAs String, n As Integer) As String
'函数功能:在字符串 s 后添加若干个空格,使其长度变为 n,代码略。
End Function
Private Sub Form1_Load( )
'读取 10 个学生姓名和性别分别存数组 xm、xb,
并在列表框 list1 中显示,代码略。
End Sub
Private Sub Command1Click
Dim i As Integer, j As Integer
i = 1
Do While i <= n - 1
j = n-1 '(1)________
Do While j >= i + 1
If xb(j) = "M" And xb(j - 1) = "F" Or xm(j) < xm(j - 1) Then '(2)________temp = xm(j): xm(j) = xm(j - 1): xm(j - 1) = temp
temp = xb(j): xb(j) = xb(j - 1): xb(j - 1) = temp
End If
j = j - 1
Loop
i = i + 1
LoopFor i = 1 To n
List2.AddItem adj(xm(i), 12) + " " + xb(i)
Next iEnd Sub
(加试题)有如下程序段:
k = 0 : First = 1 : Last = 5 : Flag = True
Do While Flag
k = k + 1
p = False : Flag = False
For j = First To Last
If a(j) > a(j + 1) Then
t = a(j): a(j) = a(j + 1): a(j + 1) = t
Last = j : Flag = True
If p = False Then
First = j :p = True
End If
End If
Next j
If First <> 1 Then First = First - 1
Last = Last - 1
Loop
数组元素a(1)到a(6)的值依次为“3,6,8,5,7,9”,经过该程序段“加工”后,下列说法正确的是( )
k = 0 : First = 1 : Last = 5 : Flag = True
Do While Flag
k = k + 1
p = False : Flag = False
For j = First To Last
If a(j) > a(j + 1) Then
t = a(j): a(j) = a(j + 1): a(j + 1) = t
Last = j : Flag = True
If p = False Then
First = j :p = True
End If
End If
Next j
If First <> 1 Then First = First - 1
Last = Last - 1
Loop
数组元素a(1)到a(6)的值依次为“3,6,8,5,7,9”,经过该程序段“加工”后,下列说法正确的是( )
A.此过程中数据共交换了3次 | B.此过程中该数组的数据共比较了7次 |
C.变量k的值为2 | D.数组元素a(1)到a(6)的数未排成有序 |
(加试题)有如下程序段:
If a(j) <= a(i) And d(j) >= d(i) Then
d(i) =d(j)+1 : pre(i) = j
End If
Next j
k=pre(k)
For i = 2 To 6
For j = 1 To i - 1If a(j) <= a(i) And d(j) >= d(i) Then
d(i) =d(j)+1 : pre(i) = j
End If
Next j
Next i
max = 0 : k = 0
For i = 1 To 6
If d(i)>max Then max = d(i) : k = iNext i
Do While k <> 0
st = a(k) & ","& stk=pre(k)
Loop
Text1.Text = Mid(st, 1, Len(st) - 1)
数组元素a(1)到a(6)的值依次为“2,6,5,9,8,8”,数组d各元素的值初始化为1,数组pre各元素的值初始化为0,经过该程序段“加工”后,Text1中的值是( )A.2,5,9 | B.2,6,8,8 | C.2,5,8,8 | D.2,5,6,8,8,9 |