资源简介 专题二 选择合适语句完善程序功能1.“不重复数”的特征是任何相邻两个数位上的数字都不相同。如 1101 是重复数,1201是不重复数。判断某数是不重复数的 VB 程序段如下:s = Text1.Text ____(1)____i = 1: flag = TrueDo While i <= n - 1 And flagIf ____(2)____ Then flag = Falsei = i + 1LoopIf____(3)____ ThenLabel1.Caption = ”重复数”ElseLabel1.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表示是否重复的标志,每趟从后往前进行查找,进行相邻两个数据的比较,不相等进行连接。答案 C2.在文本框Text1内输入字符串,单击去重按钮Command1,将字符串后面相同的字符删除,并在文本框Text2中输出经过删除的字符串。请在下面划线处填入合适的代码。Private Sub Command1_Click()Dim s As String, s1 As String, c As Strings = Text1.TextFor 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 IfNext j___(3)____Next iText2.Text = sA.(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 = sC.(1)s1 = Mid(s, 1, i) (2)i To Len(s) (3)s = s1D.(1)s1 = Mid(s, 1, i) (2)i + 1 To Len(s) (3)s = s1解析 j每趟从i+1向后找,把不相等的连接起来,前面的是不相等的连接到s1中。答案 D3.一个正整数从高位到低位上的数字依次递增,则称其为升序数(如1369、2779是升序数,而2547不是升序数),编写VB代码如下:Dim i As Integer, s As String, flag As Booleans = Text1.Textflag = True____ (1)____Do While i <= Len(s) And flag = True If ____(2)____ Then flag = False i = i + 1LoopIf ____(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退出循环。 答案 B4.对称字符串的特征是从左到右读和从右到左读完全一样的。如“abba”是对称的,“abcba”也是对称的。判断字符串是否对称的VB程序段如下:N=Len(s)K=0:j=nFor i = 1 To n/2Next iIf 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。答案 C5.向文本框Text1中输入一串包含大小写的字母,统计出现次数最多的字母(不区分大小写)并将该字母以大写方式输出到文本框Text2,如有多个字母次数相同的,则只记录最后出现的字母,部分程序如下。Dim c(1 To 26) As Integers = Text1.TextFor i = 1 To Len(s)x = Mid(s, i, 1)If x >= ”a” Thent = Asc(x) - Asc(”a”) + 1 Elset = Asc(x) - Asc(”A”) + 1End If ___①____If c(t) >= Max Then Max = c(t): ____②______Next iText2.Text = Chr(f + Asc(”A”))划线处应该填入的正确语句是( )A.①c(t-1)=c(t-1)+1 ②f=tB.①c(t)=c(t)+1 ②f=tC.①c(t-1)=c(t-1)+1 ②f=t-1D.①c(t)=c(t)+1 ②f=t-1解析 t表示字母在字母表中位置,c(t)表示该字母的个数,f表示最多字母在字母表中距离a的位置。答案 D6.用VB编写统计某字母开头的单词个数的程序,句子以“.”结束,单词之间用空格分隔,单词没有缩写或其他特殊形式。部分程序代码如下所示:s = Text1.Text ′输入的英语短文 t = Text2.Text ′要统计的开头字母b = Len(s):f = TrueFor i = 1 To b c = Mid(s, i, 1) If ____①____ Then n = n + 1 ____②____ ElseIf c = ” ” Or c = ”.” Then____③____ Else f = False End IfNext iLabel3.Caption=”以”+t+”为开头的单词个数:”+Str(n)End Sub为实现上述程序,划线处应填入的代码是( )A.①f And c = t ②f = False ③f = TrueB.①f = False And c = t ②f = False ③f = TrueC.①c = t ②f = True ③f = FalseD.①f = True And c = t ②f = True ③f = False解析 f是单词开头的标志,如果与t相同,则个数增加一个。同时把标志改为False.答案 A7.编写VB程序,实现如下功能,在文本框Text1中输入一个大于1000的正整数,单击按钮Command1后,删除其中的3个数字,且保证余下的数字在不改变顺序的情况其数值最大,然后在文本框Text2中输出该数。代码如下所示:Private Sub Command1_Click()Dim s As String, n As Integer, i As Integer, j As Integers = Text1.TextFor i = 1 To 3n = Len(s)For j = 2 To nIfThen Exit ForNext js = Mid(s, 1, j - 2) + Mid(s, j, n - j + 1)Next iText2.Text = sEnd 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)答案 D8.将文本框Text1中字符串相同的字符删除,并在文本框Text2中输出的部分程序代码如下所示:Dim s As String, s1 As String, c As Strings = Text1.TextFor 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 IfNext j____ (3)____Next iText2.Text = sEnd Sub划线处应填入的代码是( )A.(1)s1=Mid(s,1,1) (2)i+1 To Len(s) (3)s1=sB.(1)s1=Mid(s,1,1) (2)I To Len(s) (3)s1=sC.(1)s1=Mid(s,1,i) (2)I To Len(s) (3)s=s1D.(1)s1=Mid(s,1,i) (2)i+1 To Len(s) (3)s=s1答案 D9.下面程序的功能是:产生30个[1,100]范围内的随机整数,并统计这30个随机数中的整数的个数(重复出现算1个),结果显示在标签Label1中。例如:5个随机数[1,2,3,3,2]中不重复数字个数为3。程序部分代码如下:count = 0For i = 1 To 30a(i) = Int(Rnd * 100) + 1Next iFor i = 1 To 30____①____Next iFor i = 1 To 100If b(i) <> 0 Then count = count + 1Next iLabel1.Caption = ”不重复数字个数” + Str(count)为实现上述功能,则程序划线处应填入的语句为( )A.b(i)=1 B.b(a(i)) = a(b(i)) + 1C.b(i)=b(i)+1 D.b(a(i)) = b(a(i)) + 1解析 b数组下标对应a数组元素值,计算a数组元素值的个数。答案 D10.以下代码实现功能为:随机产生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 100List1.AddItem Str(a(i)) Next i max = 0 For i = 1 To 100If b(i) > max Then k = iEnd 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,在计数语句中,下标对应的数组元素值表示该下标的个数。答案 A11.某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 Stringn = Val(Text1.Text)s = ” ”For i = 1 To 2 * n - 1If i <= n Then____①____ Else ____②____Next iLabel1.Caption = sEnd 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。答案 A12.小庄编写了一个统计数组元素a(l)到a(n)中的“升序段”个数s(如图所示的数据序列,其 “升序段”的个数等于3)的VB程序。部分程序如下: k = 0 : s = 0For i = 2 To nIf a(i) > a(i - 1) ThenElseIf k = 1 Thens=s+1 k=0 End IfEnd IfNext iText1.Text = Str(s) 方框中的正确语句是( )A.k = k - 1 B.k = 1C.k = -1 D.k = k + 1解析 k表示升序段中数的个数。答案 D13.数组a中的n个元素经排序生成左右交替上升数据序列的VB程序段如下:For i = 1 To For j = To i + 1 Step -1If d(j) t = d(j): d(j) = d(j - 1): d(j - 1) = tEnd If Next j For j = i + 1 To If d(j) t = d(j): d(j) = d(j + 1): d(j + 1) = tEnd If Next jNext i方框中的代码由以下三部分组成:①n - i + 1 ②n \2 ③n - i代码顺序正确的选项是( )A.②①③ B.①②③ C.②③① D.③②①解析 一趟排序中包含两个排序过程,先是从后往前,由于第i趟后面对称的位置n-i+1将有序,因此从该位置开始排序。答案 A14.下列 VB 程序段的功能实现了对数组元素 a(1)到 a(n)从小到大的排序。For i = 2 To n - 1 k = a(i): j= ______①______ Do While k < a(j)____②____j = j - 1If j = 0 Then Exit Do Loop____③____Next i上述程序段 3 个划线处的表达式分别为( )A.①i ②a(j-1) = a(j) ③a(j+1)=kB.①i ②a(j+1) = a(j) ③a(j)=kC.①i-1 ②a(j-1)=a(j) ③a(j)=kD.①i-1 ②a(j+1)=a(j) ③a(j+1)=k解析 这是插入排序的算法,在i前面一个数开始查找。如果比k大,将该位置上数往后移动。答案 D15.下列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 iFor i=1 to n-1k=iFor j=i+1 To n If ____(2)______Then k=j Next j If k <> i Then ______(3)____ End ifNext i上述程序段3个方框处的代码分别为( )A.(1)b(i)=1 (2)a(j)>a(k) (3)t=a(k):a(k)=a(i):a(i)=tB.(1)b(i)=1 (2)a(b(j))>a(b(k)) (3)t=a(k):a(k)=a(i):a(i)=tC.(1)b(i)=i (2)a(j)>a(k) (3)t=b(k):b(k)=b(i):b(i)=tD.(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的下标。答案 D16.编写VB程序实现以下功能:对数组d中的元素降序排序,然后在列表框List1中显示排序后的结果,代码如下:d(1) = 3: d(2) = 8: d(3) = 3: d(4) = 5: d(5) = 7d(6) = 4: d(7) = 7: d(8) = 3: d(9) = 6: d(10) = 10For i = 1 To nc(i) = 0Next iFor i = 1 To n___①____Next iFor i = n To 1 Step -1 Do While c(i) > 0List2.AddItem Str(i)___②____LoopNext i要实现上述功能,则方框①②中的语句分别是( )A.c(i) = c(i) + 1c(i) = c(i) + 1B.c(d(i)) = c(d(i)) + 1c(i) = c(i) + 1C.c(i) = c(i) + 1c(i) = c(i) – 1D.c(d(i)) = c(d(i)) + 1c(i) = c(i) – 1解析 数组c统计d数组元素中的数的个数,再按从大到小,输出c(i)中的数。答案 D17.统计连续小写字母最长的个数,编写VB代码如下:s=Text1.Text___ (1)____ans=0For i=1 To Len(s) t=Mid(s,i,1) If t>=”a” And t<=”z” Then c=c+1______(2)______ Else___ (3)____ End IfNext iText2.Text=Str(ans)填空处的代码可由以下部分组成:①c=0 ②c=1 ③If c>ans Then ans=c ④If c正确的代码顺序是( )A.②③① B.①④⑤C.②④② D.①③①解析 本题考查VB程序算法实现能力。本题程序逐个字符检查是否是小写字母,并记录最长连续小写字母个数。程序中,ans表示最长连续小写字母个数,c表示当前字符结尾的连续小写字母个数。答案 D18.下列程序段用于在前面部分为升序后面部分为降序的数组a中查找最大值,返回该数值及其位置(下标)。i = 1: j = 10 : flag = FalseDo While i <= j And Not flagm = (i + j + 1) \'2If 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 IfLoopList1.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)答案 D19.下列VB程序段的功能为:对数组a中的n个元素进行排序,生成左右交替上升的数据序列。如排序前a中元素依次为:48, 34, 86, 46, 85, 100,程序运行后a中元素依次为:34, 48, 86, 100, 85, 46。For i = 1 To ____①____k = iFor j = i + 1 To n - i + 1If a(k) > a(j) Then k =____②____Next jIf k <> i Then t = a(k): a(k) = a(i): a(i) = tFor j=____③____ If a(j) < a(j + 1) Then t = a(j): a(j) = a(j + 1): a(j + 1) = tNext jNext i上述程序段3个划线处的表达式分别为( )解析 前半段选择排序,后半段从前往后冒泡排序。答案 D20.某 VB 程序段功能为:数组 a 顺序不变,输出升序结果。例如 a 数组各元素的值分别为”53,9,71,45,10,41”,最终 a 数组保持不变,而列表框 List2 输出”9,10,41,45,53,71”。Const n= 6Dim a(1To n) As IntegerPrivate Sub Command1_Click()Dim b(1To n) As IntegerDim t As Integer, i As Integer, j As IntegerFor i =1 To nb(i) = iNext iFor i =1 To____①____ For j = ____②____ To nIf____③____ Then t = b(i): b(i) = b(j): b(j) = tEnd If Next jNext iFor i =1 To nList2.AddItem a(b(i))Next iEnd 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))答案 B21.下列 VB 程序段的功能实现了对数组元素 a(1)到 a(n)从小到大的排序。For i = 2 To n - 1k = a(i): j=____①____ Do While k < a(j)___②____j = j - 1If j = 0 Then Exit DoLoop___③____Next i上述程序段 3 个划线处的表达式分别为( )A.①i ②a(j - 1) = a(j) ③a(j + 1) = kB.①i ②a(j + 1) = a(j) ③a(j) = kC.①i-1 ②a(j - 1) = a(j) ③a(j) = kD.①i-1 ②a(j + 1) = a(j) ③a(j + 1) = k解析 这是插入排序的算法思想。答案 D22.有n个整数存储在a数组,将其中的奇数转存到b数组中,并将b数组从小到大排序。部分程序如下:t = 0For i = 1 To n If a(i) Mod 2 = 1 Thent = t + 1 End IfNext iFor i = 1 To t - 1For 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 jNext i方框中应填写的正确语句是( )A.b(i) = a(i) B.b(i) = tC.b(t) = a(i) D.b(t) = a(t)解析 t表示奇数的个数。答案 C23.下列VB程序功能为:根据文本框Text1中各字符的大小关系,计算各字符升序排列的序号,并将序号保存在数组y中。如文本框内容为“2011”,程序运行后y(1)~ y(4)各元素的值分别为“4,1,2,3”。s = Text1.Textn = Len(s)For i = 1 To n y(i) = 1Next iFor i = 1 To For j = To nIf Then y(j) = y(j) + 1Else y(i) = y(i) + 1End If Next jNext 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。答案 C24.从数组元素 a(1)开始,按词典顺序存储若干英语单词(单词均小写,升序)。初始时,数组元素 b(0)值为 0,b(1)~b(26)分别存储首字母为 a、b、c、……、z 的单词个数。依据对分查找思想:设计一个在数组 a 中查找某个单词位置的程序。实现该功能的 VB 程序段如下:key = Text1.Text ′输入查找单词For i = 1 To 26b(i) = b(i) + b(i-1)Next i ____(1)____i = b(k-1)+1j = b(k)Do While i <= jm = (i + j) \2 If key = a(m) Then Exit Do ′Exit Do 表示退出循环 If key < a(m) Then j = m – 1 Else i = m + 1LoopIf ____(2)______Then s = ”没有找到!” Else s = ”位置:” + Str(m)Text2.Text = s上述程序段 2 个方框处的代码分别为( )A.(1)k = Asc(Mid(key,1,1))- Asc(“a”) + 1(2)i <= jB.(1)k = Asc(Mid(key,1,1))- Asc(“a”)(2)i <= jC.(1)k = Asc(Mid(key,1,1))- Asc(“a”) + 1(2)i> jD.(1)k = Asc(Mid(key,1,1))- Asc(“a”)(2)i> j解析 k表示查找单词第1个字母在字母表中位置,因此是减去a的内码还要加1.没有找到的条件是i>j。答案 C25.数组a为一组正整数,奇数在前,偶数在后。奇数与偶数已分别按升序排序。依据对分查找思想:设计一个在数组a中查找数据Key的程序。实现该功能的VB程序段如下:i = 1: j = 10Key = Val(Text1.Text)Do While i <= jm = (i + j) \2If 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 IfLoopIf 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位置指向的是奇数,应在右半段中查找,否则他们同时为奇或同时为偶。答案 C26.循环升序数组指的是将一个升序数组循环右移动若干距离之后变成的数组。如[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 <= jm = (i + j) \2If a(m) = Key Then Exit DoIf a(i) < a(m) ThenIf______①______Then j = m - 1 Else i = m + 1ElseIf Key > a(m) And Key <= a(j) Then i = m + 1 Else j = m - 1End IfLoopIf 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)成立,表示处于前半段升序的过程。答案 A27.VB程序段如下:n = Val(Text1.Text)k = 0left = 1right = nDo While left <= rightk = k + 1m = (left + right) \2If m - left < right - m Thenleft = m + 1Elseright = m - 1End IfLoop在文本框Text1中输入16,执行该程序段,下列说法错误的是( )A.程序运行后k的值是4 B.程序运行后m的值是16C.程序运行后right的值是15D.程序运行后left的值是16答案 B28.一组“非降序”的数据分别存储在数组元素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 Thenj=m-1 ElseIf a(m) < key Theni=m+1 ElseIfThen j = m - 1Else Label2.Caption = Str(key) + ”的起始位置是” + Str(m) Exit DoEnd If End IfLoopIf i > j Then Label2.Caption = ”找不到” + Str(key)End If要使程序实现上述算法思想,则方框①中的语句是( )A.a(m - 1) = keyB.a(m) = keyC.m - 1 > 0 And a(m - 1) = keyD.m - 1 > 0 And a(m) = key解析 当m不是第1个位置,且他前面的数与查找的数相等时,再往前找。答案 C29.某班要开展一个班会主题活动,需要将全班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( )RandomizeFor i = 1 To 39 ____①____ y = a(i): a(i) = a(x): a(x) = yNext iFor 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)+iB.x=Int(Rnd*40-i)+i+1C.x=Int(Rnd*(40-i))+i+1D.x=Int(Rnd*(i+1))+40-i解析 要产生一个[i+1,40]之间的随机整数x。该范围可以转换为[0,40-i)+ i+1。答案 C30.小李编写了一个 VB 程序,读取某数据库中的数据,数据表打开后界面及部分VB代码如下:Dim conn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim a(1 to 1000) As String,Strconn As Stringstrconn=”provider=Microsoft.ACE.OLEDB.12.0;datasource=”+App.Path+”[SX)]core.accdb”conn.ConnectionString =strconnConn.OpenSet rs.ActiveConnection = connrs.Open ”Select * from stuinfo”n=0Do While Not rs.EOFn=n+1a(n)=rs.fields(1)rs.MoveNextLooprs.Closeconn.Colse下列对于以上代码的理解正确的有( )①连接的数据库文件名是“score.accdb”②“ConnectionString”是 conn 对象的属性值③查询的数据表名称是“stuinfo”④程序运行后,a(1)=“101”⑤程序运行后,读取的记录总数共n条A.①②③ B.①③④ C.①③⑤ D.②④⑤解析 本题考查数据库连接。“ConnectionString”是 conn 对象的属性名,②错;程序运行后,a(1)=“张三”,④错。答案 C31.小王设计了一个数据库,用于存储程序中的数据,部分编辑界面如图所示:编写了一个VB程序,用于读取该数据表中stname、score字段中值,分别存储到xm、df数组中,部分代码如下:Dim conn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim xm(1000) As String,df(1000) As Integerconn.ConnectionString = ”Provider = Microsoft.ACE.OLEDB.12.0;DATA Source=” & App.Path & ”\ ① ”Set rs.ActiveConnection = connrs.Open ”select * from ____②____”n=0Do While Not rs.EOFn=n+1xm(n)=rs.Fields(”stname”)df(n)=____③____rs.MoveNextLoop要使程序实现上述算法思想,则划线处①②③语句分别是( )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。答案 C32.有1个升序排列的数组 a(a(1)~a(n),n≥3),从左到右相邻两个元素的差值(后一个元素值减去前一个元素值)先由小到大、再由大到小,且相邻两个差值不相等,为了查找相邻两个元素的最大差值,小李编写的 VB 程序段如下:i = 1 :j = nDo While i + 1 < j m = (i + j) \'2 If a(m+1)-a(m)>a(m)-a(m-1) Then____①____ Else____②____ End ifLoopLabel1.Caption=”相邻两个元素的最大差值是”+Str(a(j)-a(i))上述程序段两个划线处的语句分别为( )A.①i=m ②j=mB.①i=m ②j=m-1C.①i=m+1 ②j=m-1D.①i=m+1 ②j=m解析 本题考查对分查找的变形应用。从左到右相邻两个元素的差值先由小到大、再由大到小,呈现的是波峰状态,分析数组规律得知左边差值大,最大差值肯定在左边;右边差值大,最大差值肯定在右边;因为是两个元素差值代表一组,无论是右边a(m+1)-a(m)大,还是左边a(m)-a(m-1)大,下一轮查找都必须包含a(m),也就是i=m或j=m。答案 A33.小赵对选择排序算法进行了如下改进:在数组的所有元素中找出最大和次大数据的元素,然后将这两个元素分别与第1个和第2个元素交换数据,在余下的元素中找出最大和次大数据的元素,分别与第3个和倒数第4个元素交换数据,以此类推,直到所有元素的数据按升序排列。小赵编写的VB程序段如下:For i = 1 To 8 Step 2If a(i) > a(i + 1) ThenMax = i: Maxa = i + 1ElseMax = i + 1: Maxa = iEnd IfFor j = i + 2 To 8If a(j) >= a(Max) Then ____(1)____ ____(2)____Else ____(3)____End IfNext jt = a(Max): a(Max) = a(i): a(i) = tIf Maxa = i Then Maxa = Maxt = a(Maxa): a(Maxa) = a(i + 1): a(i + 1) = tNext 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 展开更多...... 收起↑ 资源预览