版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第二章算法的程序?qū)崿F(xiàn)[考試標準]考試內(nèi)容考試要求考試屬性1.枚舉算法及程序?qū)崿F(xiàn)c加試2.解析算法及程序?qū)崿F(xiàn)c3.排序算法及程序?qū)崿F(xiàn)(1)冒泡排序(2)選擇排序c4.查找算法及程序?qū)崿F(xiàn)(1)順序查找(2)對分查找c5.遞歸算法a6.VB訪問Access數(shù)據(jù)庫(1)通過ADO對象連接數(shù)據(jù)庫(2)通過Recordset對象獲取數(shù)據(jù)表中的數(shù)據(jù)a一、排序算法及程序?qū)崿F(xiàn)1.排序的含義及方式(1)所謂排序就是將無序的數(shù)列變成有序的數(shù)列。(2)排列方式分為升序(也稱遞增,即從小到大排列)和降序(也稱遞減,即從大到小排列)。2.冒泡排序(1)冒泡排序基本思想將n個數(shù)據(jù)看作豎向排列的一組數(shù)據(jù),每趟排序自下而上對每對相鄰數(shù)據(jù)進行比較,若次序不符合要求就進行交換,每趟排序結(jié)束時都能使排序范圍內(nèi)關(guān)鍵字最小的記錄像一個氣泡一樣升到上端的對應(yīng)位置,整個排序過程共進行n-1趟,依次將關(guān)鍵字最小、次小……的各個數(shù)據(jù)冒到表的第一個、第二個……位置上。用冒泡排序?qū)個數(shù)據(jù)進行排序時,共需進行n-1趟排序,比較的總次數(shù)為eq\f(n(n-1),2)。(2)冒泡排序程序?qū)崿F(xiàn)說明:要排序的n個數(shù)據(jù)已存放d數(shù)組中,以升序為例的程序如下:Fori=1Ton-1′n個數(shù)排序共需進行n-1趟Forj=nToi+1Step-1′每一趟從后往前,相鄰兩數(shù)兩兩比較Ifd(j)<d(j-1)Then′若滿足條件則進行互換temp=d(j)d(j)=d(j-1)d(j-1)=tempEndIfNextjNexti若要按降序排列,只需將程序中的語句“Ifd(j)<d(j-1)Then”改為“Ifd(j)>d(j-1)Then”即可。3.選擇排序(1)選擇排序的基本思想每趟排序是在所有的數(shù)據(jù)中找出最小(或最大)的數(shù)據(jù),使它與第一個數(shù)據(jù)相互交換位置,然后再在剩下的數(shù)據(jù)中找出最小(或最大)的數(shù)據(jù),與第二個數(shù)據(jù)相互交換位置,以此類推,直到所有元素成為一個有序序列。(2)選擇排序的程序?qū)崿F(xiàn)說明:要排序的n個數(shù)據(jù)已存放d數(shù)組中。以升序為例的程序如下:Fori=1Ton-1′n個排序共進行n-1趟排序k=i′第i趟排序時,首先用k記錄iForj=i+1Ton′k位置上的數(shù)依次與j位置上的數(shù)進行比較Ifd(k)>d(j)Thenk=j(luò)′若找到比k位置上更小的數(shù),則更新k的值NextjIfk<>iThen′若i位置上的數(shù)不是最小數(shù),則和k位置上的數(shù)進行互換temp=d(i)d(i)=d(k)d(k)=tempEndIfNexti若要按降序排列,只要將語句Ifd(k)>d(j)Thenk=j(luò)改成Ifd(k)<d(j-1)Thenk=j(luò)即可。二、查找算法及程序?qū)崿F(xiàn)1.查找算法所謂查找就是在指定的數(shù)據(jù)中尋找某一特定的數(shù)據(jù)。查找結(jié)果有兩種,即找到(查找成功)和未找到(查找失敗)。2.順序查找(1)順序查找的基本思想從第一個數(shù)據(jù)開始,從左往右(或從上到下)將數(shù)據(jù)按順序逐個與給定的值進行比較,若某個數(shù)據(jù)和給定值相等,則查找成功,找到并輸出所查數(shù)據(jù)的位置;反之,查找失敗。若有n個數(shù),則可能的最多查找次數(shù)為n。(2)順序查找算法基本框架設(shè)要查找的數(shù)為key,待查找的數(shù)存放在數(shù)組d中。For語句框架:Fori=1ton若d(i)=key,則表示找到,做相應(yīng)處理Nexti若i>n表示未找到DoWhile語句框架:i=1Dowhilei<=n若d(i)=key,則表示找到,做相應(yīng)處理i=i+1Loop若i>n表示未找到(3)順序查找的程序?qū)崿F(xiàn)在n個數(shù)組元素中依次查找,找到第1個滿足條件的值,查找即結(jié)束,輸出找到元素所在的位置;若找不到,輸出“未找到”。程序?qū)崿F(xiàn):設(shè)要查找的數(shù)據(jù)是key(在文本框Text1中輸入),查找的數(shù)據(jù)存放在數(shù)組d中。pos為找到數(shù)的位置,pos=0表示未找到。P表示查找的次數(shù)。key=Val(Text1.Text)′Val要根據(jù)實際情況決定是否要添加p=0pos=0find=False′find表示查找結(jié)果i=1DoWhilei<=nAndNotfind′表示還沒找完并且還未找到,則繼續(xù)查找,Notfind也可表示為find=falsep=p+1Ifkey=d(i)Thenpos=ifind=TrueEndIfi=i+1LoopIffindThen′也可表示為Iffind=truethenText2.Text=”在d(”+Str(pos)+”)中”ElseText2.Text=“未找到”EndIf3.對分查找(1)對分查找的基本思想在有序的數(shù)據(jù)序列中(一般存放在數(shù)組中),首先把要查找的數(shù)據(jù)與數(shù)組中間位置的元素進行比較,如果相等,則查找成功并退出查找;否則,根據(jù)數(shù)組元素的有序性,確定數(shù)據(jù)應(yīng)在數(shù)組的前半部分還是在后半部分查找;在確定了新的查找范圍后,重復(fù)進行以上比較,直到找到或未找到為止。①對分查找的前提是被查找的數(shù)據(jù)序列必須是有序。②“未找到”是指當指定范圍內(nèi)的起點大于終點仍未找到該數(shù)據(jù)。(2)對分查找算法基本框架說明:要查找的數(shù)為key,待查找的數(shù)存放在數(shù)組d中。i為查找范圍的起點,j為查找范圍的終點,m為范圍[i,j]的中間位置。i=1j=nDoWhilei<=j(luò)計算中點位置m比較key與d(m),并做相應(yīng)處理Loop若i>j,則表示未找到(3)對分查找程序?qū)崿F(xiàn)在n個數(shù)組元素中依次查找,找到第1個滿足條件的值,查找就結(jié)束,輸出找到元素所在的位置;若找不到,輸出“未找到”。程序?qū)崿F(xiàn):設(shè)要查找的數(shù)據(jù)是key(在文本框Text1中輸入),查找的數(shù)據(jù)存放在數(shù)組d中。在文本框Text2中輸出查找結(jié)果,若找到輸出“找到!位置為:X”,否則輸出“未找到!”在文本框Text3中輸出共查找的次數(shù)。p表示查找的次數(shù)。核心代碼為(以升序為例):key=Val(Text1.Text)′表示要查找的數(shù)p=0′表示查找的次數(shù)find=False′查找的結(jié)果,若find=true表示找到,find=false表示未找到i=1′查找的起始范圍j=n′查找的終點范圍DoWhilei<=j(luò)AndNotfind′如果還未找完并且未找到p=p+1′查找次數(shù)計數(shù)m=(i+j)\2′計算中點位置mIfkey=d(m)Then′表示找到的情況find=TrueText2.Text=”找到!位置為:”+Str(m)EndIfIfKey>d(m)Then’表示查找的數(shù)比中間位置上的數(shù)大時i=m+1Else’表示查找的數(shù)比中間位置上的數(shù)小時j=m-1EndIfLoopIfNotfindThenText2.Text=”未找到!”Text3.Text=”共查找的次數(shù)為:”+Str(p)計算中點位置的語句還可以寫成:m=Int((i+j)/2)或m=Fix((i+j)/2)。三、遞歸算法1.遞歸的概念函數(shù)或過程調(diào)用其本身,稱為遞歸。2.遞歸算法的基本思想遞歸算法的基本思想是把規(guī)模較大的、較難解決的問題變成規(guī)模較小的、容易解決的同一問題,規(guī)模較小的問題又變成規(guī)模更小的問題,直到可以直接得出它的解,從而得到原來問題的解。3.采用遞歸算法須具備的條件(1)每一步驟解決問題的方法要一致。(2)要有結(jié)束的邊界條件。四、Connection對象用Connection建立和數(shù)據(jù)庫的連接時,首先創(chuàng)建一組ADO對象用于設(shè)置打開連接和產(chǎn)生結(jié)果集,需要設(shè)置連接字符串ConnectionString的參數(shù)。下列語句定義一個Connection對象的實例conn,conn是實例的名稱,命名規(guī)則與VB變量定義相同,并設(shè)置conn的連接字符串:DimconnAsNewADODB.ConnectionDimabcAsNewADODB.Recordsetconn.ConnectionString=”Provider=;DataSource=”&App.Path&”\souse1.accdb”其中,“Provider”用于指定連接的提供者,“DataSource”用于指定數(shù)據(jù)庫的文件名(含絕對路徑)。App.Path返回當前應(yīng)用程序所在的絕對路徑。Connection對象具有Open、Execute、Close等方法,其中Open方法用于建立到數(shù)據(jù)源的連接,Execute用于執(zhí)行指定的查詢、SQL語句或特定提供者的文本等內(nèi)容,而Close方法則用于關(guān)閉連接。五、Recordset對象用Recordset對象從數(shù)據(jù)庫中查詢記錄時,要設(shè)置ActiveConnection屬性的值。語句Setabc.ActiveConnection=conn,使Recordset對象的實例abc與Connection對象的實例conn建立關(guān)聯(lián)。在abc與conn建立關(guān)聯(lián)后,可用Recordset對象的Open方法打開、查詢數(shù)據(jù)表的記錄。Open方法的參數(shù)為SQL命令。如:abc.Open“SELECT*FROMinfo”運行后,記錄集abc中的數(shù)據(jù)為SQL語句“SELECT*FROMinfo”查詢到的記錄。同樣,Recordset對象的Close方法用于關(guān)閉對象。Abc.close表示關(guān)閉記錄集。Recordset對象的Fields集合用于返回當前記錄中的數(shù)據(jù),如:abc.Fields(”book”)返回當前記錄中”book”字段的值;abc.Fields(0)返回當前記錄中第一個字段的值,如果第一個字段名為“book”,則abc.Fields(0)與abc.Fields(“book”)返回值相同。例如Recordset對象實例abc打開了下表的記錄集:Recordset對象打開的記錄集:bookauthorpricePublishing平凡的世界路遙78.2海南人民出版社紅樓夢曹雪芹53.6上海教育出版社假設(shè)當前記錄為第2條記錄,則Fields集合返回當前記錄某個字段的數(shù)據(jù)有以下兩種方法:(1)abc.Fields(字段序號),其中字段序號從0開始編號。(2)abc.Fields(“字段名稱”)故abc.Fields(0)和abc.Fields(“book”)都返回“紅樓夢”,abc.Fields(1)和abc.Fields(“author”)都返回“曹雪芹”,abc.Fields(2)和abc.Fields(“price”)都返回“53.6”,abc.Fields(3)和abc.Fields(“Publishing”)都返回“上海教育出版社”。通過Recordset對象從數(shù)據(jù)庫中返回的這些數(shù)據(jù)可以通過數(shù)組的形式存儲,以方便我們后序進行統(tǒng)計、排序、查找等處理。Recordset對象的AddNew方法為可更新的Recordset對象創(chuàng)建一個新記錄,它添加一條新的空記錄,并且定位在該記錄上;Delete方法可將當前記錄從記錄集中刪除;Edit方法可以編輯修改數(shù)據(jù)庫的記錄,注意首先要將需要編輯的記錄成為當前記錄,然后使用Edit方法修改記錄內(nèi)容,使用Edit方法后,再移動記錄或者使用Update方法把數(shù)據(jù)存入到數(shù)據(jù)庫中;Move方法可以使不同的記錄成為當前記錄,主要有5種使用方法:MoveFirst:移動到記錄集的第一條記錄。MoveLast:移動到記錄集的最后一條記錄。MoveNext:移動到記錄集的下一條記錄。MovePrevious:移動到記錄集的上一條記錄。Move:可以使用Move方法向前或向后移動若干條記錄。但應(yīng)注意:若到數(shù)據(jù)表結(jié)尾處還繼續(xù)向下移動,程序會出錯,因此在使用MoveNext時要判斷Recordset的BOF和EOF屬性,判斷記錄指針是不是到達首記錄之前或尾記錄之后。EOF取值為“True”時表示已經(jīng)到達記錄集的結(jié)尾,否則EOF的值為“False”。若BOF和EOF的取值均為“True”則表示此記錄集為空。六、SQL:Select語句SELECT語句是結(jié)構(gòu)化查詢語言SQL中常見的語句,主要用于從數(shù)據(jù)表中查詢數(shù)據(jù),如語句“SELECT*FROMinfo”表示查詢數(shù)據(jù)表“info”的全部數(shù)據(jù)。語句總結(jié)如下:(1)定義Connection對象的實例conn和Recordset對象的實例abc。DimconnAsNewADODB.ConnectionDimabcAsNewADODB.Recordset(2)為實例conn設(shè)置ConnectionString屬性值。conn.ConnectionString=”Provider=;DATASource=”&App.Path&”\souse1.accdb”(3)打開與數(shù)據(jù)庫的連接。conn.Open(4)建立實例abc與conn之間的關(guān)聯(lián)。Setabc.ActiveConnection=conn(5)執(zhí)行SELECT命令,將查詢結(jié)果返回給abc。abc.Open”SELECT*FROMinfo”(6)在應(yīng)用程序中引用abc中當前記錄的字段值。Label1.Caption=abc.Fields(”book”)Label2.Caption=abc.Fields(”price”)(7)關(guān)閉記錄集。Abc.close(8)關(guān)閉與數(shù)據(jù)庫的連接。conn.Close【例1】(2016·10月浙江選考)小吳為了探究冒泡排序過程中數(shù)據(jù)的“移動”情況,編寫了一個VB程序,功能如下:在列表框List1中顯示排序前數(shù)據(jù)(存儲在數(shù)組a中),在文本框Text1中輸入初始位置(即下標值),單擊“排序”按鈕Command1后,在標簽Label1中顯示指定初始位置的數(shù)據(jù)在排序過程中的位置變化情況,排序后的數(shù)據(jù)顯示在列表框List2中。程序運行界面如圖所示。實現(xiàn)上述功能的VB程序如下,但加框處代碼有錯,請改正。Dima(1To8)AsIntegerDimnAsIntegerPrivateSubForm?Load()′n=8,排序前的8個數(shù)據(jù)存儲在數(shù)組a中,并在列表框List1中顯示′代碼略EndSubPrivateSubCommand1-Click()DimiAsInteger,jAsInteger,kAsIntegerDimposAsInteger′變量pos存儲指定數(shù)據(jù)的位置(即下標值)DimsAsString′變量s存儲pos變化情況s=Text1.Textpos=Val(Text1.text)Fori=1Ton-1Forj=nToi+1Step-1Ifa(j)<a(j-1)Theneq\x(k=a(j))’(1)a(j-1)=a(j)a(j)=k′如果pos位置的數(shù)據(jù)參與交換,則更新pos值,記錄pos變化情況Ifpos=j(luò)Thenpos=j(luò)-1s=s+”→”+Str(pos)eq\x(Else)′(2)pos=j(luò)s=s+”→”+Str(pos)EndIfEndIfNextjNextiLabel1.Caption=”位置變化情況:”+sFori=1TonList2.AddltemStr(a(i))NextiEndSub解析仔細閱讀題干說明和程序及程序注釋,先從整體判斷各程序段功能及各變量的作用,再具體分析出錯位置的程序行進行改錯。(1)此位置程序段為冒泡排序相鄰兩個數(shù)據(jù)進行比較后,逆序的兩數(shù)交換數(shù)據(jù),即交換兩個變量的值,分析后面兩程序行,判斷(1)方框處應(yīng)該是“k=a(j-1)”。(2)閱讀程序注釋,(2)框處所在分支語句功能為“如果pos位置的數(shù)據(jù)參與交換,則更新pos值,記錄pos變化情況”,這個是在外層的判斷語句的基礎(chǔ)之上進行的,即兩個相鄰數(shù)a(j)<a(j-1)成立,兩個數(shù)進行了交換,然后對pos位置進行更新。Pos位置有兩種情況:一個可能是在a(j)位置,另一個可能是在a(j-1)位置,既然兩個數(shù)進行了交換,不管兩種情況中的哪一種情況,兩個位置都要進行交換。程序中ifpos=j(luò)thenpos=j(luò)-1只是判斷處理了一種情況,另一種情況pos在a(j-1)位置(pos=j(luò)-1)還要判斷處理。所以(2)框處程序應(yīng)該修改為“ElseIfpos=j(luò)-1Then”。答案(1)k=a(j-1)(2)ElseIfpos=j(luò)-1Then[變式1]對10個數(shù)據(jù)進行冒泡排序,需要比較的次數(shù)是()A.90B.110C.45D.55解析本題要求對規(guī)模為10個的數(shù)據(jù)進行冒泡排序的比較次數(shù)。根據(jù)冒泡排序算法比較次數(shù)的計算方法可知,當n=10時,比較次數(shù)=10×(10-1)/2=45,所以選擇答案C。答案C[變式2]對數(shù)組元素a(1)到a(6)進行降序排序,采用選擇排序算法的某VB程序段如下:Form=1To5p=mForn=m+1To8Ifa(n)>a(p)Thenp=nNextnIfp<>mThen________Nextm當?shù)谝槐榕判蛑蟮玫降臄?shù)據(jù)序列為12,2,6,8,9,11。畫線處中的語句是()A.t=p:p=m:m=tB.a(p)=a(m):a(p)=a(m)C.p=m:m=pD.t=a(p):a(p)=a(m):a(m)=t解析選擇排序算法中,內(nèi)層循環(huán)的部分用于找出m到5的數(shù)列中,最大的數(shù),當發(fā)現(xiàn)之后,存儲的是該數(shù)據(jù)的下標。當內(nèi)存循環(huán)結(jié)束之后,發(fā)現(xiàn)在第m個位置上存放的不是最大數(shù)時,需要將兩個數(shù)進行交換,而不是將下標進行互換。且交換的程序編寫需要有第三個暫存變量來輔助存儲。答案D[變式3]籃球聯(lián)賽中,有5個班級的比賽積分依次為14,11,13,8,9。若采用冒泡排序算法對其進行從小到大排序,則完成第二遍時的結(jié)果是()A.8,11,13,14,9 B.8,9,13,14,11C.8,9,14,11,13 D.14,13,11,9,8解析從小到大冒泡排序的基本思想是從最后的一個元素起,自后向前比較相鄰的兩個數(shù)據(jù),將較小的數(shù)據(jù)換到前面,較大的換到后面。重復(fù)這一過程,直到處理完最后兩個數(shù)據(jù),稱為一遍加工。因此第一遍加工時,9和8,9不動;8和13,13換到后面,8換到前面;8和11,11換到后面,8換到前面;8和14,14換到后面,8換到前面。這是第一遍加工,結(jié)果是:8,14,11,13,9。第二遍加工時,9和13,13換到后面,9換到前面;9和11,1l換到后面,9換到前面;9和14,14換到后面,9換到前面。這是第二遍加工,結(jié)果是:8,9,14,11,13。答案C【例2】(2015·9月浙江選考模擬)采用如下選擇排序算法對數(shù)組a中5個數(shù)據(jù)“23,86,98,65,2”按從小到大的順序進行排序。Fori=1To4k=iForj=i+1To5Ifa(j)<a(k)Thenk=j(luò)NextjIfk<>iThent=a(i):a(i)=a(k):a(k)=tEndIfNexti整個排序過程中,數(shù)組中的數(shù)據(jù)比較次數(shù)和交換次數(shù)分別是()A.10次和3次B.10次和4次C.15次和3次D.15次和10次解析本題考查對VB冒泡排序算法的實現(xiàn)過程。第一遍排序時,比較4次,交換1次,數(shù)據(jù)變?yōu)椤?,86,98,65,23”;第二遍排序時,比較3次,交換1次,數(shù)據(jù)變?yōu)椤?,23,98,65,86”;第三遍排序時,比較2次,交換1次,數(shù)據(jù)變?yōu)椤?,23,65,98,86”;第四遍排序時,比較1次,交換1次,數(shù)據(jù)變?yōu)椤?,23,65,86,98”;合計數(shù)據(jù)比較10次,交換4次,選項B正確。答案B【例3】有如下VisualBasic程序段:m=a(1)i=2DoWhilei<=10Ifm<a(i)Thenm=a(i)i=i+1Loop該程序段執(zhí)行后,變量m中存儲的是()A.a(1)至a(10)中的最大值B.a(1)至a(10)中的最小值C.a(2)至a(10)中的最大值D.a(2)至a(10)中的最小值解析本題主要考查選擇排序的核心代碼:尋找最小值或最大值。m=a(1)i=2DoWhilei<=10Ifm<a(i)Thenm=a(i)i=i+1Loop?m=a(1)Fori=2to10Ifa(i)>mthenm=a(i)nexti先假設(shè)數(shù)組的第一項是最大的,并賦值給變量m,然后把從第二項開始的所有數(shù)組元素跟變量m進行比較,如果比m大,則把該元素賦值給m。這樣循環(huán)結(jié)束后,變量m中存儲的就是該數(shù)據(jù)中的最大值。答案A【例4】(2015·9月浙江高考模擬)采用如下選擇排序算法對數(shù)組a中5個數(shù)據(jù)“23,86,98,65,2”按從小到大的順序進行排序。Fori=1To4k=iForj=i+1To5Ifa(j)<a(k)Thenk=j(luò)NextjIfk<>iThent=a(i):a(i)=a(k):a(k)=tEndIfNexti整個排序過程中,數(shù)組中的數(shù)據(jù)比較次數(shù)和交換次數(shù)分別是()A.10次和3次 B.10次和4次C.15次和3次 D.15次和10次解析n個數(shù)進行選擇排序需進行n-1遍,每遍比較次數(shù)依次為:n-1,n-2,……,2,1;選擇排序的比較次數(shù)與待排序的初始狀態(tài)無關(guān),而交換次數(shù)與待排序的初始狀態(tài)有關(guān),需具體問題具體分析。本題數(shù)據(jù)比較次數(shù)為4+3+2+1=10次,模擬選擇排序的過程,數(shù)據(jù)交換次數(shù)為4次。原始數(shù)據(jù)23,86,98,65,2數(shù)據(jù)交換第1遍2,86,98,65,232和23交換第2遍2,23,98,65,8623和86交換第3遍2,23,65,98,8665和98交換第4遍2,23,65,86,9886和98交換答案B【例5】實現(xiàn)某排序算法的部分VB程序如下:Fori=1To6k=iForj=i+1To7Ifa(j)<a(k)Thenk=j(luò)NextjIfi<>kThent=a(i):a(i)=a(k):a(k)=tEndIfNexti在排序過程中,經(jīng)過某一遍排序“加工”后,數(shù)組元素a(1)到a(7)的數(shù)據(jù)依次為“10,41,75,12,63,11,85”。下一遍排序“加工”后數(shù)組元素a(1)到a(7)的數(shù)據(jù)依次是()A.10,11,41,75,12,63,85B.10,11,75,12,63,41,85C.10,11,12,75,63,41,85D.10,11,12,41,63,75,85解析(1)根據(jù)算法的代碼特征確定是選擇排序。(2)由a(j)<a(k)確定排序的目標是升序。(3)觀察某遍排序“加工”后的數(shù)列發(fā)現(xiàn)只有第一個元素已經(jīng)處于有序狀態(tài),因此下一遍排序后的目標是將第二個小的數(shù)11選出來和第二個位置的數(shù)41進行交換,從而獲得所求答案。答案B[變式4]下列VB程序段是選擇排序程序的主要部分。其中虛線框內(nèi)代碼用于尋找數(shù)據(jù)元素d(i)到d(n)的最小值。……Fori=1Ton-1k=iForj=i+1TonIfd(j)<d(k)Thenk=j(luò)NextjIfi<>kThenkt=d(i):d(i)=d(k):d(k)=ktNexti……框內(nèi)代碼運行結(jié)束時,保存最小值的數(shù)組元素一定是()A.d(n)B.d(j)C.d(i)D.d(k)解析變量k記錄當前找到的最小值的位置,即數(shù)組元素的下標,則d(k)就是當前找到的最小的數(shù)組元素。它的思想方法是先假設(shè)數(shù)組的第i項是最小的(第i遍排序),因此k記為i,然后把從第i+1項開始的所有數(shù)組元素跟d(k)進行比較,如果比d(k)小,則用k記錄該元素的下標。這樣循環(huán)結(jié)束后,變量k中存儲的就是數(shù)組中從第i項至第n項的最小元素的下標,d(k)就是第i項至第n項中的最小元素。答案D[變式5]對數(shù)組元素a(1)到a(8)進行升序排序,其排序算法的VB部分程序段如下:Form=1To7p=mForn=m+1To8eq\x()NextnIfp<>mThent=a(p):a(p)=a(m):a(m)=tNextm方框中的語句是()A.Ifa(n)<a(p)Thenp=mB.Ifa(n)<a(p)Thenp=nC.Ifa(n)>a(p)Thenp=nD.Ifa(n)>a(p)Thenp=m解析(1)這樣的題首先要觀察已有的程序代碼確定算法類型,比如“p=mForn=m+1To8”可以確定該排序算法為選擇排序。(2)再確認排序的升降特性,確定判斷的條件,最后看清楚變量的名稱。由于是升序排序,則判斷的條件是a(n)<a(p)的時候更新p指針,指向當前第m小的數(shù),也就是n所在的位置。答案B【例6】(2016·9月紹興模擬)下列關(guān)于各種算法的特點描述,正確的是()A.能用對分查找完成的查找任務(wù),順序查找也一定能完成B.能用順序查找完成的查找任務(wù),對分查找也一定能完成C.對同一批數(shù)據(jù)進行升序排序,冒泡排序時數(shù)據(jù)元素間比較的總次數(shù)比選擇排序多D.對同一批數(shù)據(jù)進行降序排序,冒泡排序時數(shù)據(jù)元素交換位置的總次數(shù)比選擇排序少解析對分查找要求數(shù)列要先有序,選擇查找對數(shù)列沒有要求,所以A正確、B錯。對同一批n個數(shù)據(jù),冒泡排序和選擇排序都進行n-1次比較,冒泡排序相鄰兩數(shù)依次進行比較,逆序馬上交換,交換數(shù)據(jù)在內(nèi)層循環(huán)中;選擇排序是每個數(shù)和較大(較小)的數(shù)比較,較大(較小)的數(shù)放到一個變量中,比較完一遍才進行交換,交換一般在外層循環(huán)中,選擇排序交換的次數(shù)一般比冒泡排序少。所以C、D錯。答案A【例7】(2016·4月浙江高考)有如下程序段:Fori=1To2Forj=5Toi+1Step-1Ifa(j)>a(i)Thent=a(j):a(j)=a(i):a(i)=tEndIfNextjNexti數(shù)組元素a(1)到a(5)的值依次為“33,24,45,16,77”,經(jīng)過該程序段“加工”后,數(shù)組元素a(1)到a(5)的值依次為()A.77,45,33,16,24 B.77,33,45,16,24C.77,24,45,16,33 D.77,45,33,24,16解析分析本題程序段,外層循環(huán)到2,說明只進行了兩遍排序。第1遍排序a(5)到a(2)依次與a(1)比較,較大數(shù)與a(1)交換,結(jié)果為:77,24,45,16,33;第2遍排序a(5)到a(3)依次與a(2)比較,較大數(shù)與a(2)交換,結(jié)果為:77,45,33,16,24。根據(jù)程序的代碼特征,沒有中間變量存放較大數(shù),數(shù)據(jù)的交換在內(nèi)層循環(huán)中,形式上很像冒泡排序,但仔細分析,排序時關(guān)鍵的數(shù)據(jù)比較是“a(j)>a(i)”,不是相鄰兩個數(shù)依次比較,第i遍排序時后面的數(shù)都依次和a(i)比較,通過交換使a(i)最大。所以本程序段算法不是簡單冒泡排序,也不是簡單選擇排序,類似選擇排序的變形。答案A[變式6]使用對分查找在已排序的數(shù)組d(數(shù)組元素d(1)≤d(2)≤…≤d(n))中查找key的算法流程圖如圖所示。其中①②框中的內(nèi)容分別是()A.①j=m+1②i=m+1B.①j=m-1②i=m-1C.①j=m-1②i=m+1D.①j=m+1②i=m-1解析因為數(shù)據(jù)是升序排列的,因此,當key<d(m)時,要查找的數(shù)據(jù)應(yīng)在m的左邊,即查找的范圍的終點j修改為j=m-1,當key>d(m)時,要查找的數(shù)據(jù)應(yīng)在m的右邊,即查找的范圍的起點j修改為i=m+1。答案C[變式7]有兩組數(shù)據(jù):①54,31,43,12,8,73,56,34,89,60,23,67②87,83,75,70,63,59,55,37,33,21,17,7下列有關(guān)查找方法的描述,不正確的是()A.①可以直接使用順序查找B.②可以直接使用對分查找C.①可以直接使用對分查找D.②可以直接使用順序查找解析觀察數(shù)列①為無序,顯然不符合對分查找的有序前提。②為降序,可以用對分查找,同時也適用于順序查找。注意此題問的是不正確的選項。答案C【例8】(2016·8月溫州模擬)采用如下對分查找算法對數(shù)組a中7個有序數(shù)據(jù)“15,38,51,66,77,81,99”進行查找,查找數(shù)據(jù)為“55”,i=1∶j=7∶x=55DoWhilei<=j(luò)m=(i+j)/2Ifa(m)=xThenExitDoIfa(m)>xThenj=m-1Elsei=m+1Loop經(jīng)過上述代碼查找后,下列表述正確的是()A.i=m+1 B.i=m-1C.j>m+1 D.j<m-1解析本題為對分查找算法程序,分析程序運行過程中的變量變化情況:變量i變量j變量m數(shù)據(jù)a(m)第1次查找17466第2次查找3238第3次查找3351退出循環(huán)4經(jīng)過3次查找,i=4,j=3,i>j,退出循環(huán),根據(jù)此時變量值判斷A正確。答案A[變式8]某學(xué)校圖書管理系統(tǒng)中有10萬條圖書資料記錄(已經(jīng)索引排序),假設(shè)從中取出一條記錄并與待查找項進行比較所花時間為10毫秒,則用對分法在該系統(tǒng)中查找任意一本指定圖書最多花費的時間約為()A.100萬毫秒 B.50萬毫秒C.10毫秒 D.170毫秒解析對分查找的查找效率較高,無論是否找到,最多進行l(wèi)ogeq\o\al(n+1,2)次查找,表示小于等于logeq\o\al(n+1,2)的最大整數(shù)。n=100000,比較次數(shù)為17次,因此最多花費的時間是170毫秒。答案D[變式9]小王設(shè)計了一個算法來求xn(x的n次方)的值,他的算法思想是:把xn轉(zhuǎn)換為x*xn-1,而xn-1又可以轉(zhuǎn)換為x*xn-2,如此繼續(xù),直到x*x0,而x0=1,從而求出了xn的值。小王采用的算法是()A.解析算法 B.枚舉算法C.遞歸算法 D.查找算法解析本題中求“xn”的值,采用“大事化小,小事化了”的方法,符合遞歸算法的基本思想。答案C【例9】下列VB程序模塊可以計算正整數(shù)n階乘的值。Functionf(nAsInteger)AsIntegerIfn<=1Thenf=1Elsef=n*f(n-1)EndIfEndFunction該模塊采用的算法是()A.枚舉B.查找C.排序D.遞歸解析在自定義函數(shù)f(n)中,從f=n*f(n-1)可以判斷是遞歸算法。答案D[變式10]下列VB程序中,f是一個遞歸函數(shù)。PrivateSubCommand1_Click()DimyasLongText1.Text=””y=f(3)Label1.Caption=str(y)EndSubFunctionf(nAsInteger)asLongText1.Text=Text1.Text+Str(n)Ifn<=1Thenf=1Elsef=f(n-1)+2EndIfEndFunction程序運行時,單擊命令按鈕Command1后,文本框Text1中顯示的內(nèi)容是()A.3B.321C.123D.2解析這段程序由兩部分組成:事件處理過程(PrivateSubCommand1_Click())和自定義函數(shù)(Functionf(nAsInteger)AsLong)。在自定義函數(shù)f中又出現(xiàn)了調(diào)用函數(shù)f本身的語句f=f(n-1)+2,因此f函數(shù)采用的是遞歸算法。在事件處理過程PrivateSubCommand1_Click()中,語句y=f(3)表示調(diào)用函數(shù)f,將參數(shù)3傳遞給f函數(shù)中的變量n,最終將函數(shù)的返回值賦給變量y。函數(shù)f執(zhí)行時,n的值和Text1中的內(nèi)容如下表所示:F(n)nText1.textF(3)33F(2)232F(1)1321因此,在文本框Text1上顯示的內(nèi)容為321。如問標簽Label1中顯示的內(nèi)容為多少?那又該如何解題呢?這就要求大家掌握遞歸算法的實現(xiàn)過程了。遞歸函數(shù)f(n)的執(zhí)行過程如圖所示:即y=f(3)=5,因此在標簽Label1上顯示的內(nèi)容為5。答案B[變式11]利用ADO訪問數(shù)據(jù)庫的步驟是:①定義和創(chuàng)建ADO實例變量②設(shè)置連接參數(shù)并打開連接③設(shè)置命令參數(shù)并執(zhí)行命令④設(shè)置查詢參數(shù)并打開記錄集⑤操作記錄集⑥關(guān)閉、回收有關(guān)對象這些步驟的執(zhí)行順序應(yīng)該是()A.①④③②⑤⑥ B.①③④②⑤⑥C.①③④⑤②⑥ D.①②③④⑤⑥解析利用ADO訪問數(shù)據(jù)庫,想要讀取數(shù)據(jù)庫中的數(shù)據(jù),先要定義和創(chuàng)建ADO對象實例變量,然后下一步就是要與數(shù)據(jù)庫取得連接,接著利用連接參數(shù)進行數(shù)據(jù)庫連接,連接后根據(jù)SQL命令執(zhí)行返回記錄集,并對記錄集進行操作,當操作結(jié)束不需要使用連接對象時,要用close方法來關(guān)閉連接。所以答案為D。答案D[變式12]通過ADO的Recordset對象從數(shù)據(jù)庫中獲取數(shù)據(jù),代碼如下:DimaaAsNewADODB.Recordsetaa.Open“SELECT*FROMinfo”在調(diào)試時出現(xiàn)了如圖所示的錯誤提示:產(chǎn)生該錯誤提示的原因可能是()A.沒有定義ADO的Connection對象實例B.Recordset對象實例沒有打開記錄集C.沒有設(shè)置Recordset對象實例的ActiveConnection連接屬性D.指定的數(shù)據(jù)庫文件不存在解析代碼中第一行定義了Recordset對象實例aa,第二行代碼的功能是打開記錄集,查詢數(shù)據(jù)庫的SQL語句“SELECT*FROMinfo”表示獲取數(shù)據(jù)庫中表“info”的所有記錄,沒有錯誤。但代碼中沒有設(shè)置Recordset對象實例aa的ActiveConnection屬性值,使之與Connection對象實例產(chǎn)生關(guān)聯(lián),所以提示該錯誤。答案C[變式13]通過ADO的Recordset對象實例aa打開了如下表所示的記錄集:序號貨名售價數(shù)量1B5筆記本6.51224B橡皮1.2503簽字筆1.1454圓規(guī)5.325當前記錄是第3條,要用Fields集合返回第3個字段的信息,正確的表示是()A.aa.Fields(0) B.aa.Fields(1)C.aa.Fields(”序號”) D.aa.Fields(”售價”)解析需要了解Fields集合的兩種書寫格式,指定字段名或者字段序號。題目要求返回第3個字段的信息,即“售價”字段的信息。而字段序號是從0開始編號,所以第3個字段應(yīng)該是編號2,故A、B選項均錯誤。答案D[變式14]小葉編寫了一個VisualBasic程序,用于查找數(shù)據(jù)庫sq.mdt,文件中所有相同身高的同學(xué)編號。程序運行界面如圖所示,在列表框List1中顯示所有同學(xué)的編號和身高(按身高從低到高排列),在文本框Text1中輸入需要查找的身高,單擊“查找”按鈕Command1,在列表框List2中顯示所有此身高的同學(xué)編號。數(shù)組a和數(shù)組b分別存儲同學(xué)的編號和對應(yīng)的身高(身高已從低到高排列)。解決此問題的程序代碼如下:DimconnAsNewADODB.ConnectionDimrsAsNewADODB.RecordsetDimnAsIntegerDima(500)AsStringDimb(500)asIntegerPrivateSubForm_Load()conn.ConnectionString=”Provider=;DATASource=”&App.Path&”/sq.accdb”conn.OpenSetrs.ActiveConnection=connrs.Open”SELECT*FROMshengao”n=0DoWhileNotrs.EOF′到記錄集最后一條記錄后退出循環(huán)n=n+1a(n)=rs.Fields(”bh”)b(n)=rs.fields(”sg”)rs.MoveNext′移動到下一條記錄Looprs.closeconn.CloseSetrs=NothingSetconn=NothingEndSubPrivateSubCommand1_Click()′此過程用于在列表框List2中顯示給定身高的所有學(xué)生的編號,代碼略。EndSub′以下函數(shù)用于查找給定身高的學(xué)生的相關(guān)信息PrivateFunctionFindEx(kAsInteger)AsIntegerDimfAsBoolean,iAsInteger,jAsInteger,mAsIntegeri=1:j=nf=FalseDoWhile(i<=j(luò))AndNot(f)m=Fix((i+h)/2)Ifk=b(m)Thenf=____①____ElseIfk<b(m)Thenj=m-1Else____②____EndIfEndIfLoopIffThenFindEx=mElseFindEx=0′找到返回m,否則返回0EndFunction(1)FindEx函數(shù)主要采用的算法是________。(填:順序查找/對分查找)(2)在程序①和②畫線處,填入適當?shù)恼Z句或表達式,把程序補充完整:程序中①劃線處應(yīng)填入________。程序中②劃線處應(yīng)填入________。解析先設(shè)置查找范圍i和j(i=1,j=n),查找過程中,m=Fix((i+j)/2)程序在區(qū)別i和j中取中間數(shù)據(jù),然后將需要查找的數(shù)據(jù)與b(m)比較,相等則返回m;若不相等,再比較k和b(m),如果是小于,就將查找的終點j設(shè)置為m-1,否則將查找的起點i設(shè)置為m+1。答案(1)對分查找(2)①True②i=m+1或i=1+m【易錯易誤】1.冒泡排序和選擇排序冒泡排序和選擇排序的程序?qū)崿F(xiàn)很相似,都用到雙重循環(huán),以及數(shù)組元素之間的比較,因此需要準確區(qū)分兩者之間的代碼異同,能將程序補充完整。2.明確兩種排序算法的比較次數(shù)和交換次數(shù)冒泡排序算法比較次數(shù)為總的比較次數(shù):n(n-1)/2。在每一遍加工的過程中需要對逆序的數(shù)據(jù)兩兩進行交換,選擇排序的比較次數(shù)為n(n-1)/2。兩種排序的比較次數(shù)與待排序元素的初始狀態(tài)無關(guān),而交換次數(shù)與待排序元素的初始狀態(tài)有關(guān),即當待排序元素已經(jīng)有序,交換0次,最壞情況下選擇排序交換n-1次,冒泡排序最壞情況下交換(n-1)(n-2)/2次。3.理解兩種排序算法的原理基礎(chǔ)上能準確模擬數(shù)據(jù)交換后數(shù)列的變化一般情況下,冒泡排序的交換發(fā)生在相鄰兩數(shù)為逆序?qū)r,相鄰兩數(shù)兩兩交換,其范圍是待排序區(qū)域;選擇排序的交換發(fā)生在待排序區(qū)域的最小(最大)數(shù)和待排序區(qū)域的第一個數(shù)進行交換,若最小數(shù)(最大數(shù))是待排序區(qū)域的第一個數(shù),則無需交換。這要求學(xué)生對知識進行內(nèi)化理解,死記硬背的方式則會遇到困難,建議在復(fù)習(xí)之初可以用跟蹤模擬的方式,觀察數(shù)據(jù)的變化來加深理解。4.對分查找算法應(yīng)用的前提條件待查數(shù)列有序,而順序查找沒有這樣的要求,可以無序。5.對分查找工作原理的理解比較次數(shù)是學(xué)生容易忽略的地方。6.兩種查找的程序?qū)崿F(xiàn)包括中間點位置的確定、新的查找區(qū)間的變化以及模擬跟蹤。7.VB和數(shù)據(jù)庫的連接對學(xué)生來說,這部分知識比較陌生,牽涉一系列的基本概念和操作,剛開始容易出現(xiàn)各種錯誤,需要學(xué)會根據(jù)產(chǎn)生的錯誤提示,分析產(chǎn)生該錯誤的可能原因。8.Fields集合要求了解Fields集合通過指定字段序號或字段名返回數(shù)據(jù)的方法,要清楚字段名和字段序號之間的對應(yīng)關(guān)系以及當前記錄是哪一條。Fields集合返回的是當前記錄的數(shù)據(jù)。9.VB應(yīng)用程序通過ADO訪問Access數(shù)據(jù)庫,將數(shù)據(jù)庫作為VB程序設(shè)計時的數(shù)據(jù)源,可用數(shù)組的形式存儲獲取的數(shù)據(jù),進而可以通過枚舉、解析等算法對從數(shù)據(jù)庫中獲取的數(shù)據(jù)進行簡單的處理。1.如果一個4位數(shù)恰好等于它的各位數(shù)字的4次方和,則這個數(shù)被稱為“玫瑰花”數(shù)。例如1634就是一個玫瑰花數(shù):1634=14+64+34+44。如果要求出所有的玫瑰花數(shù),下列算法合適的是()A.查找法 B.解析法C.窮舉法 D.排序法解析本題要求是求出所有的玫瑰花數(shù),即是將求解對象一一列舉出來,因此選C。答案C2.某書店在5所學(xué)校流動售書量(單位:本)分別是88,110,48,64,35。采用冒泡排序法對其進行排序,若完成第一遍時的結(jié)果是:35,88,110,48,64,則完成第二遍時的結(jié)果是()A.35,88,110,48,64 B.35,48,88,64,110C.35,48,88,110,64 D.35,48,64,88,110解析從第一遍的結(jié)果可以看出排序的結(jié)果是數(shù)據(jù)從小到大排。從小到大冒泡排序的基本思想是從最后的一個元素起,自后向前比較相鄰的兩個數(shù)據(jù),將較小的數(shù)據(jù)換到前面,較大的換到后面。第二遍加工時:64和48,64不動;48和110,110換到后面,48換到前面;48和88,88換到后面,48換到前面。這是第二遍加工,結(jié)果是:35,48,88,110,64。答案C3.尋找數(shù)組元素a(1)到a(10)中最小值min程序段如下:eq\x()Fori=2To10Ifa(i)<minThenmin=a(i)Nexti方框中最合適的語句是()A.a(1)=min B.a(1)=0C.min=a(1) D.min=0解析它的思想方法是先假設(shè)數(shù)組的第一項是最小的,并賦值給變量min。因此min=a(1),然后把從第二項開始的所有數(shù)組元素跟變量min進行比較,如果比min小,則把該元素賦值給min。這樣循環(huán)結(jié)束后,變量min中存儲的就是該數(shù)組中的最小值。答案C4.學(xué)校為每位同學(xué)辦理一張校園卡,該卡可供同學(xué)們在食堂用飯、圖書館借書、超市消費等,因此稱為一卡通,一卡通的卡號是唯一的,卡內(nèi)會記錄每位同學(xué)的姓名、班級、金額等信息。下列程序的功能是根據(jù)卡號查找對應(yīng)的姓名,程序中數(shù)組a保存卡號,數(shù)組b保存姓名,第i位同學(xué)的卡號是a(i),姓名是b(i)。程序界面如下圖所示,左邊列表框列出所有同學(xué)的卡號和姓名,在右邊文本框Text1中輸入卡號,單擊“查詢”按鈕(Command1),程序就按卡號進行查找,如果找到就在標簽Label3中輸出姓名,否則就輸出“查無此人”。解決此問題的算法流程圖如下圖所示,相應(yīng)的程序如下,在程序(1)和(2)畫線處,填入適當?shù)恼Z句或表達式,把程序補充完整。PrivateSubCommand1_Click()DimxAsString,iAsInteger,sAsString,fAsBooleanx=Text1.texti=0:f=False′f標志是否已經(jīng)找到,值為True時表示已經(jīng)找到,值為False時表示沒找到DoWhile(i<n)And(①________)′n是總?cè)藬?shù)i=i+1Ifx=a(i)Thenf=TrueEndIfLoopIff=TrueThen②________Elses=”查無此人!”EndIfLabel3.Caption=sEndSub(1)解決此問題所用的算法是________。(選填:順序查找或?qū)Ψ植檎?(2)程序中畫線處①應(yīng)填入________。(3)程序中畫線處②應(yīng)填入________。解析(1)順序查找的基本思想是從第一個數(shù)據(jù)開始,按數(shù)據(jù)的順序逐個將數(shù)據(jù)與給定的值進行比較。若某個數(shù)據(jù)和給定值相等,則查找成功;否則,查找不成功。(2)查找結(jié)束的條件是,變量f標志是否已經(jīng)找到,值為True時表示已經(jīng)找到,值為False時表示沒找到,因此程序中畫線處(1)應(yīng)填:f=False或notf。(3)程序通過卡號查詢,如果找到該卡號,則輸出該卡號對應(yīng)的同學(xué)的姓名,程序中數(shù)組a保存卡號,數(shù)組b保存姓名,當f=True時,表示找到了該卡號。此時退出循環(huán),變量i的值就是該卡號所在的位置,因此b(i)就是該卡號對應(yīng)的同學(xué)的姓名。因此程序中畫線處(2)應(yīng)填入s=b(i)。答案(1)順序查找(2)f=False或notf(3)s=b(i)5.小樹要買一本書,收集了各個網(wǎng)上書店中該書的售價,她設(shè)計了一個VB排序程序,幫助她將售價由低到高排序。程序運行界面如圖所示,左邊列表框List1中顯示排序前數(shù)據(jù),單擊“排序”按鈕Command1,在右邊列表框List2中顯示按售價從低到高排序后的結(jié)果,在標簽Label3中顯示比較次數(shù)(此圖中比較的次數(shù)用圖像處理軟件遮擋)。程序中數(shù)組a和數(shù)組b分別存儲網(wǎng)上書店名稱和對應(yīng)的售價。程序代碼如下:ConstnAsInteger′n為比較次數(shù)Dima(1Ton)AsString′數(shù)組a用于存儲網(wǎng)上書店名稱Dimb(1Ton)AsInteger′數(shù)組b用于存儲售價PrivateSubCommand1_Click()DimiAsInteger,jAsInteger,kAsInteger,tAsSingle,sAsStringDimnumAsIntegernum=0Fori=1To4k=iForj=____①____To5Ifb(k)>b(j)Thenk=j(luò)②____NextjIf____③____Thens=a(i):a(i)=a(k):a(k)=st=b(i):b(i)=b(k):b(k)=tEndIfNextiFori=1To5List2.AddItema(i)+””+Str(b(i))NextiLabel3.Caption=”比較次數(shù)為:”+Str(num)+”次”EndSubPrivateSubForm_Load()′此過程用于對數(shù)組a和數(shù)組b進行賦初值,并顯示在List1中,代碼略EndSub(1)在程序①、②和③劃線處填入適當?shù)恼Z句或表達式,將程序補充完整:程序中①劃線處應(yīng)填入________________________________________________________________________________________________________________________。程序中②劃線處應(yīng)填入________________________________________________________________________________________________________________________。程序中③劃線處應(yīng)填入_______________________________________________________________________________________________________________________。(2)程序結(jié)果中被遮掉的比較次數(shù)是多少?_______________________________________________________________________________________________________。解析(1)由代碼特點分析,確定該算法為選擇排序。(2)根據(jù)選擇排序的特點,為確定第i個位置的數(shù),需要在第i到n個位置中找出最小的數(shù)放到第i個位置中,由于“k=i”這句語句,在進入循環(huán)前,先將第i個位置暫時設(shè)置為最小值的所在,因此循環(huán)中,應(yīng)該是從第i+1個位置開始比較,如果有更小的值,則暫存最小值位置標記為新的值。(3)當記錄最小值的位置不是第i個位置的時候,則需要交換兩個位置中的數(shù)值。此處特別要注意的是,在該選擇排序中,最小值記錄的是所在的位置而不是具體的數(shù)值。(4)第一遍循環(huán),比較的次數(shù)是4次,第二遍循環(huán)是3次,以此類推4+3+2+1=10次,可以通過模擬解決,要注意此處比較次數(shù)和交換次數(shù)是不同的。答案(1)①i+1②num=num+1③i<>k(2)106.某超市商品信息管理系統(tǒng)中有1萬條商品資料記錄(已經(jīng)索引排序),假設(shè)從中取出一條記錄并與待查項進行比較所花的時間為20毫秒,則用對分法在該系統(tǒng)中查找任意一個指定商品最多花費的時間約為()A.13毫秒 B.14毫秒C.280毫秒 D.14萬毫秒解析根據(jù)對分查找算法的基本思想可得查找任一數(shù)據(jù)所查找的最多次數(shù)為n=[log210000]+1,求得n=14,即與待查項最多比較14次,而每一次比較所花的時間為20毫秒,因此最多花費時間為14*20=280毫秒。答案C7.7位幼兒園小朋友的體重(單位kg)從低到高依次為:13,15,16,18,20,21,23。用對分查找法找到23的過程中,依次被訪問到的數(shù)據(jù)是()A.23 B.18,21,23C.18,23 D.18,20,21,23解析依據(jù)對分查找每次取區(qū)域中間點的方式,依次訪問到的數(shù)據(jù)是18,21,23。答案B8.(2016·8月溫州模擬)某VB程序使用了遞歸函數(shù),代碼如下:PrivateSubCommand1_Click()Text1.Text=f(3)EndSubFunctionf(xASInteger)AsStringIfx=1Thenf=1Elsef=f(x-1)+2EndFunction運行程序并點擊按鈕Command1后,文本框Text1中顯示的內(nèi)容是()A.1B.3C.5D.7解析分析遞歸函數(shù),f(1)=1,f(2)=f(1)+2=3,f(3)=f(2)+2=5。答案C9.觀察如下VB程序段:Functionfx(nAsInteger)AsLongIfn=1Thenfx=1Elsefx=2*fx(n-1)EndIfEndFunctionPrivateSubCommand1_Click()DimnAsInteger,xAsLongn=Val(Text1.Text)x=fx(n)Text2.Text=Str(x)EndSub若在文本框Text1中輸入數(shù)字5,單擊命令按鈕Command1后,在文本框Text2顯示的內(nèi)容為()A.2B.8C.16D.32解析由代碼特點分析,該程序段為遞歸算法,fx(1)=1,fx(2)=2,fx(3)=4,fx(4)=8,fx(5)=16。答案C10.如果兩個質(zhì)數(shù)的差為2,則這兩個質(zhì)數(shù)稱為孿生質(zhì)數(shù)對;編寫VB程序,實現(xiàn)如下功能:單擊“顯示孿生質(zhì)數(shù)對”按鈕Command1,在列表框list1中顯示100以內(nèi)的所有孿生質(zhì)數(shù)對(運行效果如圖所示)。實現(xiàn)上述功能的VB代碼如下,但加框處代碼有錯,請改正。Dima(1To50)AsIntegerPrivateSubCommand1_Click()DimiAsIntegerk=0:i=3DoWhilei<=100eq\x(Ifprime(i)Then)′(1)k=k+1a(k)=iEndIfi=i+2LoopFori=2Tokeq\x(Ifa(i)=a(i+1)+2Then)′(2)List1.AddItemStr(a(i-1))+”和”+Str(a(i))EndIfNextiEndSubFunctionprime(xAsInteger)AsBooleanprime=FalseFori=2ToInt(Sqr(x))IfxModi=0Thenprime=TrueExitForEndIfNextiEndFunction答案(1)prime(i)=false(2)a(i)=a(i-1)+2ora(i)+2=a(i-1)11.使用VB中的ADO訪問文件名為“Course.accdb”的Access數(shù)據(jù)庫,與數(shù)據(jù)庫建立連接的程序段如下:DimconnAsNewADODB.Connectionconn.ConnectionString=”Provider=;DataSource=”+App.Path+”/monkey.accdb”conn.Open在調(diào)試時出現(xiàn)了如圖所示的錯誤提示框。產(chǎn)生該錯誤提示的原因可能是()A.沒有定義ADO的Connection對象實例B.沒有打開Connection對象實例到數(shù)據(jù)庫的連接C.指定的數(shù)據(jù)庫文件不存在D.沒有添加選擇MicrosoftActiveXDataObjects6.1Library組件解析為了能夠在程序中使用ADO對象編程,在連接數(shù)據(jù)庫前,必須首先在VisualBasic6.0菜單“工程”—“引用”中選擇MicrosoftActiveXDataObjects6.1Library組件,并保證已正確安裝MicrosoftAccess2010數(shù)據(jù)庫引擎。答案D12.學(xué)校需要統(tǒng)計學(xué)生的作業(yè)完成數(shù),需要將學(xué)生的完成數(shù)按從高到低顯示,下列程序模擬該信息處理過程,程序在數(shù)據(jù)庫stud中找到的學(xué)生信息(編號和完成次數(shù)),并將所有學(xué)生按照完成數(shù)從高到低顯示。先將所有學(xué)生的編號和完成次數(shù)從數(shù)據(jù)庫stud的info表中ID和finshed兩字段中取出分別保存在數(shù)組a和數(shù)組b中,第i個學(xué)生的編號保存在a(i)中,對應(yīng)的作業(yè)完成次數(shù)保存在b(i)中。數(shù)據(jù)庫文件“stud.accdb”信息如圖1所示。圖1程序界面如圖2所示,左邊列表框List1中顯示所有學(xué)生信息(包括編號和完成次數(shù)),單擊“排序”按鈕(Command1),所有編號按照作業(yè)完成次數(shù)從高到低顯示在列表框List2中。圖2代碼如下:DimconnAsNewADODB.ConnectionDimrsAsNewADODB.RecordsetDimnAsIntegerDima(500)AsStringDimb(500)AsIntegerPrivateSubForm_Load()DimiAsIntegerconn.ConnectionString=”Provider=;DATASource=”&App.Path&”/stud.accdb”conn.OpenSetrs.ActiveConnection=connrs.Open”SELECT*FROMinfo”n=0DoWhileNotrs.EOF’到記錄集最后一條記錄后退出循環(huán)n=n+1a(n)=rs.fields(”id”)b(n)=rs.fields(”finshed”)rs.MoveNext’移動到下一條記錄LoopFori=1TonList1.AddItema(i)+“”+Str(b(i))Nextirs.Closeconn.CloseSetrs=NothingSetconn=NothingEndSubPrivateSubCommand1_Click()DimiAsInteger,jAsInteger,t1AsInteger,t2AsString,kAsIntegerFori=1Ton-1′n表示學(xué)生總數(shù)k=i′k保存第i大的數(shù),一開始假定是a(i)Forj=i+1TonIfb(k)<b(j)Thenk=j(luò)′比較完成數(shù)____①____If____②____Thent1=b(i):b(i)=b(k):b(k)=t1′交換完成次數(shù)t2=a(i):a(i)=a(k):a(k)=t2′交換編號EndIfNextiFori=1Ton′在列表框List2中輸出排序結(jié)果List2.AddItema(i)+””+Str(b(i))NextiEndSub(1)當“Form_Load()”事件處理過程運行結(jié)束時,變量n的值為:________。(2)加虛線框中的代碼采用的排序算法為:_______________________________________________________________________________________________________。(3)為實現(xiàn)上述功能,程序中畫線處的代碼為:①________;②________。解析本題重點考查枚舉算法的實現(xiàn)。該算法的基本思想是根據(jù)問題本身性質(zhì),一一列舉問題所有可能的情況,并根據(jù)題目的條件逐個作出判斷,從中挑選出符合條件的解。答案(1)500(2)枚舉算法(3)①j=j(luò)+1②a(k)<a(j)1.統(tǒng)計1~1000間個位數(shù)是4,且能被9整除的數(shù)共有多少個,可以采用的算法是()A.查找算法 B.枚舉算法C.解析算法 D.排序算法解析枚舉對象是1~1000內(nèi)的所有整數(shù),枚舉范圍為1~1000,枚舉條件是:個位數(shù)是4且能被9整除的整數(shù),符合枚舉算法的基本思想。答案B2.計算兩個并聯(lián)電阻總電阻值的算法如下:①輸入兩電阻R1,R2的值②計算總電阻R=eq\f(R1R2,R1+R2)③輸出總電阻R上述算法屬于()A.枚舉算法B.解析算法C.排序算法D.查找算法解析由題可知,本題為解析算法。答案B3.有一個8位數(shù),前4位是4623,后4位數(shù)字的特點如下:(1)后4位數(shù)字中的前2位數(shù)字相同;(2)后4位數(shù)字中的后2位數(shù)字也相同;(3)后4位數(shù)字正好是一個完全平方數(shù)。某同學(xué)編寫了一個VB程序用于尋找這個8位數(shù)。程序運行時,單擊“計算”按鈕Command1,在標簽Label2中顯示這個8位數(shù),程序運行界面如圖所示。PrivateSubCommand1_Click()DimiAsLong,aAsInteger,bAsInteger,cAsInteger,dAsInteger,xAsIntegerFori=32To99n=i*ix=____①____y=____②____a=x/10b=xMod10c=y(tǒng)\10d=y(tǒng)Mod10Ifa=bAndc=dThen____③____NextiEndSub為實現(xiàn)上述功能,請在程序畫線處填入合適的語句。畫線①處應(yīng)填入的語句為:___________________________________________________________________________________________________________________;畫線②處應(yīng)填入的語句為:____________________________________________________________________________________________________________________;畫線③處應(yīng)填入的語句為:_____________________________________________________________________________________________________________________。解析后4位數(shù)是一個完全平方數(shù),因此只要枚舉32~99的平方即可;變量x和y分別表示這4位數(shù)的前兩位數(shù)字和后兩位數(shù)字,最后將結(jié)果顯示在標簽Label2上。答案①x=nMod100②y=n\100③Label2.Caption=Str(46230000+n)4.計算三角形面積的算法如下:①輸入三角形三邊長a,b,c②計算半周長p=(a+b+c)/2③計算三角形面積s=Sqr(p*(p-a)*(p-b)*(p-c))④輸出面積s上述算法屬于()A.排序算法 B.解析算法C.枚舉算法 D.查找算法解析本題中算法的基本思想是通過數(shù)學(xué)表達式的計算來解決問題,符合解析算法的基本思想。答案B5.兔子吃蘿卜。兔子拔了一堆蘿卜,第一天吃了一半,還嫌不過癮,又吃了一個,第二天又將剩下的蘿卜吃掉一半,又多吃了一個,以后每天如此。到第10天想再吃時,見只剩下一個蘿卜了。求第一天共拔了多少蘿卜。小明編寫了一個VB程序,用于計算兔子第一天拔的蘿卜總數(shù)。程序運行界面如圖所示。PrivateSubCommand1_Click()DimiAsInteger,sumAsIntegersum=1Fori=9To1____①____②____NextiText1.Text=Str(sum)EndSub回答下列問題:(1)該程序采用的算法是________(填:解析算法/枚舉算法)(2)顯示計算結(jié)果的控件屬于________類,該控件的名稱是________。(3)畫線①處應(yīng)填入的語句為________。畫線②處應(yīng)填入的語句為________。解析根據(jù)題意可知,前一天的蘿卜數(shù)是后一天的蘿卜數(shù)加1后的2倍,因此可得到公式sum=(sum+1)*2;由于For循環(huán)是遞減的,因此步長為-1。答案(1)解析算法(2)文本框Text1(3)①Step-1②sum=(sum+1)*26.有如下程序段:s=“”Fori=1To3Forj=7Toi+1Step-1Ifa(j)<a(j-1)Thenk=a(j):a(j)=a(j-1):a(j-1)=kEndIfNextjs=s+Str(a(i))NextiText1.Text=s數(shù)組元素a(1)到a(7)的數(shù)據(jù)依次為“3,9,1,5,8,6,2”,經(jīng)過該程序段“加工”后,文本框Text1中顯示的內(nèi)容是()A.123 B.986C.391 D.862解析冒泡排序的基本操作是比較相鄰的兩個數(shù)據(jù),因此代碼中會出現(xiàn)相鄰的兩個數(shù)組變量的比較,比如題中Ifa(j)<a(j-1),一旦確定是冒泡排序,接著就可以用冒泡排序的思想方法來對數(shù)據(jù)進行排序。分析外循環(huán)語句可知總共做了三遍排序加工,輸出結(jié)果是a(1)、a(2)、a(3),分析if語句可知數(shù)據(jù)是從小到大排序,因此三遍排序后a(1)=1、a(2)=2、a(3)=3。答案A7.(2015·10月浙江選考)已知單調(diào)函數(shù)f(x)在[0,1]區(qū)間存在一個x0,使f(x0)=0?,F(xiàn)用對分查找法搜索x0的值,開始搜索區(qū)間為[0,1],若經(jīng)過10次對分查找后還需繼續(xù)搜索,則第11次搜索區(qū)間的長度為()A.1/2B.1/10C.1/102D.1/210解析本題考查對分查找。第一次搜索區(qū)間是1,第二次搜索區(qū)間是1/2,第三次搜索區(qū)間是eq\f(1,22),第四次搜索區(qū)間是eq\f(1,23)……,第n次搜索區(qū)間是eq\f(1,2n-1),第11次搜索區(qū)間是eq\f(1,210),選項D正確。答案D8.在數(shù)組元素a(1)到a(5)中查找鍵值為key的數(shù),其查找算法的VB程序段如下:Dima(1To5)AsIntegerDimKeyAsIntegerPrivateSubCommand1_Click()t=0Fori=1To5If____①____Thent=iExitFor′②EndIfNextiPrinttEndSubPrivateSubForm_Load()′此過程用于對數(shù)組a和查找鍵Key進行賦初值,代碼略EndSub該程序段中所用的查找算法是_________________________________________________________________________________________________________。在程序①畫線處,填入適當?shù)恼Z句或表達式,把程序補充完整:程序中①畫線處應(yīng)填入______________________________________________________________________________________________________________________________。當數(shù)組元素a(1)到a(5)中存儲的數(shù)據(jù)為(2,5,1,9,5),查找鍵Key為5時:(3)該程序運行結(jié)束,t的值是___________________________________________________________________________________________________________________。(4)如果將②所標記的ExitFor語句刪除,該程序運行結(jié)束時,t的值是________。解析(1)在明確是查找算法的前提下,觀察代碼“Fori
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年版股權(quán)轉(zhuǎn)讓價款調(diào)整及補充合同版B版
- 2024年度學(xué)校校園公共自行車租賃服務(wù)合同3篇
- 2024年度高端醫(yī)療器械租賃及維護服務(wù)合同
- 2024版?zhèn)€人房屋租賃合同樣本下載6篇
- 2024年標準版預(yù)付款采購保障合同模板版B版
- 2024年度軟件開發(fā)合同:軟件開發(fā)公司與企業(yè)用戶之間的軟件定制與技術(shù)支持3篇
- 2024年度企業(yè)員工薪酬福利設(shè)計與調(diào)整合同6篇
- 2024版學(xué)校國際交流項目合同2篇
- 2024年度填土施工專用合同條款2篇
- 2024威海房產(chǎn)買賣過戶手續(xù)全流程電子合同3篇
- 小學(xué)英語-六上U6 Read and write教學(xué)設(shè)計學(xué)情分析教材分析課后反思
- 基于Java的圖書管理系統(tǒng)的設(shè)計與應(yīng)用
- 新視野大學(xué)英語(第四版)讀寫教程1(思政智慧版) 課件 Unit 4 Social media matters Section A
- 同軸終端負載的介紹
- 2023秋國開《思想道德與法治》終考任務(wù)一之★范文二觀看《紅海行動》有感
- 小學(xué)心理健康教育課小學(xué)生心理健康看誰記得快又牢教學(xué)課件
- 部編人教版五年級上冊語文全冊說課稿
- 湖北黃岡麻城市2022-2023學(xué)年第一學(xué)期期末教學(xué)質(zhì)量監(jiān)測一年級語文試卷
- 小學(xué)語文跨學(xué)科學(xué)習(xí)任務(wù)群學(xué)習(xí)任務(wù)設(shè)計策略
- 2019人教版高一英語新教材必修三單詞表(默寫檢測)
- 中俄產(chǎn)業(yè)園合作協(xié)議模板
評論
0/150
提交評論