資源簡介 專題二 選擇合適語句完善程序功能1.“不重復數(shù)”的特征是任何相鄰兩個數(shù)位上的數(shù)字都不相同。如 1101 是重復數(shù),1201是不重復數(shù)。判斷某數(shù)是不重復數(shù)的 VB 程序段如下:s = Text1.Text ____(1)____i = 1: flag = TrueDo While i <= n - 1 And flagIf ____(2)____ Then flag = Falsei = i + 1LoopIf____(3)____ ThenLabel1.Caption = ”重復數(shù)”ElseLabel1.Caption = ”不重復數(shù)”End If上述程序中方框處可選語句為:① flag=False ②n=Len(s) ③Mid(s, i, 1) = Mid(s, i + 1, 1)則(1)(2)(3)處語句依次是( )A.②③① B.①③② C.②①③ D.③②①解析 flag表示是否重復的標志,每趟從后往前進行查找,進行相鄰兩個數(shù)據(jù)的比較,不相等進行連接。答案 C2.在文本框Text1內(nèi)輸入字符串,單擊去重按鈕Command1,將字符串后面相同的字符刪除,并在文本框Text2中輸出經(jīng)過刪除的字符串。請在下面劃線處填入合適的代碼。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.一個正整數(shù)從高位到低位上的數(shù)字依次遞增,則稱其為升序數(shù)(如1369、2779是升序數(shù),而2547不是升序數(shù)),編寫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退出循環(huán)。 答案 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中輸入一串包含大小寫的字母,統(tǒng)計出現(xiàn)次數(shù)最多的字母(不區(qū)分大小寫)并將該字母以大寫方式輸出到文本框Text2,如有多個字母次數(shù)相同的,則只記錄最后出現(xiàn)的字母,部分程序如下。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)表示該字母的個數(shù),f表示最多字母在字母表中距離a的位置。答案 D6.用VB編寫統(tǒng)計某字母開頭的單詞個數(shù)的程序,句子以“.”結束,單詞之間用空格分隔,單詞沒有縮寫或其他特殊形式。部分程序代碼如下所示:s = Text1.Text ′輸入的英語短文 t = Text2.Text ′要統(tǒng)計的開頭字母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+”為開頭的單詞個數(shù):”+Str(n)End Sub為實現(xiàn)上述程序,劃線處應填入的代碼是( )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相同,則個數(shù)增加一個。同時把標志改為False.答案 A7.編寫VB程序,實現(xiàn)如下功能,在文本框Text1中輸入一個大于1000的正整數(shù),單擊按鈕Command1后,刪除其中的3個數(shù)字,且保證余下的數(shù)字在不改變順序的情況其數(shù)值最大,然后在文本框Text2中輸出該數(shù)。代碼如下所示: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.下面程序的功能是:產(chǎn)生30個[1,100]范圍內(nèi)的隨機整數(shù),并統(tǒng)計這30個隨機數(shù)中的整數(shù)的個數(shù)(重復出現(xiàn)算1個),結果顯示在標簽Label1中。例如:5個隨機數(shù)[1,2,3,3,2]中不重復數(shù)字個數(shù)為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 = ”不重復數(shù)字個數(shù)” + Str(count)為實現(xiàn)上述功能,則程序劃線處應填入的語句為( )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數(shù)組下標對應a數(shù)組元素值,計算a數(shù)組元素值的個數(shù)。答案 D10.以下代碼實現(xiàn)功能為:隨機產(chǎn)生100個[1,99]之間的整數(shù),統(tǒng)計產(chǎn)生最多的整數(shù)及個數(shù)。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 = ”數(shù)字” + Str(k) + ”出現(xiàn)了” + 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]之間的整數(shù)可以表達為[0,99)+1,在計數(shù)語句中,下標對應的數(shù)組元素值表示該下標的個數(shù)。答案 A11.某VB程序功能如下:輸入正整數(shù)n,單擊命令按鈕Command1后,則會生成一串有規(guī)律的數(shù)字序列,形式為“n n-1 n-2 … 3 2 1 2 3 … n-2 n-1 n”。例如n=8時,生成的數(shù)字序列如圖所示。代碼如下: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為實現(xiàn)以上功能,劃線①②處應分別填寫( )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成立,表示在前半段的降序數(shù)列,降序的第1個數(shù)是1的對稱數(shù),否則是后面半段的升序數(shù)列。后面半段是第i項減去n+1。答案 A12.小莊編寫了一個統(tǒng)計數(shù)組元素a(l)到a(n)中的“升序段”個數(shù)s(如圖所示的數(shù)據(jù)序列,其 “升序段”的個數(shù)等于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表示升序段中數(shù)的個數(shù)。答案 D13.數(shù)組a中的n個元素經(jīng)排序生成左右交替上升數(shù)據(jù)序列的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 程序段的功能實現(xiàn)了對數(shù)組元素 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前面一個數(shù)開始查找。如果比k大,將該位置上數(shù)往后移動。答案 D15.下列VB程序段功能為:根據(jù)數(shù)組a中各元素的大小關系,計算各元素升序排列的序號,并將序號保存在數(shù)組b中,如數(shù)組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數(shù)組存儲的是a數(shù)組元素的位次,把b數(shù)組初值賦值為1-n,利用選擇排序的思想,把b數(shù)組元素作為a的下標。答案 D16.編寫VB程序?qū)崿F(xiàn)以下功能:對數(shù)組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要實現(xiàn)上述功能,則方框①②中的語句分別是( )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解析 數(shù)組c統(tǒng)計d數(shù)組元素中的數(shù)的個數(shù),再按從大到小,輸出c(i)中的數(shù)。答案 D17.統(tǒng)計連續(xù)小寫字母最長的個數(shù),編寫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程序算法實現(xiàn)能力。本題程序逐個字符檢查是否是小寫字母,并記錄最長連續(xù)小寫字母個數(shù)。程序中,ans表示最長連續(xù)小寫字母個數(shù),c表示當前字符結尾的連續(xù)小寫字母個數(shù)。答案 D18.下列程序段用于在前面部分為升序后面部分為降序的數(shù)組a中查找最大值,返回該數(shù)值及其位置(下標)。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)處在后半段的第一個位置,且后半段的最大值大于前半段的最大值,該數(shù)就是最大值。a(m)>a(m-1) And a(m)答案 D19.下列VB程序段的功能為:對數(shù)組a中的n個元素進行排序,生成左右交替上升的數(shù)據(jù)序列。如排序前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 程序段功能為:數(shù)組 a 順序不變,輸出升序結果。例如 a 數(shù)組各元素的值分別為”53,9,71,45,10,41”,最終 a 數(shù)組保持不變,而列表框 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 程序段的功能實現(xiàn)了對數(shù)組元素 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個整數(shù)存儲在a數(shù)組,將其中的奇數(shù)轉存到b數(shù)組中,并將b數(shù)組從小到大排序。部分程序如下: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表示奇數(shù)的個數(shù)。答案 C23.下列VB程序功能為:根據(jù)文本框Text1中各字符的大小關系,計算各字符升序排列的序號,并將序號保存在數(shù)組y中。如文本框內(nèi)容為“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)解析 結合代碼內(nèi)循環(huán)IF語句分析,要計算每個字符的排列的序號(名次),每個字符需要兩兩比較一次。選項A和B的循環(huán)次數(shù)都會導致重復比較,所以排除。根據(jù)題目中給出的例子,后面(第j個元素)等于前面的元素(第i個元素),后面的元素名次號也要加1。所以答案選C。答案 C24.從數(shù)組元素 a(1)開始,按詞典順序存儲若干英語單詞(單詞均小寫,升序)。初始時,數(shù)組元素 b(0)值為 0,b(1)~b(26)分別存儲首字母為 a、b、c、……、z 的單詞個數(shù)。依據(jù)對分查找思想:設計一個在數(shù)組 a 中查找某個單詞位置的程序。實現(xiàn)該功能的 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 表示退出循環(huán) 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的內(nèi)碼還要加1.沒有找到的條件是i>j。答案 C25.數(shù)組a為一組正整數(shù),奇數(shù)在前,偶數(shù)在后。奇數(shù)與偶數(shù)已分別按升序排序。依據(jù)對分查找思想:設計一個在數(shù)組a中查找數(shù)據(jù)Key的程序。實現(xiàn)該功能的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條件成立,表示查找的數(shù)是奇數(shù),但m位置指向的是偶數(shù),應在左半段中查找,Key Mod 2 = 0 And a(m) Mod 2 = 1條件成立,表示查找的數(shù)是偶數(shù),但m位置指向的是奇數(shù),應在右半段中查找,否則他們同時為奇或同時為偶。答案 C26.循環(huán)升序數(shù)組指的是將一個升序數(shù)組循環(huán)右移動若干距離之后變成的數(shù)組。如[1,2,3,4,5]循環(huán)右移1位,就成為[5,1,2,3,4],再右移1位,就成為[4,5,1,2,3],…,其中[5,1,2,3,4]和[4,5,1,2,3]都是循環(huán)升序數(shù)組。該數(shù)組的特點是:將循環(huán)升序數(shù)組從中間分開,肯定有一邊是有序數(shù)組,另外一邊是循環(huán)有序數(shù)組。小杜研究發(fā)現(xiàn)對分查找算法適當優(yōu)化后也適用于循環(huán)升序數(shù)組。在文本框輸入被查找數(shù)據(jù)key,查找循環(huán)升序數(shù)組a中是否有相同的元素存在。編寫的VB程序段如下:i = 1: j = n ′數(shù)組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 = ”查找失敗”要使程序?qū)崿F(xiàn)對分查找過程,則方框中的語句是( )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,執(zhí)行該程序段,下列說法錯誤的是( )A.程序運行后k的值是4 B.程序運行后m的值是16C.程序運行后right的值是15D.程序運行后left的值是16答案 B28.一組“非降序”的數(shù)據(jù)分別存儲在數(shù)組元素a(1)……a(n)中,用對分查找算法在數(shù)組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要使程序?qū)崿F(xiàn)上述算法思想,則方框①中的語句是( )A.a(chǎn)(m - 1) = keyB.a(chǎn)(m) = keyC.m - 1 > 0 And a(m - 1) = keyD.m - 1 > 0 And a(m) = key解析 當m不是第1個位置,且他前面的數(shù)與查找的數(shù)相等時,再往前找。答案 C29.某班要開展一個班會主題活動,需要將全班40名同學隨機分成4個組,每組10人。為了排除人工分組的主觀因素,小華設計了一個VB程序,他的程序算法如下:將40名同學的姓名放入數(shù)組a中,第一次從a(2)~a(40)中隨機抽取一個數(shù)與a(1)交換,第二次從a(3)~a(40)中隨機抽取一個數(shù)與a(2)交換,第三次從a(4)~a(40)中隨機抽取一個數(shù)據(jù)與a(3)交換……依次類推,直到所有學生姓名隨機的出現(xiàn)在數(shù)組a中,之后再將數(shù)組里的數(shù)據(jù)分別顯示在4個ListBox中。該VB程序已經(jīng)將40名同學的姓名存放到數(shù)組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解析 要產(chǎn)生一個[i+1,40]之間的隨機整數(shù)x。該范圍可以轉換為[0,40-i)+ i+1。答案 C30.小李編寫了一個 VB 程序,讀取某數(shù)據(jù)庫中的數(shù)據(jù),數(shù)據(jù)表打開后界面及部分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下列對于以上代碼的理解正確的有( )①連接的數(shù)據(jù)庫文件名是“score.accdb”②“ConnectionString”是 conn 對象的屬性值③查詢的數(shù)據(jù)表名稱是“stuinfo”④程序運行后,a(1)=“101”⑤程序運行后,讀取的記錄總數(shù)共n條A.①②③ B.①③④ C.①③⑤ D.②④⑤解析 本題考查數(shù)據(jù)庫連接。“ConnectionString”是 conn 對象的屬性名,②錯;程序運行后,a(1)=“張三”,④錯。答案 C31.小王設計了一個數(shù)據(jù)庫,用于存儲程序中的數(shù)據(jù),部分編輯界面如圖所示:編寫了一個VB程序,用于讀取該數(shù)據(jù)表中stname、score字段中值,分別存儲到xm、df數(shù)組中,部分代碼如下: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要使程序?qū)崿F(xiàn)上述算法思想,則劃線處①②③語句分別是( )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連接數(shù)據(jù)庫的基本知識。從圖中可以看出,數(shù)據(jù)庫的名稱為Mydata.accdb,數(shù)據(jù)表的名稱為student。答案 C32.有1個升序排列的數(shù)組 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解析 本題考查對分查找的變形應用。從左到右相鄰兩個元素的差值先由小到大、再由大到小,呈現(xiàn)的是波峰狀態(tài),分析數(shù)組規(guī)律得知左邊差值大,最大差值肯定在左邊;右邊差值大,最大差值肯定在右邊;因為是兩個元素差值代表一組,無論是右邊a(m+1)-a(m)大,還是左邊a(m)-a(m-1)大,下一輪查找都必須包含a(m),也就是i=m或j=m。答案 A33.小趙對選擇排序算法進行了如下改進:在數(shù)組的所有元素中找出最大和次大數(shù)據(jù)的元素,然后將這兩個元素分別與第1個和第2個元素交換數(shù)據(jù),在余下的元素中找出最大和次大數(shù)據(jù)的元素,分別與第3個和倒數(shù)第4個元素交換數(shù)據(jù),以此類推,直到所有元素的數(shù)據(jù)按升序排列。小趙編寫的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 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫