专项测试六 查找算法
一、选择题
1.已知数列“15,19,21,20,84,77,36,55”,若要在数列中查找数据100,共需查找的次数是( )
A.1 B.8
C.9 D.无穷多次
解析 本题考查的是顺序查找算法。数据100不在数列中,在查找的过程中,需要与数列中每一个数进行比较,因此,共需查找的次数为8次,答案为B。
答案 B
2.已知数列“32,19,6,57,41,67,28”,若要在数列中查找数据19,共需查找的次数是( )
A.1 B.2
C.3 D.4
解析 本题考查的是顺序查找算法。数据19在数列中的位置是2,因此共需查找的次数为2,答案为B。
答案 B
3.某查找算法的部分VB代码如下:
flag=True
Key=Val(Text1.Text)
i=1
Do While i<=8 And flag
If a(i)=Key Then
flag=False
Else
i=i+1
End If
Loop
If Not flag Then
Label1.Caption=“Find!”
Else
Label1.Caption=“Fail!”
End If
数组元素a(1)到a(8)的数据依次为“11,2,0,6,8,3,5,8”,程序运行时,在文本框Text1中输入8,则在标签Label1中显示的内容是( )
A.“Find!” B.“Fail!”
C.Find! D.Fail
解析 本题主要考查的是顺序查找的实现过程。本程序的功能是查找数列中第一个与目标数据相等的数,若找到则在标签Label1中显示Find!,若找不到则在标签Label1中显示Fail!,因此答案为C。
答案 C
4.某对分查找算法的VB程序段如下:
key = Val(Text1.Text)
i = 1: j = 10
Text2.Text = “ ”
Do While i <= j
m = Int((i + j) / 2 + 0.5)
If key = a(m) Then Exit Do ′Exit Do表示退出循环
If key < a(m) Then j = m - 1 Else i = m + 1
Text2.Text = Text2.Text + Str(a(m))
Loop
数组元素a(1)到a(10)的值依次为“8,17,24,30,36,40,55,58,61,66”,文本框Text1中输入的值是30,执行该程序段,文本框Text2中显示的是( )
A.40 24 B.40 24 36
C.36 24 D.36 17 24
解析 本题主要考查的是对分查找算法。本题的功能是求使用对分查找查找数据30的过程中依次被访问的数据。本程序是对原有的对分查找算法进行变式,当查找范围[i,j]内的数据为偶数个时,原有的对分查找所查找的位置为Int((i+j)/2),即中间两个元素中的前面那个;此程序将查找位置修改为Int((i+j)/2+0.5),即中间两个元素中的后面那个。因此,根据公式计算可知,在查找过程中,第一次访问的数据是第6个(40),第二次访问的数据是第3个(24),第三次访问的数据是第4个(36)。
答案 B
5.某对分査找算法的VB程序段如下:
i = 1: j = 7: s = “ ”
key = Int(Rnd * 100)
Do While i <= j
m = (i + j) 2
If key = a(m) Then
s = s + “M”: Exit Do ′Exit Do 表示退出循环
ElseIf key < a(m) Then
j = m - 1: s = s + “L”
Else
i = m + 1: s = s + “R”
End If
Loop
Text1.Text = s
数组元素a(1)到a(7)的值依次为“24,35,38,41,45,69,78”。若该程序段执行后,文本框Text1中显示的内容可能是( )
A.RL B.LMR
C.RLR D.LRLM
解析 本题主要考查的是对分查找算法。本题程序的功能是求在查找目标值key的过程中目标值在被访问元素的左还是右区间内。共有7个元素,因此最多查找三次,如果在数据中找到目标值,则必定以M结尾,因此A、B、D选项均错误,答案为C。
答案 C
6.数组a为一组正整数,奇数在前,偶数在后。奇数与偶数已分别按升序排序。依据对分查找思想:设计一个在数组a中查找数据Key的程序。实现该功能的VB程序段如下:
i = 1: j = 10
Key = Val(Text1.Text)
Do While i <= j
m = (i + j) 2
If a(m) = Key Then Exit Do ′Exit Do表示退出循环
If Key Mod 2 = 1 And a(m) Mod 2 = 0 Then
ElseIf Key Mod 2 = 0 And a(m) Mod 2 = 1 Then
Else
End If
Loop
If i > j Then s = “没有找到!” Else s = “位置:” + Str(m)
Text2.Text = s
上述程序中方框处可选语句为:
①i = m + 1
②j = m - 1
③If Key < a(m) Then j = m - 1 Else i = m + 1
则(1)、(2)、(3)处语句依次是( )
A.①、②、③ B.①、③、②
C.②、①、③ D.③、②、①
解析 本题主要考查是对分查找算法。本题是对分查找算法的一种变式,查找的数据有两类(偶数和奇数),则在查找过程中需分三种情况来讨论分析:(1)如果要查找的数据(key)是奇数并且当前被访问的数为偶数时,则要查找的数据必定在前半段中,因为后半段肯定都是偶数,即j=m-1;(2)如果要查找的数据(key)是偶数并且当前被访问的数为奇数时,则要查找的数据必定在后半段中,因为前半段肯定都是奇数,即i=m+1;(3)除上面两种情况外的其他情况,要查找的数据是偶数(或奇数),当前被访问的数据也是偶数(或奇数)时,即If Key < a(m) Then j = m - 1 Else i = m + 1 。
答案 C
7.有以下VB程序段:
Dim a As String, b As String, p As String, s As String
a = Text1.Text
b = Text2.Text
c = Text3.Text
p = “ ”
For i = 1 To Len(a)
If b = Mid(a, i, Len(b)) Then
s = s + c
p = p + Str(i)
Else
s = s + Mid(a, i, 1)
End If
Next i
Label1.Caption = p
若文本框Text1中输入“Hello,Python!I use Python!”,文本框Text2中输入“Python”, 文本框Text3中输入“VB”运行该段程序后,标签Label1中显示的是( )
A.7 20 B.8 21
C.12 26 D.13 27
解析 本题主要考查的是顺序查找。本题程序的功能是:将文本框Text1中的所有Text2内容替换为Text3内容,并记录Text2内容在Text1中的位置。在Text1中共有两个“Python”,位置分别为8和21,因此答案为A。
答案 A
8.某对分査找算法的VB程序段如下:
i = 1: j = 9: n = 0
key = Val(Textl.Text)
Do While i<= j
n = n + 1
m = Fix((i + j) / 2)
If key = d(m) Then Exit Do ′Exit Do表示退出循环
If key < d(m) Then j = m - 1 Else i = m + 1
Loop
数组元素d(1)到d(9)的值依次为“7,12,18,25,39,58,61,72,86”。若该程序段运行结束后,n的值为2,则key的值是( )
A.39 B.18或61
C.18或72 D.12或61
解析 本题主要考查的是对分查找。变量n表示查找的次数,已知n=2,因此本题的功能是求对分查找2次时被访问的数据有哪些。共有9个数据,第一次访位置5上的数据(39),第二次可能被访问的数据所在的位置可能为2(此位置上的数据为12)或7(此位置上的数据为61),因此key的值是12或61,答案为D。
答案 D
9.用对分查找法和顺序查找法在数字序列“1,2,3,5,8,13,21,34,55”中查找数字13,两种方法都能访问到的数字是( )
A.3 B.5
C.8 D.34
解析 本题主要考查的是对分查找算法。使用对分查找查找数字13的过程中被访问的数字依次为8、21、13,因此顺序查找和对分想找都能访问的数字为8,答案为C。
答案 C
10.采用如下对分查找算法对数组a中7个有序数据“15,38,51,66,77,81,99”进行查找,查找数据为“55”。
i = 1: j = 7: x = 55
Do While i <= j
m = (i + j) 2
If a(m) = x Then Exit Do
If a(m) > x Then j = m - 1 Else i = m + 1
Loop
上述程序段运行后,下列表达式正确的是( )
A.i=m+1 B.i=m-1
C.j>m+1 D.j
解析 本题主要考查的是对分查找算法。第1次查找范围[i,j]为[1,7],m为4,第2次查找范围为[1,3],m为2,第3次查找范围为[3,3],m为3,i更新为4,因此i=m+1。答案为A。
答案 A
11.下列程序段用于在前面部分为升序后面部分为降序的数组 a 中查找最大值,返回该数值及其位置(下标)。
i = 1: j = 10
flag = False
Do While i <= j And Not flag
m = (i + j + 1) 2
If a(m) < a(m - 1) And a(m) > a(m + 1) Then
ElseIf a(m) > a(m - 1) And a(m) > a(m + 1) Then
ElseIf a(m) > a(m - 1) And a(m) < a(m + 1) Then
End If
Loop
List1.AddItem Str(a(m)) +Str(m)
上述程序方框处可选句为:
①i=m+1
②j=m-1
③flag = True
则①②③处语句依次是( )
A.①②③ B.①③②
C.③①② D.②③①
解析 本题主要考查对分查找的变异算法,a(m)a(m+1)说明a(m)处于降序段,应填入j=m-1.a(m)>a(m-1)And a(m)>a(m+1),此时a(m)已为最大值,应填入flag=True。答案为D。
答案 D
二、非选择题
12.编写一个单词查找程序,其功能是:在文本框Text1中输入要查找的单词,单击“查找”按钮Command1后,在标签Label4中输出查找结果。程序运行效果如下图所示。
算法说明:
(1)英语单词存放在数组words中。
(2)如果在数组words中找到要查找的单词,则在标签Label4中显示“查找成功!”,并显示单词在数组words中出现的次数,如果未找到则显示“无此单词,请重输!”。
实现上述功能的VB程序如下,请在程序划线处填入合适的语句。
Dim n As Integer
Dim words(1 To 100) As String
Private Sub Command1_Click()
Dim key As String, i As Integer, times As Integer
key = Text1.Text
times = 0
For i = 1 To n
If key=words(i) Then ______②______
Next i
If times > 0 Then
Label4.Caption=“查找成功!共找到”+________③________ +“个”
Else
Label4.Caption = “无此单词,请重输!”
End If
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim word As String
word = Text1.Text
If KeyAscii = 13 Then
n = n + 1
__________①________
List1.AddItem Str(n) + “:” + word
Text1.Text = “ ”
End If
End Sub
解析 本题主要考查的是顺序查找算法。事件处理过程Text1_KeyPress()的功能是在文本框Text1中输入单词,并将单词存储在数组words中,最后将输入的单词显示在列表框List1中,变量n用于记录输入的单词数,因此①处的语句为words(n)=word;如果在数组words中找到目标单词key,则用变量times计数,因此②处语句为times=times+1;times大于0,表示查找成功,则在label4中显示出现的次数,因此③处的语句为Str(times)。
答案 ①words(n)=word ②times=times+1 ③Str(times)
13.小明编写了一个查找替换的VB程序,其功能为:在一串由汉字、空格和标点符号组成的文本中,把文本中的某个字符串用另一个字符串替换。
程序界面如下图所示,程序运行时,在文本框Text1中输入一段文本,在文本框Text2中输入查找的字符串,在文本框Text3中输入替换为的字符串,单击“查找替换”按钮Command1,则在文本框Text4中输出替换后的文本,在标签Label6中显示替换的次数。
实现上述功能的VB程序如下,请在程序划线处填入合适的代码。
Private Sub Command1_Click()
Dim st1 As String, st2 As String
Dim i As Integer, n As Integer, count As Integer
Dim st3 As String, ch As String, result As String
result = “ ”
st1 = Text1.Text
st2 = Text2.Text
st3 = Text3.Text
len1 = Len(Text2.Text)
________①______
result = “ ”
i = 1
Do While i <= n
________②________
If ch = st2 Then
result = result + st3
count = count + 1
i = i + len1
Else
________③________
i = i + 1
End If
Loop
Text4.Text = result
Label6.Caption = Str(count)
End Sub
解析 本题主要考查的是顺序查找算法。从代码“Do While i <= n”可知,划线①处为关于变量n赋值的语句,n为文本的总长度,即字符总个数,因此①处代码为n = Len(st1);②处所在循环表示首先从文本中取出与要查找的字符串等长的子串,然后与要查找的字符串比较是否相同,若相同,则被替换,变量i则跳过len1个位置,因此②处代码为ch = Mid(st1, i, len1);若当前字符串与要查找的字符串不相同,则将当前字符(第i个)存入字符串result中,变量i往后走一步,因此③处语句为result = result + Mid(st1, i, 1)。
答案 ①n = Len(st1)或n=Len(st1)-Len1+1 ②ch = Mid(st1, i, len1) ③result=result+Mid(st1,i,1)
14.小华写了一个模糊查询的VB程序,具体功能如下:程序运行时,在列表框List1中显示热门书籍名称,在文本框Text1中输入查询关键词后,单击“开始查询”按钮Command1,则在列表框List2中显示包含此关键词的书籍名称,并统计找到的书籍数;若找不到,则在列表框List2中输出“查无此书”。程序运行界面如下图所示:
为实现上述的功能的程序如下,加框处的代码有误,请改正。
Dim book(1 To 20) As String, st As String
Const n = 20
Private Sub Form_Load()
′读入n个数据,存储在数组book中,并显示在列表框List1中
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, len1 As Integer, len2 As Integer,k As Integer
st = Text1.Text
List2.Clear
len1 = Len(st)
k = 0
For i = 1 To n
len2 = Len(book(i))
′①
Do While j <= len2 - len1 + 1
If Then ′②
List2.AddItem book(i)
k = k + 1
End If
j = j + 1
Loop
Next i
If k> 0 Then
List2.AddItem “共找到”+Str(k) + “条信息”
Else
List2.AddItem “查无此书”
End If
End Sub
程序中加框①处应改正为_____________________________________________;
加框②处应改正为_________________________________________________。
解析 本题主要考查的是顺序查找算法思想。本题的功能是在book数组元素中查找关键词st,若找到则找到的记录数进行计数(k=k+1),并显示在列表框List2中。每次开始查找时,总是从数组元素book(i)的第1个字符开始,因此j=1,取出与st等长的字符串,并与字符串st比较是否相等,若相等则表示找到一条记录,因此程序②处语句应修改为 Mid(book(i), j, len1) = st,也可以写作st=Mid(book(i), j, len1)。
答案 ①j=1 ②Mid(book(i), j, len1) = st或st=Mid(book(i), j, len1)
15.大家期盼的校运会要来了,同学们踊跃报名,共有20人报了100米,30人报了200米。小明编写了一个VB程序,用于查询同时报名参加100米和200米比赛的学生,并统计学生数。具体功能如下:程序运行时,在列表框List1中显示报100米的学生学号和姓名,在列表框List2中显示报200米的学生学号和姓名,单击“排序”按钮Command1后,将List2中数据按“姓名”升序排序,并将排序后的数据重新显示在列表框List2中;单击“查询并统计”按钮Command2后,在列表框List3中显示同时报名参加100米和200米比赛的学生信息,并在该列表框的最后显示同时报名这两项比赛的学生数。程序运行界面如下图所示:
为实现上述功能的程序如下,请在划线处填入合适的语句或代码。
Dim xm1(1 To 20) As String, xh1(1 To 20) As String′数组xm1、xh1分别存储选报课程1的学生的姓名和学号
Dim xm2(1 To 30) As String, xh2(1 To 30) As String′数组xm2、xh2分别存储选报课程2的学生的姓名和学号
Const n = 20, m = 30
Private Sub Form_Load()
′获取选报数据,并显示在列表框List1和List2中
′代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, tt As String
List2.Clear
For i = 1 To m - 1
For j =______①______ Step -1
If xm2(j) < xm2(j - 1) Then
tt = xm2(j): xm2(j) = xm2(j - 1): xm2(j - 1) = tt
tt = xh2(j): xh2(j) = xh2(j - 1): xh2(j - 1) = tt
End If
Next j
Next i
For i = 1 To m
List2.AddItem xh2(i) + “ ” + xm2(i)
Next i
End Sub
Private Sub Command2_Click()
Dim i As Integer, j As Integer, w As Integer, tt As String, k As Integer
For i = 1 To n
p = 1
______②______
Do While p <= q
w = (p + q) 2
If xm1(i) = xm2(w) Then
List3.AddItem xh1(i) + “ ” + xm1(i)
k = k + 1
End If
If ______③______Then
q = w - 1
Else
p = w + 1
End If
Loop
Next i
List3.AddItem “共有” + Str(k) + “ 位同学”
End Sub
解析 本题主要考查的是冒泡排序和对分查找算法。①代码表示对报200米的学生按姓名升序排序,因此①处应填入的语句为m To i + 1 Step -1;②③处的代码表示对分查找算法,②表示查找范围的终点,因此为q = m;根据语句q=m-1可知,③处语句为xm1(i) < xm2(w)。
答案 ①m To i + 1 ②q = m ③xm1(i) < xm2(w)
16.对分查找算法可用于求解方程的近似值。现要求方程x3-4x2+x+5=0的一个近似值,可设f(x)= x3-4x2+x+5,若有区间[a,b],使f(a)与f(b)异号,则该区间内必存在该方程的一个解。小明为此编写了VB程序,功能如下:程序运行时,在文本框Text1、Text2中输入区间值a、b,要求a实现上述功能的VB程序如下,请在划线处填入合适的语句。
Function f(x As Double) As Double
Dim y As Double
________①________
f = y
End Function
Private Sub Command1_Click()
Dim a As Double, b As Double, m As Double, x As Double
a = Val(Text1.Text)
b = Val(Text2.Text)
If f(a) * f(b) < 0 And a < b Then
Do While a <= b
______②______
If Abs(f(m)) < 0.00001 Then Exit Do
If ______③______ Then
b = m
Else
a = m
End If
Loop
x = Format(m, “0.00000”) ′Format函数用于定义输出的小数位数
List1.AddItem “[” & Text1.Text & “,” & Text2.Text & “]” & “解为:” & x
Else
List1.AddItem “[“ & a & ”,“ & b & ”]” & “请重新输入区间”
End If
End Sub
解析 划线①处是求方程的解,根据代码“f=y”可知,方程解为y,因此①处代码为y= x^3-4*x^2+x+5;②处为求区间的中间值,中间值为double类型,因此②处代码为m =(a+b)/2,而不是m =(a+b)2;根据Then后面的代码“b = m”可知,③处条件为f(a)*f(m)<0。
答案 ①y= x^3-4*x^2+x+5 ②m=(a+b)/2
③f(a)*f(m)<0
专项测试六 查找算法
一、选择题
1.已知数列“15,19,21,20,84,77,36,55”,若要在数列中查找数据100,共需查找的次数是( )
A.1 B.8
C.9 D.无穷多次
2.已知数列“32,19,6,57,41,67,28”,若要在数列中查找数据19,共需查找的次数是( )
A.1 B.2
C.3 D.4
3.某查找算法的部分VB代码如下:
flag=True
Key=Val(Text1.Text)
i=1
Do While i<=8 And flag
If a(i)=Key Then
flag=False
Else
i=i+1
End If
Loop
If Not flag Then
Label1.Caption=“Find!”
Else
Label1.Caption=“Fail!”
End If
数组元素a(1)到a(8)的数据依次为“11,2,0,6,8,3,5,8”,程序运行时,在文本框Text1中输入8,则在标签Label1中显示的内容是( )
A.“Find!” B.“Fail!”
C.Find! D.Fail
4.某对分查找算法的VB程序段如下:
key = Val(Text1.Text)
i = 1: j = 10
Text2.Text = “ ”
Do While i <= j
m = Int((i + j) / 2 + 0.5)
If key = a(m) Then Exit Do ′Exit Do表示退出循环
If key < a(m) Then j = m - 1 Else i = m + 1
Text2.Text = Text2.Text + Str(a(m))
Loop
数组元素a(1)到a(10)的值依次为“8,17,24,30,36,40,55,58,61,66”,文本框Text1中输入的值是30,执行该程序段,文本框Text2中显示的是( )
A.40 24 B.40 24 36
C.36 24 D.36 17 24
5.某对分査找算法的VB程序段如下:
i = 1: j = 7: s = “ ”
key = Int(Rnd * 100)
Do While i <= j
m = (i + j) 2
If key = a(m) Then
s = s + “M”: Exit Do ′Exit Do 表示退出循环
ElseIf key < a(m) Then
j = m - 1: s = s + “L”
Else
i = m + 1: s = s + “R”
End If
Loop
Text1.Text = s
数组元素a(1)到a(7)的值依次为“24,35,38,41,45,69,78”。若该程序段执行后,文本框Text1中显示的内容可能是( )
A.RL B.LMR
C.RLR D.LRLM
6.数组a为一组正整数,奇数在前,偶数在后。奇数与偶数已分别按升序排序。依据对分查找思想:设计一个在数组a中查找数据Key的程序。实现该功能的VB程序段如下:
i = 1: j = 10
Key = Val(Text1.Text)
Do While i <= j
m = (i + j) 2
If a(m) = Key Then Exit Do ′Exit Do表示退出循环
If Key Mod 2 = 1 And a(m) Mod 2 = 0 Then
ElseIf Key Mod 2 = 0 And a(m) Mod 2 = 1 Then
Else
End If
Loop
If i > j Then s = “没有找到!” Else s = “位置:” + Str(m)
Text2.Text = s
上述程序中方框处可选语句为:
①i = m + 1
②j = m - 1
③If Key < a(m) Then j = m - 1 Else i = m + 1
则(1)、(2)、(3)处语句依次是( )
A.①、②、③ B.①、③、②
C.②、①、③ D.③、②、①
7.有以下VB程序段:
Dim a As String, b As String, p As String, s As String
a = Text1.Text
b = Text2.Text
c = Text3.Text
p = “ ”
For i = 1 To Len(a)
If b = Mid(a, i, Len(b)) Then
s = s + c
p = p + Str(i)
Else
s = s + Mid(a, i, 1)
End If
Next i
Label1.Caption = p
若文本框Text1中输入“Hello,Python!I use Python!”,文本框Text2中输入“Python”, 文本框Text3中输入“VB”运行该段程序后,标签Label1中显示的是( )
A.7 20 B.8 21
C.12 26 D.13 27
8.某对分査找算法的VB程序段如下:
i = 1: j = 9: n = 0
key = Val(Textl.Text)
Do While i<= j
n = n + 1
m = Fix((i + j) / 2)
If key = d(m) Then Exit Do ′Exit Do表示退出循环
If key < d(m) Then j = m - 1 Else i = m + 1
Loop
数组元素d(1)到d(9)的值依次为“7,12,18,25,39,58,61,72,86”。若该程序段运行结束后,n的值为2,则key的值是( )
A.39 B.18或61
C.18或72 D.12或61
9.用对分查找法和顺序查找法在数字序列“1,2,3,5,8,13,21,34,55”中查找数字13,两种方法都能访问到的数字是( )
A.3 B.5
C.8 D.34
10.采用如下对分查找算法对数组a中7个有序数据“15,38,51,66,77,81,99”进行查找,查找数据为“55”。
i = 1: j = 7: x = 55
Do While i <= j
m = (i + j) 2
If a(m) = x Then Exit Do
If a(m) > x Then j = m - 1 Else i = m + 1
Loop
上述程序段运行后,下列表达式正确的是( )
A.i=m+1 B.i=m-1
C.j>m+1 D.j11.下列程序段用于在前面部分为升序后面部分为降序的数组 a 中查找最大值,返回该数值及其位置(下标)。
i = 1: j = 10
flag = False
Do While i <= j And Not flag
m = (i + j + 1) 2
If a(m) < a(m - 1) And a(m) > a(m + 1) Then
ElseIf a(m) > a(m - 1) And a(m) > a(m + 1) Then
ElseIf a(m) > a(m - 1) And a(m) < a(m + 1) Then
End If
Loop
List1.AddItem Str(a(m)) +Str(m)
上述程序方框处可选句为:
①i=m+1
②j=m-1
③flag = True
则①②③处语句依次是( )
A.①②③ B.①③②
C.③①② D.②③①
二、非选择题
12.编写一个单词查找程序,其功能是:在文本框Text1中输入要查找的单词,单击“查找”按钮Command1后,在标签Label4中输出查找结果。程序运行效果如下图所示。
算法说明:
(1)英语单词存放在数组words中。
(2)如果在数组words中找到要查找的单词,则在标签Label4中显示“查找成功!”,并显示单词在数组words中出现的次数,如果未找到则显示“无此单词,请重输!”。
实现上述功能的VB程序如下,请在程序划线处填入合适的语句。
Dim n As Integer
Dim words(1 To 100) As String
Private Sub Command1_Click()
Dim key As String, i As Integer, times As Integer
key = Text1.Text
times = 0
For i = 1 To n
If key=words(i) Then ______②______
Next i
If times > 0 Then
Label4.Caption=“查找成功!共找到”+________③________ +“个”
Else
Label4.Caption = “无此单词,请重输!”
End If
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim word As String
word = Text1.Text
If KeyAscii = 13 Then
n = n + 1
__________①________
List1.AddItem Str(n) + “:” + word
Text1.Text = “ ”
End If
End Sub
13.小明编写了一个查找替换的VB程序,其功能为:在一串由汉字、空格和标点符号组成的文本中,把文本中的某个字符串用另一个字符串替换。
程序界面如下图所示,程序运行时,在文本框Text1中输入一段文本,在文本框Text2中输入查找的字符串,在文本框Text3中输入替换为的字符串,单击“查找替换”按钮Command1,则在文本框Text4中输出替换后的文本,在标签Label6中显示替换的次数。
实现上述功能的VB程序如下,请在程序划线处填入合适的代码。
Private Sub Command1_Click()
Dim st1 As String, st2 As String
Dim i As Integer, n As Integer, count As Integer
Dim st3 As String, ch As String, result As String
result = “ ”
st1 = Text1.Text
st2 = Text2.Text
st3 = Text3.Text
len1 = Len(Text2.Text)
________①______
result = “ ”
i = 1
Do While i <= n
________②________
If ch = st2 Then
result = result + st3
count = count + 1
i = i + len1
Else
________③________
i = i + 1
End If
Loop
Text4.Text = result
Label6.Caption = Str(count)
End Sub
14.小华写了一个模糊查询的VB程序,具体功能如下:程序运行时,在列表框List1中显示热门书籍名称,在文本框Text1中输入查询关键词后,单击“开始查询”按钮Command1,则在列表框List2中显示包含此关键词的书籍名称,并统计找到的书籍数;若找不到,则在列表框List2中输出“查无此书”。程序运行界面如下图所示:
为实现上述的功能的程序如下,加框处的代码有误,请改正。
Dim book(1 To 20) As String, st As String
Const n = 20
Private Sub Form_Load()
′读入n个数据,存储在数组book中,并显示在列表框List1中
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, len1 As Integer, len2 As Integer,k As Integer
st = Text1.Text
List2.Clear
len1 = Len(st)
k = 0
For i = 1 To n
len2 = Len(book(i))
′①
Do While j <= len2 - len1 + 1
If Then ′②
List2.AddItem book(i)
k = k + 1
End If
j = j + 1
Loop
Next i
If k> 0 Then
List2.AddItem “共找到”+Str(k) + “条信息”
Else
List2.AddItem “查无此书”
End If
End Sub
程序中加框①处应改正为_____________________________________________;
加框②处应改正为_________________________________________________。
15.大家期盼的校运会要来了,同学们踊跃报名,共有20人报了100米,30人报了200米。小明编写了一个VB程序,用于查询同时报名参加100米和200米比赛的学生,并统计学生数。具体功能如下:程序运行时,在列表框List1中显示报100米的学生学号和姓名,在列表框List2中显示报200米的学生学号和姓名,单击“排序”按钮Command1后,将List2中数据按“姓名”升序排序,并将排序后的数据重新显示在列表框List2中;单击“查询并统计”按钮Command2后,在列表框List3中显示同时报名参加100米和200米比赛的学生信息,并在该列表框的最后显示同时报名这两项比赛的学生数。程序运行界面如下图所示:
为实现上述功能的程序如下,请在划线处填入合适的语句或代码。
Dim xm1(1 To 20) As String, xh1(1 To 20) As String′数组xm1、xh1分别存储选报课程1的学生的姓名和学号
Dim xm2(1 To 30) As String, xh2(1 To 30) As String′数组xm2、xh2分别存储选报课程2的学生的姓名和学号
Const n = 20, m = 30
Private Sub Form_Load()
′获取选报数据,并显示在列表框List1和List2中
′代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, tt As String
List2.Clear
For i = 1 To m - 1
For j =______①______ Step -1
If xm2(j) < xm2(j - 1) Then
tt = xm2(j): xm2(j) = xm2(j - 1): xm2(j - 1) = tt
tt = xh2(j): xh2(j) = xh2(j - 1): xh2(j - 1) = tt
End If
Next j
Next i
For i = 1 To m
List2.AddItem xh2(i) + “ ” + xm2(i)
Next i
End Sub
Private Sub Command2_Click()
Dim i As Integer, j As Integer, w As Integer, tt As String, k As Integer
For i = 1 To n
p = 1
______②______
Do While p <= q
w = (p + q) 2
If xm1(i) = xm2(w) Then
List3.AddItem xh1(i) + “ ” + xm1(i)
k = k + 1
End If
If ______③______Then
q = w - 1
Else
p = w + 1
End If
Loop
Next i
List3.AddItem “共有” + Str(k) + “ 位同学”
End Sub
16.对分查找算法可用于求解方程的近似值。现要求方程x3-4x2+x+5=0的一个近似值,可设f(x)= x3-4x2+x+5,若有区间[a,b],使f(a)与f(b)异号,则该区间内必存在该方程的一个解。小明为此编写了VB程序,功能如下:程序运行时,在文本框Text1、Text2中输入区间值a、b,要求a实现上述功能的VB程序如下,请在划线处填入合适的语句。
Function f(x As Double) As Double
Dim y As Double
________①________
f = y
End Function
Private Sub Command1_Click()
Dim a As Double, b As Double, m As Double, x As Double
a = Val(Text1.Text)
b = Val(Text2.Text)
If f(a) * f(b) < 0 And a < b Then
Do While a <= b
______②______
If Abs(f(m)) < 0.00001 Then Exit Do
If ______③______ Then
b = m
Else
a = m
End If
Loop
x = Format(m, “0.00000”) ′Format函数用于定义输出的小数位数
List1.AddItem “[” & Text1.Text & “,” & Text2.Text & “]” & “解为:” & x
Else
List1.AddItem “[“ & a & ”,“ & b & ”]” & “请重新输入区间”
End If
End Sub