- 基础理论
- 数据及数据库技术
- 人工智能
- 算法理论
- 算法实例
- 面向对象程序设计 VB开发工具
- 算法实例的程序实现
- 算法及算法的表示方法
- 多媒体理论
- 基础软件操作
- 算法软件操作
- 多媒体软件操作
- 网络技术应用
有如下VB程序段:
For i = 1 To 8
a(i) = Int(Rnd * 2)
Next i
sum = 0
For i = 1 To 8 Step 3
For j = i To 8
a(j) = 1 - a(j)
Next j
sum = sum + a(i)
Next i
Text1.Text = Str(sum)
执行程序段后,文本框Text1中显示的内容不可能是
For i = 1 To 8
a(i) = Int(Rnd * 2)
Next i
sum = 0
For i = 1 To 8 Step 3
For j = i To 8
a(j) = 1 - a(j)
Next j
sum = sum + a(i)
Next i
Text1.Text = Str(sum)
执行程序段后,文本框Text1中显示的内容不可能是
A.0 |
B.2 |
C.3 |
D.4 |
对学生数据排序,排序后男生在前,女生在后,(“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 |
(加试题)数组a中存储的是一组正整数,特征是:①以三个数为一组的话,每组中任意一个数都比前面一组中的任意一个数要大;②每组中三个数依次递减;③数组中数的总个数为3的倍数。依据对分查找思想,设计一个在数组a中查找数据key的程序。实现该功能的VB程序如下,但加框处代码有错,请改正。
Private Sub Command1_Click()
Const n = 15
Dim a(1 To n) As Integer, search As Integer, key As Integer
Dim i As Integer, j As Integer, m As Integer
'读取一组正整数,按上述规则存入数组a中,代码略。
key = Val(Text1.Text)
i = 1: j = n: search = 0
Do While i <= j
m = (i + j) \ 2
If m Mod 3 <> 0 Then m= m -2 '(1) 把m调整到三个一组的最后一个数的位置
If key = a(m) Then
search = m : Exit Do
ElseIf key < a(m) Then
j = m - 3
ElseIf key <= a(m - 2) Then '(2)
i = m + 1
ElseIf key = a(m - 2) Then
search = m - 2 : Exit Do
ElseIf key = a(m - 1) Then
search = m - 1 : Exit Do
Else
search = 0 : Exit Do
End If
Loop
If search <> 0 Then
Text2.Text = Str(search)
Else
Text2.Text = "找不到"
End If
End Sub
加框处代码应修改为:(1)【小题1】 (2)【小题2】
8 | 5 | 3 | 17 | 15 | 10 | 32 | 23 | 18 | 53 | 43 | 37 | 82 | 72 | 63 | …… |
Private Sub Command1_Click()
Const n = 15
Dim a(1 To n) As Integer, search As Integer, key As Integer
Dim i As Integer, j As Integer, m As Integer
'读取一组正整数,按上述规则存入数组a中,代码略。
key = Val(Text1.Text)
i = 1: j = n: search = 0
Do While i <= j
m = (i + j) \ 2
If m Mod 3 <> 0 Then m= m -2 '(1) 把m调整到三个一组的最后一个数的位置
If key = a(m) Then
search = m : Exit Do
ElseIf key < a(m) Then
j = m - 3
ElseIf key <= a(m - 2) Then '(2)
i = m + 1
ElseIf key = a(m - 2) Then
search = m - 2 : Exit Do
ElseIf key = a(m - 1) Then
search = m - 1 : Exit Do
Else
search = 0 : Exit Do
End If
Loop
If search <> 0 Then
Text2.Text = Str(search)
Else
Text2.Text = "找不到"
End If
End Sub
加框处代码应修改为:(1)【小题1】 (2)【小题2】
统计不同单词个数,在Text1中输入一行单词,点击“统计”按钮后在Text2中输出不同单词的个数。单词字母有大小写,同一单词的大小字母视为相同,句子以符号结尾, 程序运行界面如图所示。
(2)实现上述功能的VB程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim a(1 To 100) As String ,s As String, ch As String, word As String
Dim i As Integer, j As Integer, k As Integer, numb As Integer
s = Text1.Text : k = 0 : word = ""
For i = 1 To Len(s)
ch = Mid(s, i, 1)
If ch >= "a" And ch <= "z" Or ch >= "A" And ch <= "Z" Then
If ch >= "A" And ch <= "Z" Then ①【小题2】
word = word + ch
Else
flag = False
For j = 1 To k
If a(j) = word Then flag = True
Next j
If Not flag And word <> "" Then
②【小题3】
a(k) = word
numb = numb + 1
End If
③【小题4】
End If
Next i
Text2.Text = str(numb)
End Sub
A.对象名 / | B.事件名 / | C.事件处理过程名) |
Private Sub Command1_Click()
Dim a(1 To 100) As String ,s As String, ch As String, word As String
Dim i As Integer, j As Integer, k As Integer, numb As Integer
s = Text1.Text : k = 0 : word = ""
For i = 1 To Len(s)
ch = Mid(s, i, 1)
If ch >= "a" And ch <= "z" Or ch >= "A" And ch <= "Z" Then
If ch >= "A" And ch <= "Z" Then ①【小题2】
word = word + ch
Else
flag = False
For j = 1 To k
If a(j) = word Then flag = True
Next j
If Not flag And word <> "" Then
②【小题3】
a(k) = word
numb = numb + 1
End If
③【小题4】
End If
Next i
Text2.Text = str(numb)
End Sub
小胡收集了2018届高三学生高考成绩及相关的选科情况,存入数据库中,部分界面截图如图所示:
(1)请在划线处填入合适的代码。
Dim xh(1 To 1000) As Integer ’数据库中读取时第i为学生的学号存储在xh(i)
Dim zf(1 To 1000) As Integer ’学号为i的考生的总分存储在zf(i)
Dim xk(1 To 1000) As String ’学号为i的考生的选考课程信息存储在zf(i)
’ 数据格式 **-**-** (如:物理-化学-生物)
Dim jspm(1 To 1000) As Integer ’学号为i的技术选考生的总分在所有技术考生中的
’排名存储在数组jspm(i)
Private Sub Form_Load()
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim constr as string , sql as string
Constr = "Provider=Microsoft.ace.OLEDB.12.0;"
Constr = constr & "Data Source=" & App.Path + "\data\stu2018.accdb"
conn.ConnectionString = constr
conn.open( )
rs.Open "select * from 2018cj " , conn
i=0
Do While Not rs.EOF
i=i+1
xh(i)=rs(“xuehao”)
zf(rs(“xuehao”)) = rs(“fenshu”)
xk(rs(“xuehao”))=rs(“xkinfo”)
①【小题1】
Loop
N=i
End Sub
’判断选科信息info中是否包含科目km
Function YouKM(ByVal km As String, ByVal Info As String) As Boolean
Dim km1 As String
YouKM = False
For i = 1 To 3
If ②【小题2】 Then
YouKM = True
Exit For
End If
Next i
End Function
'为技术学科考试求名次
Private Sub Command1_Click()
For i = 1 To n
If ③【小题3】 Then
k = k + 1
jsinfo(2 * k - 1) = xh(i)
jsinfo(2 * k) = cj(xh(i))
End If
Next i
'学号为i的学生在技术选考生中的排名,存入jspm(i)中
For i = 1 To k
mc = 0
For j = 1 To k
If jsinfo (2 * j) > jsinfo (2 * i) Then mc = mc + 1
Next j
jspm(jsinfo(2*i-1))= ④【小题4】
End Sub
程序功能如下:
在窗体加载时,从数据库中读取学生总数N;读取N名学生的信息存储在相关数组中。N名学生的学号依次存储在数组xh(1)~xh(n) 中;学号为i的学生的总成绩存储在数组 zf(i)中,课程选修信息存储在xk(i)中;
点击“统计”按钮后,程序筛选出所有技术考生的相关信息,并计算该学生在所有技术考生中的排名(总分相同的,排名也相同)。
实现上述功能的VB程序如下,请回答下列问题:(1)请在划线处填入合适的代码。
Dim xh(1 To 1000) As Integer ’数据库中读取时第i为学生的学号存储在xh(i)
Dim zf(1 To 1000) As Integer ’学号为i的考生的总分存储在zf(i)
Dim xk(1 To 1000) As String ’学号为i的考生的选考课程信息存储在zf(i)
’ 数据格式 **-**-** (如:物理-化学-生物)
Dim jspm(1 To 1000) As Integer ’学号为i的技术选考生的总分在所有技术考生中的
’排名存储在数组jspm(i)
Private Sub Form_Load()
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim constr as string , sql as string
Constr = "Provider=Microsoft.ace.OLEDB.12.0;"
Constr = constr & "Data Source=" & App.Path + "\data\stu2018.accdb"
conn.ConnectionString = constr
conn.open( )
rs.Open "select * from 2018cj " , conn
i=0
Do While Not rs.EOF
i=i+1
xh(i)=rs(“xuehao”)
zf(rs(“xuehao”)) = rs(“fenshu”)
xk(rs(“xuehao”))=rs(“xkinfo”)
①【小题1】
Loop
N=i
End Sub
’判断选科信息info中是否包含科目km
Function YouKM(ByVal km As String, ByVal Info As String) As Boolean
Dim km1 As String
YouKM = False
For i = 1 To 3
If ②【小题2】 Then
YouKM = True
Exit For
End If
Next i
End Function
'为技术学科考试求名次
Private Sub Command1_Click()
Dim jsinfo(1 To 1000) As Integer ’依次存储每个技术选考生的学号和成绩
Dim k as integer ’存储找到的技术选考学生的数量
'将所有选考“技术”的考生学号、成绩依次存入数组jsinfo中
k = 0For i = 1 To n
If ③【小题3】 Then
k = k + 1
jsinfo(2 * k - 1) = xh(i)
jsinfo(2 * k) = cj(xh(i))
End If
Next i
'学号为i的学生在技术选考生中的排名,存入jspm(i)中
For i = 1 To k
mc = 0
For j = 1 To k
If jsinfo (2 * j) > jsinfo (2 * i) Then mc = mc + 1
Next j
jspm(jsinfo(2*i-1))= ④【小题4】
Next i
'输出所有技术考试的学号、成绩、技术排名信息 代码略End Sub
某算法的部分流程图如图所示,执行这部分流程,则输出m,n,i的值依次为( )


A.3 14 7 | B.0 20 7 | C.0 15 6 | D.3 15 7 |
如图a所示,在excel中使用Rank函数可以快速地返回一个数字在数字列表中的排位,而且是同分同名次,非常方便。小明想用Vb编写一个程序来实现类似Rank排名次的功能,程序运行时,随机产生10个[60,100]之间的随机数,并显示在列表框List1中,单击“排名”按钮Command1,在列表框List2中输出数据及其排名,程序运行界面如图b所示。


实现上述功能的VB程序如下,代码加框处有错,请改正。
划线①处代码应改为:___________________
划线②处代码应改为:____________
Dim a(1 to 10) As Integer ‘存储原始数据
Dim b(1 to 10)As Integer ‘存放名次
Private Sub Command1_Click()
Dim i As Integer,j As Integer, n As Integer
For i=1 To 10
n=0
For j=1 To 10
If If a(i)<=a(j) Then n=n+1 ‘①
b(i)=n ‘②
Next j
Next i
For i= 1 to 10
List2.Additem a(i)&” ”&b(i)
Next i
End Sub
Private Sub Form_Load()
‘随机产生10个[60,100]之间的随机数,并显示在List1中,代码略。
End Sub


实现上述功能的VB程序如下,代码加框处有错,请改正。
划线①处代码应改为:___________________
划线②处代码应改为:____________
Dim a(1 to 10) As Integer ‘存储原始数据
Dim b(1 to 10)As Integer ‘存放名次
Private Sub Command1_Click()
Dim i As Integer,j As Integer, n As Integer
For i=1 To 10
n=0
For j=1 To 10
If If a(i)<=a(j) Then n=n+1 ‘①
b(i)=n ‘②
Next j
Next i
For i= 1 to 10
List2.Additem a(i)&” ”&b(i)
Next i
End Sub
Private Sub Form_Load()
‘随机产生10个[60,100]之间的随机数,并显示在List1中,代码略。
End Sub
某对分查找算法的VB程序如下:
n=0
i=1
j=6
key=val(Text1.text)
f=False
Do While i<=j And Not f
m=(i+j+1)\2
n=n+1
If key=d(m) Then
f=True
ElseIf key>d(m) Then
j=m-1
Else
i=m+1
End if
Loop
数组元素d(1)到d(6)的值依次为“87,72,53,41,29,18”,若该程段运行结束后,n的值为2,则key的值是( )
n=0
i=1
j=6
key=val(Text1.text)
f=False
Do While i<=j And Not f
m=(i+j+1)\2
n=n+1
If key=d(m) Then
f=True
ElseIf key>d(m) Then
j=m-1
Else
i=m+1
End if
Loop
数组元素d(1)到d(6)的值依次为“87,72,53,41,29,18”,若该程段运行结束后,n的值为2,则key的值是( )
A.87或29 | B.72或18 | C.72 或 29 | D.53 或 18 |