专题二 选择合适语句完善程序功能
1.“不重复数”的特征是任何相邻两个数位上的数字都不相同。如 1101 是重复数,1201是不重复数。判断某数是不重复数的 VB 程序段如下:
s = Text1.Text
____(1)____
i = 1: flag = True
Do While i <= n - 1 And flag
If ____(2)____ Then flag = False
i = i + 1
Loop
If____(3)____ Then
Label1.Caption = ”重复数”
Else
Label1.Caption = ”不重复数”
End If
上述程序中方框处可选语句为:
① flag=False ②n=Len(s) ③Mid(s, i, 1) = Mid(s, i + 1, 1)
则(1)(2)(3)处语句依次是( )
A.②③① B.①③② C.②①③ D.③②①
解析 flag表示是否重复的标志,每趟从后往前进行查找,进行相邻两个数据的比较,不相等进行连接。
答案 C
2.在文本框Text1内输入字符串,单击去重按钮Command1,将字符串后面相同的字符删除,并在文本框Text2中输出经过删除的字符串。请在下面划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String, s1 As String, c As String
s = Text1.Text
For i = 1 To Len(s)
c = Mid(s, i, 1)
s1 = ____(1)____
For j = ____(2)____
If c <> Mid(s, j, 1) Then
s1 = s1 + Mid(s, j, 1)
End If
Next j
___(3)____
Next i
Text2.Text = s
A.(1)s1 = Mid(s, 1, 1) (2)i + 1 To Len(s) (3)s1 = s
B.(1)s1 = Mid(s, 1, 1) (2)i To Len(s) (3)s1 = s
C.(1)s1 = Mid(s, 1, i) (2)i To Len(s) (3)s = s1
D.(1)s1 = Mid(s, 1, i) (2)i + 1 To Len(s) (3)s = s1
解析 j每趟从i+1向后找,把不相等的连接起来,前面的是不相等的连接到s1中。
答案 D
3.一个正整数从高位到低位上的数字依次递增,则称其为升序数(如1369、2779是升序数,而2547不是升序数),编写VB代码如下:
Dim i As Integer, s As String, flag As Boolean
s = Text1.Text
flag = True
____ (1)____
Do While i <= Len(s) And flag = True
If ____(2)____ Then flag = False
i = i + 1
Loop
If ____(3)____ Then
Label2.Caption = s + ”满足条件!”
Else
Label2.Caption = s + ”不满足条件!”
End If
填空处的代码由以下三部分组成:
①flag = True ②i=2 ③Mid(s, i, 1) < Mid(s, i - 1, 1)
④i=1 ⑤flag = False
代码顺序正确的选项是( )
A.②①③ B.②③① C.②③⑤ D.④③①
解析 flag是一个标志,当他成立时输出。从第2个位置开始与他前一个位置的字符比较,如果比前一个字符小,则flag的值为Flag退出循环。
答案 B
4.对称字符串的特征是从左到右读和从右到左读完全一样的。如“abba”是对称的,“abcba”也是对称的。判断字符串是否对称的VB程序段如下:
N=Len(s)
K=0:j=n
For i = 1 To n/2
Next i
If k = 0 Then Label1.Caption =”对称” Else Label1.Caption= ”不对称”
方框中的代码由以下三部分组成:
①j = j - 1
②If c1 <> c2 Then k = k + 1
③ c1= Mid(s,i,1) : c2 = Mid(s,j,1)
代码顺序正确的选项是( )
A.①③② B.②③① C.③②① D.②①③
解析 判断对称思想,依次对首尾字符作比较,变量i、j分别代表首尾字符位置。
第1次i=1,j=n,第2次i=2,j=n-1。
答案 C
5.向文本框Text1中输入一串包含大小写的字母,统计出现次数最多的字母(不区分大小写)并将该字母以大写方式输出到文本框Text2,如有多个字母次数相同的,则只记录最后出现的字母,部分程序如下。
Dim c(1 To 26) As Integer
s = Text1.Text
For i = 1 To Len(s)
x = Mid(s, i, 1)
If x >= ”a” Then
t = Asc(x) - Asc(”a”) + 1
Else
t = Asc(x) - Asc(”A”) + 1
End If
___①____
If c(t) >= Max Then Max = c(t): ____②______
Next i
Text2.Text = Chr(f + Asc(”A”))
划线处应该填入的正确语句是( )
A.①c(t-1)=c(t-1)+1 ②f=t
B.①c(t)=c(t)+1 ②f=t
C.①c(t-1)=c(t-1)+1 ②f=t-1
D.①c(t)=c(t)+1 ②f=t-1
解析 t表示字母在字母表中位置,c(t)表示该字母的个数,f表示最多字母在字母表中距离a的位置。
答案 D
6.用VB编写统计某字母开头的单词个数的程序,句子以“.”结束,单词之间用空格分隔,单词没有缩写或其他特殊形式。部分程序代码如下所示:
s = Text1.Text ′输入的英语短文
t = Text2.Text ′要统计的开头字母
b = Len(s):f = True
For i = 1 To b
c = Mid(s, i, 1)
If ____①____ Then
n = n + 1
____②____
ElseIf c = ” ” Or c = ”.” Then
____③____
Else
f = False
End If
Next i
Label3.Caption=”以”+t+”为开头的单词个数:”+Str(n)
End Sub
为实现上述程序,划线处应填入的代码是( )
A.①f And c = t ②f = False ③f = True
B.①f = False And c = t ②f = False ③f = True
C.①c = t ②f = True ③f = False
D.①f = True And c = t ②f = True ③f = False
解析 f是单词开头的标志,如果与t相同,则个数增加一个。同时把标志改为False.
答案 A
7.编写VB程序,实现如下功能,在文本框Text1中输入一个大于1000的正整数,单击按钮Command1后,删除其中的3个数字,且保证余下的数字在不改变顺序的情况其数值最大,然后在文本框Text2中输出该数。代码如下所示:
Private Sub Command1_Click()
Dim s As String, n As Integer, i As Integer, j As Integer
s = Text1.Text
For i = 1 To 3
n = Len(s)
For j = 2 To n
IfThen Exit For
Next j
s = Mid(s, 1, j - 2) + Mid(s, j, n - j + 1)
Next i
Text2.Text = s
End Sub
加框处的正确代码为( )
A.Mid(s,j,1)
B.Mid(s,j-1,1)>Mid(s,j,1)
C.Mid(s,j,1)>Mid(s,j+1,1)
D.Mid(s,j-1,1)答案 D
8.将文本框Text1中字符串相同的字符删除,并在文本框Text2中输出的部分程序代码如下所示:
Dim s As String, s1 As String, c As String
s = Text1.Text
For i = 1 To Len(s)
c = Mid(s, i, 1)
s1 = ____(1)____
For j =____(2)____
If c <> Mid(s, j, 1) Then
s1 = s1 + Mid(s, j, 1)
End If
Next j
____ (3)____
Next i
Text2.Text = s
End Sub
划线处应填入的代码是( )
A.(1)s1=Mid(s,1,1) (2)i+1 To Len(s) (3)s1=s
B.(1)s1=Mid(s,1,1) (2)I To Len(s) (3)s1=s
C.(1)s1=Mid(s,1,i) (2)I To Len(s) (3)s=s1
D.(1)s1=Mid(s,1,i) (2)i+1 To Len(s) (3)s=s1
答案 D
9.下面程序的功能是:产生30个[1,100]范围内的随机整数,并统计这30个随机数中的整数的个数(重复出现算1个),结果显示在标签Label1中。例如:5个随机数[1,2,3,3,2]中不重复数字个数为3。程序部分代码如下:
count = 0
For i = 1 To 30
a(i) = Int(Rnd * 100) + 1
Next i
For i = 1 To 30
____①____
Next i
For i = 1 To 100
If b(i) <> 0 Then count = count + 1
Next i
Label1.Caption = ”不重复数字个数” + Str(count)
为实现上述功能,则程序划线处应填入的语句为( )
A.b(i)=1 B.b(a(i)) = a(b(i)) + 1
C.b(i)=b(i)+1 D.b(a(i)) = b(a(i)) + 1
解析 b数组下标对应a数组元素值,计算a数组元素值的个数。
答案 D
10.以下代码实现功能为:随机产生100个[1,99]之间的整数,统计产生最多的整数及个数。
Private Sub Command1_Click()
Dim a(1 To 100) As Integer, b(1 To 100) As Integer
Dim i As Integer, k As Integer, max As Integer
Randomize
For i = 1 To 100
List1.AddItem Str(a(i))
Next i
max = 0
For i = 1 To 100
If b(i) > max Then
k = i
End If
Next i
Label1.Caption = ”数字” + Str(k) + ”出现了” + Str(max) + ”次”
End Sub
上述程序中方框处可选语句有:( )
①a(i) = Int(Rnd * 99) + 1 ②a(i) = Int(Rnd * 100) + 1 ③ b(a(i)) = b(a(i)) + 1 ④b(i) = b(i) + 1 ⑤max = b(i) ⑥ max = i
则(1)(2)(3)处语句依次是( )
A.①③⑤ B.②③⑤ C.①④⑤ D.②④⑥
解析 [1,99]之间的整数可以表达为[0,99)+1,在计数语句中,下标对应的数组元素值表示该下标的个数。
答案 A
11.某VB程序功能如下:输入正整数n,单击命令按钮Command1后,则会生成一串有规律的数字序列,形式为“n n-1 n-2 … 3 2 1 2 3 … n-2 n-1 n”。例如n=8时,生成的数字序列如图所示。
代码如下:
Private Sub Command1_Click()
Dim n As Integer, i As Integer, s As String
n = Val(Text1.Text)
s = ” ”
For i = 1 To 2 * n - 1
If i <= n Then____①____ Else ____②____
Next i
Label1.Caption = s
End Sub
为实现以上功能,划线①②处应分别填写( )
A.①s = s & Str(n - i + 1) ②s = s & Str(i - n + 1)
B.①s = Str(n - i + 1) ②s = Str(i - n + 1)
C.①s = s & Str(i - n + 1) ②s = s & Str(n - i + 1)
D.①s = Str(i - n + 1) ②s = Str(n - i + 1)
解析 条件i <= n成立,表示在前半段的降序数列,降序的第1个数是1的对称数,否则是后面半段的升序数列。后面半段是第i项减去n+1。
答案 A
12.小庄编写了一个统计数组元素a(l)到a(n)中的“升序段”个数s(如图所示的数据序列,其 “升序段”的个数等于3)的VB程序。部分程序如下:
k = 0 : s = 0
For i = 2 To n
If a(i) > a(i - 1) Then
Else
If k = 1 Then
s=s+1
k=0
End If
End If
Next i
Text1.Text = Str(s)
方框中的正确语句是( )
A.k = k - 1 B.k = 1
C.k = -1 D.k = k + 1
解析 k表示升序段中数的个数。
答案 D
13.数组a中的n个元素经排序生成左右交替上升数据序列的VB程序段如下:
For i = 1 To
For j = To i + 1 Step -1
If d(j) t = d(j): d(j) = d(j - 1): d(j - 1) = t
End If
Next j
For j = i + 1 To
If d(j) t = d(j): d(j) = d(j + 1): d(j + 1) = t
End If
Next j
Next i
方框中的代码由以下三部分组成:
①n - i + 1 ②n \2 ③n - i
代码顺序正确的选项是( )
A.②①③ B.①②③
C.②③① D.③②①
解析 一趟排序中包含两个排序过程,先是从后往前,由于第i趟后面对称的位置n-i+1将有序,因此从该位置开始排序。
答案 A
14.下列 VB 程序段的功能实现了对数组元素 a(1)到 a(n)从小到大的排序。
For i = 2 To n - 1
k = a(i): j= ______①______
Do While k < a(j)
____②____
j = j - 1
If j = 0 Then Exit Do
Loop
____③____
Next i
上述程序段 3 个划线处的表达式分别为( )
A.①i ②a(j-1) = a(j) ③a(j+1)=k
B.①i ②a(j+1) = a(j) ③a(j)=k
C.①i-1 ②a(j-1)=a(j) ③a(j)=k
D.①i-1 ②a(j+1)=a(j) ③a(j+1)=k
解析 这是插入排序的算法,在i前面一个数开始查找。如果比k大,将该位置上数往后移动。
答案 D
15.下列VB程序段功能为:根据数组a中各元素的大小关系,计算各元素升序排列的序号,并将序号保存在数组b中,如数组a各元素为“20,40,10,30”,b(1)到b(4)各元素的值分别为“1,2,3,4”,程序运行后b(1)到b(4)各元素的值分别为“2,4,1,3”。
For i=1 to n
______(1)____
Next i
For i=1 to n-1
k=i
For j=i+1 To n
If ____(2)______Then k=j
Next j
If k <> i Then
______(3)____
End if
Next i
上述程序段3个方框处的代码分别为( )
A.(1)b(i)=1 (2)a(j)>a(k) (3)t=a(k):a(k)=
a(i):a(i)=t
B.(1)b(i)=1 (2)a(b(j))>a(b(k)) (3)t=a(k):
a(k)=a(i):a(i)=t
C.(1)b(i)=i (2)a(j)>a(k) (3)t=b(k):b(k)=
b(i):b(i)=t
D.(1)b(i)=i (2)a(b(j))>a(b(k)) (3)t=b(k):
b(k)=b(i):b(i)=t
解析 b数组存储的是a数组元素的位次,把b数组初值赋值为1-n,利用选择排序的思想,把b数组元素作为a的下标。
答案 D
16.编写VB程序实现以下功能:对数组d中的元素降序排序,然后在列表框List1中显示排序后的结果,代码如下:
d(1) = 3: d(2) = 8: d(3) = 3: d(4) = 5: d(5) = 7
d(6) = 4: d(7) = 7: d(8) = 3: d(9) = 6: d(10) = 10
For i = 1 To n
c(i) = 0
Next i
For i = 1 To n
___①____
Next i
For i = n To 1 Step -1
Do While c(i) > 0
List2.AddItem Str(i)
___②____
Loop
Next i
要实现上述功能,则方框①②中的语句分别是( )
A.c(i) = c(i) + 1c(i) = c(i) + 1
B.c(d(i)) = c(d(i)) + 1c(i) = c(i) + 1
C.c(i) = c(i) + 1c(i) = c(i) – 1
D.c(d(i)) = c(d(i)) + 1c(i) = c(i) – 1
解析 数组c统计d数组元素中的数的个数,再按从大到小,输出c(i)中的数。
答案 D
17.统计连续小写字母最长的个数,编写VB代码如下:
s=Text1.Text
___ (1)____
ans=0
For i=1 To Len(s)
t=Mid(s,i,1)
If t>=”a” And t<=”z” Then
c=c+1
______(2)______
Else
___ (3)____
End If
Next i
Text2.Text=Str(ans)
填空处的代码可由以下部分组成:
①c=0 ②c=1 ③If c>ans Then ans=c ④If c正确的代码顺序是( )
A.②③① B.①④⑤
C.②④② D.①③①
解析 本题考查VB程序算法实现能力。本题程序逐个字符检查是否是小写字母,并记录最长连续小写字母个数。程序中,ans表示最长连续小写字母个数,c表示当前字符结尾的连续小写字母个数。
答案 D
18.下列程序段用于在前面部分为升序后面部分为降序的数组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) Then
____(1)______
ElseIf a(m)>a(m-1) And a(m)>a(m+1) Then
____(2)____
ElseIf a(m)>a(m-1) And a(m) ______(3)____
End If
Loop
List1.AddItem Str(a(m)) +Str(m)
上述程序方框处可选语句为
①i=m+1 ②j=m-1 ③flag=True
则(1)(2)(3)处语句依次是 ( )
A.①②③ B.①③②
C.③①② D.②③①
解析 a(m)a(m+1)条件成立,表示a(m)处在后半段的第一个位置,且后半段的最大值小于前半段的最大值,应往前找。a(m)>a(m-1) And a(m)>a(m+1)条件成立,表示a(m)处在后半段的第一个位置,且后半段的最大值大于前半段的最大值,该数就是最大值。a(m)>a(m-1) And a(m)答案 D
19.下列VB程序段的功能为:对数组a中的n个元素进行排序,生成左右交替上升的数据序列。如排序前a中元素依次为:48, 34, 86, 46, 85, 100,程序运行后a中元素依次为:34, 48, 86, 100, 85, 46。
For i = 1 To ____①____
k = i
For j = i + 1 To n - i + 1
If a(k) > a(j) Then k =____②____
Next j
If k <> i Then t = a(k): a(k) = a(i): a(i) = t
For j=____③____
If a(j) < a(j + 1) Then t = a(j): a(j) = a(j + 1): a(j + 1) = t
Next j
Next i
上述程序段3个划线处的表达式分别为( )
解析 前半段选择排序,后半段从前往后冒泡排序。
答案 D
20.某 VB 程序段功能为:数组 a 顺序不变,输出升序结果。例如 a 数组各元素的值分别为”53,9,71,45,10,41”,最终 a 数组保持不变,而列表框 List2 输出”9,10,41,45,53,71”。
Const n= 6
Dim a(1To n) As Integer
Private Sub Command1_Click()
Dim b(1To n) As Integer
Dim t As Integer, i As Integer, j As Integer
For i =1 To n
b(i) = i
Next i
For i =1 To____①____
For j = ____②____ To n
If____③____ Then
t = b(i): b(i) = b(j): b(j) = t
End If
Next j
Next i
For i =1 To n
List2.AddItem a(b(i))
Next i
End Sub
上述程序段 3 处下划线的表达式分别为( )
A.①n-1 ②i+1 ③b(i) > b(j)
B.①n-1 ②i+1 ③a(b(i)) > a(b(j))
C.①n ②1 ③b(i) > b(j)
D.①n ②1 ③a(b(i)) > a(b(j))
答案 B
21.下列 VB 程序段的功能实现了对数组元素 a(1)到 a(n)从小到大的排序。
For i = 2 To n - 1
k = a(i): j=____①____
Do While k < a(j)
___②____
j = j - 1
If j = 0 Then Exit Do
Loop
___③____
Next i
上述程序段 3 个划线处的表达式分别为( )
A.①i ②a(j - 1) = a(j) ③a(j + 1) = k
B.①i ②a(j + 1) = a(j) ③a(j) = k
C.①i-1 ②a(j - 1) = a(j) ③a(j) = k
D.①i-1 ②a(j + 1) = a(j) ③a(j + 1) = k
解析 这是插入排序的算法思想。
答案 D
22.有n个整数存储在a数组,将其中的奇数转存到b数组中,并将b数组从小到大排序。部分程序如下:
t = 0
For i = 1 To n
If a(i) Mod 2 = 1 Then
t = t + 1
End If
Next i
For i = 1 To t - 1
For j = t To i + 1 Step -1
If b(j) < b(j - 1) Then
temp=b(j):b(j)=b(j-1):b(j-1)=temp
End If
Next j
Next i
方框中应填写的正确语句是( )
A.b(i) = a(i) B.b(i) = t
C.b(t) = a(i) D.b(t) = a(t)
解析 t表示奇数的个数。
答案 C
23.下列VB程序功能为:根据文本框Text1中各字符的大小关系,计算各字符升序排列的序号,并将序号保存在数组y中。如文本框内容为“2011”,程序运行后y(1)~ y(4)各元素的值分别为“4,1,2,3”。
s = Text1.Text
n = Len(s)
For i = 1 To n
y(i) = 1
Next i
For i = 1 To
For j = To n
If Then
y(j) = y(j) + 1
Else
y(i) = y(i) + 1
End If
Next j
Next i
上述程序段3各方框处的表达式分别为( )
A.(1)n (2)1 (3)Mid(s, j, 1) >= Mid(s, i, 1)
B.(1)n (2)1 (3)Mid(s, j, 1) > Mid(s, i, 1)
C.(1)n-1 (2)i+1 (3)Mid(s, j, 1) >= Mid(s, i, 1)
D.(1)n-1 (2)i+1 (3)Mid(s, j, 1) > Mid(s, i, 1)
解析 结合代码内循环IF语句分析,要计算每个字符的排列的序号(名次),每个字符需要两两比较一次。选项A和B的循环次数都会导致重复比较,所以排除。根据题目中给出的例子,后面(第j个元素)等于前面的元素(第i个元素),后面的元素名次号也要加1。所以答案选C。
答案 C
24.从数组元素 a(1)开始,按词典顺序存储若干英语单词(单词均小写,升序)。初始时,数组元素 b(0)值为 0,b(1)~b(26)分别存储首字母为 a、b、c、……、z 的单词个数。依据对分查找思想:设计一个在数组 a 中查找某个单词位置的程序。实现该功能的 VB 程序段如下:
key = Text1.Text ′输入查找单词
For i = 1 To 26
b(i) = b(i) + b(i-1)
Next i
____(1)____
i = b(k-1)+1
j = b(k)
Do While i <= j
m = (i + j) \2
If key = a(m) Then Exit Do ′Exit Do 表示退出循环
If key < a(m) Then j = m – 1 Else i = m + 1
Loop
If ____(2)______Then s = ”没有找到!” Else s = ”位置:” + Str(m)
Text2.Text = s
上述程序段 2 个方框处的代码分别为( )
A.(1)k = Asc(Mid(key,1,1))- Asc(“a”) + 1
(2)i <= j
B.(1)k = Asc(Mid(key,1,1))- Asc(“a”)
(2)i <= j
C.(1)k = Asc(Mid(key,1,1))- Asc(“a”) + 1
(2)i> j
D.(1)k = Asc(Mid(key,1,1))- Asc(“a”)
(2)i> j
解析 k表示查找单词第1个字母在字母表中位置,因此是减去a的内码还要加1.没有找到的条件是i>j。
答案 C
25.数组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
If Key Mod 2 = 1 And a(m) Mod 2 = 0 Then
____(1)____
ElseIf Key Mod 2 = 0 And a(m) Mod 2 = 1 Then
____(2)____
Else
____(3)____
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.③②①
解析 Key Mod 2 = 1 And a(m) Mod 2 = 0条件成立,表示查找的数是奇数,但m位置指向的是偶数,应在左半段中查找,Key Mod 2 = 0 And a(m) Mod 2 = 1条件成立,表示查找的数是偶数,但m位置指向的是奇数,应在右半段中查找,否则他们同时为奇或同时为偶。
答案 C
26.循环升序数组指的是将一个升序数组循环右移动若干距离之后变成的数组。如[1,2,3,4,5]循环右移1位,就成为[5,1,2,3,4],再右移1位,就成为[4,5,1,2,3],…,其中[5,1,2,3,4]和[4,5,1,2,3]都是循环升序数组。该数组的特点是:将循环升序数组从中间分开,肯定有一边是有序数组,另外一边是循环有序数组。小杜研究发现对分查找算法适当优化后也适用于循环升序数组。在文本框输入被查找数据key,查找循环升序数组a中是否有相同的元素存在。编写的VB程序段如下:
i = 1: j = n ′数组a下标从1到n为止
Key = Val(Text1.Text)
Do While i <= j
m = (i + j) \2
If a(m) = Key Then Exit Do
If a(i) < a(m) Then
If______①______Then j = m - 1 Else i = m + 1
Else
If Key > a(m) And Key <= a(j) Then i = m + 1 Else j = m - 1
End If
Loop
If i <= j Then Text2.Text = ”查找成功” Else Text2.Text = ”查找失败”
要使程序实现对分查找过程,则方框中的语句是( )
A.Key >= a(i) And Key < a(m)
B.Key <= a(i) And Key > a(m)
C.Key >= a(i) And Key <= a(j)
D.Key > a(i) And Key <= a(m)
解析 条件a(i) < a(m)成立,表示处于前半段升序的过程。
答案 A
27.VB程序段如下:
n = Val(Text1.Text)
k = 0
left = 1
right = n
Do While left <= right
k = k + 1
m = (left + right) \2
If m - left < right - m Then
left = m + 1
Else
right = m - 1
End If
Loop
在文本框Text1中输入16,执行该程序段,下列说法错误的是( )
A.程序运行后k的值是4
B.程序运行后m的值是16
C.程序运行后right的值是15
D.程序运行后left的值是16
答案 B
28.一组“非降序”的数据分别存储在数组元素a(1)……a(n)中,用对分查找算法在数组a中查找key值所在的位置,如果有重复的元素,则显示最小的位置。部分VB程序如下:
key = Val(Text1.Text)
i = 1: j = n
Do While i <= j
m = (i + j) \2
If a(m) > key Then
j=m-1
ElseIf a(m) < key Then
i=m+1
Else
IfThen
j = m - 1
Else
Label2.Caption = Str(key) + ”的起始位置是” + Str(m)
Exit Do
End If
End If
Loop
If i > j Then
Label2.Caption = ”找不到” + Str(key)
End If
要使程序实现上述算法思想,则方框①中的语句是( )
A.a(m - 1) = key
B.a(m) = key
C.m - 1 > 0 And a(m - 1) = key
D.m - 1 > 0 And a(m) = key
解析 当m不是第1个位置,且他前面的数与查找的数相等时,再往前找。
答案 C
29.某班要开展一个班会主题活动,需要将全班40名同学随机分成4个组,每组10人。为了排除人工分组的主观因素,小华设计了一个VB程序,他的程序算法如下:将40名同学的姓名放入数组a中,第一次从a(2)~a(40)中随机抽取一个数与a(1)交换,第二次从a(3)~a(40)中随机抽取一个数与a(2)交换,第三次从a(4)~a(40)中随机抽取一个数据与a(3)交换……依次类推,直到所有学生姓名随机的出现在数组a中,之后再将数组里的数据分别显示在4个ListBox中。该VB程序已经将40名同学的姓名存放到数组a中,其余程序代码部分代码如下:
Private Sub Command1_ Click( )
Randomize
For i = 1 To 39
____①____
y = a(i): a(i) = a(x): a(x) = y
Next i
For i = 1 To 40
If i <= 10 Then List1.AddItem a(i)
If i > 10 And i <= 20 Then List2.AddItem a(i)
If i > 20 And i <= 30 Then List3.AddItem a(i)
If i > 30 And i <= 40 Then List4.AddItem a(i)
Next i
划线处①的正确语句是( )
A.x=Int(Rnd*39)+i
B.x=Int(Rnd*40-i)+i+1
C.x=Int(Rnd*(40-i))+i+1
D.x=Int(Rnd*(i+1))+40-i
解析 要产生一个[i+1,40]之间的随机整数x。该范围可以转换为[0,40-i)+ i+1。
答案 C
30.小李编写了一个 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.ACE.OLEDB.12.0;datasource=”+App.Path+”[SX)]core.accdb”
conn.ConnectionString =strconn
Conn.Open
Set rs.ActiveConnection = conn
rs.Open ”Select * from stuinfo”
n=0
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条
A.①②③ B.①③④ C.①③⑤ D.②④⑤
解析 本题考查数据库连接。“ConnectionString”是 conn 对象的属性名,②错;程序运行后,a(1)=“张三”,④错。
答案 C
31.小王设计了一个数据库,用于存储程序中的数据,部分编辑界面如图所示:
编写了一个VB程序,用于读取该数据表中stname、score字段中值,分别存储到xm、df数组中,部分代码如下:
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim xm(1000) As String,df(1000) As Integer
conn.ConnectionString = ”Provider = Microsoft.ACE.OLEDB.12.0;DATA Source=” & App.Path & ”\ ① ”
Set rs.ActiveConnection = conn
rs.Open ”select * from ____②____”
n=0
Do While Not rs.EOF
n=n+1
xm(n)=rs.Fields(”stname”)
df(n)=____③____
rs.MoveNext
Loop
要使程序实现上述算法思想,则划线处①②③语句分别是( )
A.Mydata.accdb student rs.Fields (4)
B.Mydata student rs.Fields (4)
C.Mydata.accdb student rs.Fields (3)
D.Mydata student rs.Fields (3)
解析 本题主要考查Vb连接数据库的基本知识。从图中可以看出,数据库的名称为Mydata.accdb,数据表的名称为student。
答案 C
32.有1个升序排列的数组 a(a(1)~a(n),n≥3),从左到右相邻两个元素的差值(后一个元素值减去前一个元素值)先由小到大、再由大到小,且相邻两个差值不相等,为了查找相邻两个元素的最大差值,小李编写的 VB 程序段如下:
i = 1 :j = n
Do While i + 1 < j m = (i + j) \'2
If a(m+1)-a(m)>a(m)-a(m-1) Then
____①____
Else
____②____
End if
Loop
Label1.Caption=”相邻两个元素的最大差值是”+Str(a(j)-a(i))
上述程序段两个划线处的语句分别为( )
A.①i=m ②j=m
B.①i=m ②j=m-1
C.①i=m+1 ②j=m-1
D.①i=m+1 ②j=m
解析 本题考查对分查找的变形应用。从左到右相邻两个元素的差值先由小到大、再由大到小,呈现的是波峰状态,分析数组规律得知左边差值大,最大差值肯定在左边;右边差值大,最大差值肯定在右边;因为是两个元素差值代表一组,无论是右边a(m+1)-a(m)大,还是左边a(m)-a(m-1)大,下一轮查找都必须包含a(m),也就是i=m或j=m。
答案 A
33.小赵对选择排序算法进行了如下改进:在数组的所有元素中找出最大和次大数据的元素,然后将这两个元素分别与第1个和第2个元素交换数据,在余下的元素中找出最大和次大数据的元素,分别与第3个和倒数第4个元素交换数据,以此类推,直到所有元素的数据按升序排列。小赵编写的VB程序段如下:
For i = 1 To 8 Step 2
If a(i) > a(i + 1) Then
Max = i: Maxa = i + 1
Else
Max = i + 1: Maxa = i
End If
For j = i + 2 To 8
If a(j) >= a(Max) Then
____(1)____
____(2)____
Else
____(3)____
End If
Next j
t = a(Max): a(Max) = a(i): a(i) = t
If Maxa = i Then Maxa = Max
t = a(Maxa): a(Maxa) = a(i + 1): a(i + 1) = t
Next i
上述程序中划线处可选语句为:
①If a(j) > a(Maxa) Then Maxa = j
②Max = j
③Maxa = Max
则(1)(2)(3)处语句依次是( )
A.②③① B.①③②
C.②①③ D.③②①
解析 条件a(j) >= a(Max)表示找到一个最大的,先把原来最大赋值给次大值,再把当前的位置赋值给最大的,条件不成立,但满足比次大值大,需重新定位次大值。
答案 D