資源簡介 排序算法的程序實現(教師版)1.有如下程序段:For i = 1 To 2For j = 5 To i + 1 Step -1If a(j) > a(i) Thent = a(j): a(j) = a(i): a(i) = tEnd IfNext jNext i數組元素a(1)到a(5)的值依次為“33,24,45,16,77”,經過該程序段“加工”后,數組元素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答案 A解析 這是一個選擇排序,其排序思想是:在i遍排序中,從最后一個元素開始到第i+1個元素依次和第i號元素比較,如果有比i號元素大的立刻交換,并且記錄元素下標,一遍全部比較結束后再交換進行下一輪。2.小趙對選擇排序算法進行了如下改進:在數組的所有元素中找出最小和最大數據的元素,然后將這兩個元素分別與第一個和最后一個元素交換數據,在余下的元素中找出最小和最大數據的元素,分別與第二個和倒數第二個元素交換數據,以此類推,直到所有元素的數據按升序排列。小趙編寫的VB程序段如下:p = 1: q = 10Do While p < q iMin = p: iMax = p For i = p + 1 To qIf a(i) < a(iMin) Then iMin = iIf a(i) > a(iMax) Then iMax = i Next i t = a(iMin): a(iMin) = a(p): a(p) = t t = a(iMax): a(iMax) = a(q): a(q) = t p = p + 1 q = q - 1Loop要使程序實現上述算法思想,則方框中的語句是( )A.If iMax = p Then iMax = iMinB.If iMin = p Then iMin = iMaxC.If iMax = p Then iMin = iMaxD.If iMin = p Then iMax = iMin答案 A解析 如果找到的最小值的元素序號iMin=q,最大值的元素序號iMax=p,那么在執行完語句t = a(iMin): a(iMin) = a(p): a(p) = t后,實際上最大值同時也被交換到了a(q)中。這種情況下,如果直接執行后續的語句t = a(iMax): a(iMax) = a(q): a(q) = t,則又將最大值交換到a(p)中,并把最小值也換回到原來的a(q)中。為避免交換好的數據換回來,可以把iMax的值賦為q或iMin,如此t = a(iMax): a(iMax) = a(q): a(q) = t語句就變成了自己和自己交換,不會把交換好的數據換回來。3.有如下VB程序段:Dim s(1 To 6) As Strings(1)=″4″:s(2)=″343″:s(3)=″312″:s(4)=″12″:s(5)=″246:s(6)=″121″c=″ ″For i=1 To 5For j=i+1 To 6If s(i)+s(j) t=s(j):s(j)=s(i):s(i)=tEnd IfNext jc=c+s(i)Next iText1.text=c運行該段代碼后,文本框Text1中顯示的內容為( )A.343312246121124B.434331224612112C.434331224612121D.121122463123434答案C該程序段采用選擇排序法對字符類型的數據進行排序。字符串大小的比較方法是:先比較第1個字符,若不同,ASCII大的一方字符串值較大,之后不用再比較;若相同,則比較第2個。例如:″4″>″345″,″4366″<″451″。根據代碼s(i)+s(j)4.有如下VB程序段:For i = 5 To 4 Step -1k = iFor j = 6 - i To 1 Step-1 If a(j) < a(k) Then k = jNext jIf i <> k Then t = a(i): a(i) = a(k): a(k) = tEnd IfNext i數組元素a(1)到a(5)的值依次為“41,66,70,83,31”,經過該程序段“加工”后,數組元素a(1)到a(5)的值依次為 ( )A.31,41,66,83,70 B.83,70,66,41,31C.83,66,70,41,31 D.31,41,66,70,83答案C第一遍循環,i=5,k=5,內循環為j=1 to 1只執行1次,比較a(1)5.有如下程序段:bottom=6: i=1: r=Val(Text1.Text)Do While iFor j=bottom To i+1 Step -1If a(j)>a(j-1) Thent=a(j):a(j)=a(j-1):a(j-1)=tEnd IfNext ji=i+1For j=i To bottom -1If a(j)t=a(j):a(j)=a(j+1):a(j+1)=tEnd IfNext jbottom=bottom-1Loop數組元素a(1)到a(6)的值依次為“73、56、28、61、44、92”,若在文本框Text1中輸入“2”,則經過該程序段“加工”后,數組元素a(1)到a(6)的值依次為( )A.73,61,56,92,44,28B.92,73,56,61,44,28C.92,73,61,56,28,44D.92,73,61,56,44,28答案B本題是雙向冒泡排序算法,內循環前半部分從后往前,將大的元素往上冒;后半部分從前往后,將小的元素往下沉。因為r值為2,所以僅排序一次,排序后數組a各元素值為92、73、56、61、44、28。6.n個數據的冒泡升序排序需要經過n-1遍的加工,每一遍加工自下而上比較相鄰兩個數據,把較小者交換到上面,在第i遍加工過程中需要進行n-i對數據的比較。在某些情況下,第i遍加工過程中,在上面部分較小數據已經有序情況下,不需要再進行n-i對數據的比較。如對“17,18,19,24,23,20”這6個數據排序中,第1遍排序結束后數據為“17,18,19,20,24,23”,第2遍排序時不再需要對20及其前面共4個數據進行比較。以下程序實現了冒泡升序排序的優化,在劃線處填入合適的代碼。Dim n As IntegerDim a(1 To 100) As Integer'n=10,排序前生成的數據存儲在數組a中,并在列表框List1中顯示,代碼略Private Sub Command1_Click()Dim i As Integer,j As Integer,start As Integer,t As Integeri=2Do While i<=nstart=nFor j=n To i Step-1 If ① Then t=a(j):a(j)=a(j-1):a(j-1)=t ② End IfNext ji=start+1LoopFor i=1 To nList2.AddItem= ③ Next iEnd Sub答案 ①a(j)解析 程序要實現升序排序,所以只有當后面的數據小于前面的數據時才需要數據交換,而從后面交換的語句中可以看出是a(j)與a(j-1)交換,所以第①空填a(j)7.用VB小程序統計文章中字母出現的頻率,程序功能如下:在文本框text1中輸入文章,單擊按鈕command1,在列表框list1中按各字母出現的次數降序顯示,程序運行界面如下圖所示。實現上述功能的VB程序如下。請在劃線處填入合適代碼。Private Sub Command1_Click()Dim s As String,t1 As Integer,t2 As StringDim i As Integer,j As Integer,c As StringDim a(1 To 26) As Integer '數組a存放字母出現次數Dim b(1 To 26) As String '數組b存放26個小寫字母For i=1 To 26a(i)=0b(i)= ① Next is=Text1.TextFor i=1 To Len(s)c=Mid(s,i,1)If c>=″A″ And c<=″Z″ Thenc=Chr(Asc(c)+32)End IfIf c>=″a″ And c<=″z″ Then ② a(j)=a(j)+1End IfNext iFor i=1 To 25For j=1 To ③ If a(j) t1=a(j):a(j)=a(j+1):a(j+1)=t1 t2=b(j):b(j)=b(j+1):b(j+1)=t2End IfNext jNext iFor i=1 To 26List1.AddItem b(i) &″:″ & a(i)Next iEnd Sub答案 ①Chr(Asc(″a″)+i-1) ②j=Asc(c)-Asc(″a″)+1 ③26-i解析 ①該語句所在循環功能對數組a、b進行初始化,把數組a中的每個元素賦值為0,把數組b中的每個元素依次賦值為“a”、“b”、“c”、……、“z”,所以①處填Chr(Asc(″a″)+i-1)。②該處的功能是:如果取出字符c為字母,則該字母個數加1,字母個數存入數組a對應的元素中,即a(1)存放字母“a”的個數,a(2)存放字母“b”的個數……,②處要找出字母對應的元素下標j,所以j=Asc(c)-Asc(″a″)+1。③該處二重循環的功能是對保存在數組a中各字母出現的次數進行降序排列,數組b也作相應調整,排列使用冒泡法,每次是從數組第1個元素開始進行兩兩比較,通過一輪循環把最小值移到最后(移到第27-i號元素中),所以③處語句為26-i。排序算法的程序實現(學生版)1.有如下程序段:For i = 1 To 2For j = 5 To i + 1 Step -1If a(j) > a(i) Thent = a(j): a(j) = a(i): a(i) = tEnd IfNext jNext i數組元素a(1)到a(5)的值依次為“33,24,45,16,77”,經過該程序段“加工”后,數組元素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,162.小趙對選擇排序算法進行了如下改進:在數組的所有元素中找出最小和最大數據的元素,然后將這兩個元素分別與第一個和最后一個元素交換數據,在余下的元素中找出最小和最大數據的元素,分別與第二個和倒數第二個元素交換數據,以此類推,直到所有元素的數據按升序排列。小趙編寫的VB程序段如下:p = 1: q = 10Do While p < q iMin = p: iMax = p For i = p + 1 To qIf a(i) < a(iMin) Then iMin = iIf a(i) > a(iMax) Then iMax = i Next i t = a(iMin): a(iMin) = a(p): a(p) = t t = a(iMax): a(iMax) = a(q): a(q) = t p = p + 1 q = q - 1Loop要使程序實現上述算法思想,則方框中的語句是( )A.If iMax = p Then iMax = iMinB.If iMin = p Then iMin = iMaxC.If iMax = p Then iMin = iMaxD.If iMin = p Then iMax = iMin3.有如下VB程序段:Dim s(1 To 6) As Strings(1)=″4″:s(2)=″343″:s(3)=″312″:s(4)=″12″:s(5)=″246:s(6)=″121″c=″ ″For i=1 To 5For j=i+1 To 6If s(i)+s(j) t=s(j):s(j)=s(i):s(i)=tEnd IfNext jc=c+s(i)Next iText1.text=c運行該段代碼后,文本框Text1中顯示的內容為( )A.343312246121124B.434331224612112C.434331224612121D.1211224631234344.有如下VB程序段:For i = 5 To 4 Step -1k = iFor j = 6 - i To 1 Step-1 If a(j) < a(k) Then k = jNext jIf i <> k Then t = a(i): a(i) = a(k): a(k) = tEnd IfNext i數組元素a(1)到a(5)的值依次為“41,66,70,83,31”,經過該程序段“加工”后,數組元素a(1)到a(5)的值依次為 ( )A.31,41,66,83,70 B.83,70,66,41,31C.83,66,70,41,31 D.31,41,66,70,835.有如下程序段:bottom=6: i=1: r=Val(Text1.Text)Do While iFor j=bottom To i+1 Step -1If a(j)>a(j-1) Thent=a(j):a(j)=a(j-1):a(j-1)=tEnd IfNext ji=i+1For j=i To bottom -1If a(j)t=a(j):a(j)=a(j+1):a(j+1)=tEnd IfNext jbottom=bottom-1Loop數組元素a(1)到a(6)的值依次為“73、56、28、61、44、92”,若在文本框Text1中輸入“2”,則經過該程序段“加工”后,數組元素a(1)到a(6)的值依次為( )A.73,61,56,92,44,28B.92,73,56,61,44,28C.92,73,61,56,28,44D.92,73,61,56,44,286.n個數據的冒泡升序排序需要經過n-1遍的加工,每一遍加工自下而上比較相鄰兩個數據,把較小者交換到上面,在第i遍加工過程中需要進行n-i對數據的比較。在某些情況下,第i遍加工過程中,在上面部分較小數據已經有序情況下,不需要再進行n-i對數據的比較。如對“17,18,19,24,23,20”這6個數據排序中,第1遍排序結束后數據為“17,18,19,20,24,23”,第2遍排序時不再需要對20及其前面共4個數據進行比較。以下程序實現了冒泡升序排序的優化,在劃線處填入合適的代碼。Dim n As IntegerDim a(1 To 100) As Integer'n=10,排序前生成的數據存儲在數組a中,并在列表框List1中顯示,代碼略Private Sub Command1_Click()Dim i As Integer,j As Integer,start As Integer,t As Integeri=2Do While i<=nstart=nFor j=n To i Step-1 If ① Then t=a(j):a(j)=a(j-1):a(j-1)=t ② End IfNext ji=start+1LoopFor i=1 To nList2.AddItem= ③ Next iEnd Sub7.用VB小程序統計文章中字母出現的頻率,程序功能如下:在文本框text1中輸入文章,單擊按鈕command1,在列表框list1中按各字母出現的次數降序顯示,程序運行界面如下圖所示。實現上述功能的VB程序如下。請在劃線處填入合適代碼。Private Sub Command1_Click()Dim s As String,t1 As Integer,t2 As StringDim i As Integer,j As Integer,c As StringDim a(1 To 26) As Integer '數組a存放字母出現次數Dim b(1 To 26) As String '數組b存放26個小寫字母For i=1 To 26a(i)=0b(i)= ① Next is=Text1.TextFor i=1 To Len(s)c=Mid(s,i,1)If c>=″A″ And c<=″Z″ Thenc=Chr(Asc(c)+32)End IfIf c>=″a″ And c<=″z″ Then ② a(j)=a(j)+1End IfNext iFor i=1 To 25For j=1 To ③ If a(j) t1=a(j):a(j)=a(j+1):a(j+1)=t1 t2=b(j):b(j)=b(j+1):b(j+1)=t2End IfNext jNext iFor i=1 To 26List1.AddItem b(i) &″:″ & a(i)Next iEnd Sub 展開更多...... 收起↑ 資源列表 排序算法的程序實現(教師版).docx 排序算法的程序實現(學生版).docx 縮略圖、資源來源于二一教育資源庫