資源簡介 專項測試十 區間問題1.進入2016年7月以來,浙江省氣溫連續高溫,為了研究氣溫的變化情況,小明用VB編寫了一個最高氣溫連續運行天數的統計軟件。小明采集了杭州市7~8月的每日最高氣溫,并存放在ACCESS數據庫中。程序運行時,讀取日期和最高氣溫并顯示在列表框List1中,在文本框Text1中輸入溫度值,單擊統計按鈕Command1,程序自動統計運行在該溫度值以上的最長連續天數,并顯示在Text3中,同時在Text2中顯示日期區間,運行界面如圖所示。實現上述功能的VB代碼如下,在劃線處填入合適代碼。Dim rq(1 To 100) As String ′存放日期Dim qw(1 To 100) As Integer ′存放最高氣溫值Dim n As Integer ′總天數Private Sub Form_Load() ′讀取數據庫內容,其中日期數據存放在數組rq中,最高氣溫數據存放在qw中,并顯示在列表框List1中,代碼略End SubPrivate Sub Command1_Click() Dim ntempend As Integer ′記錄當前結束日期的下標 Dim max As Integer ′記錄最大連續天數 Dim nend As Integer ′記錄最大連續天數下的結束日期的下標 Dim ncount As Integer ′統計連續天數 Dim tjqw As Integer ′存放輸入的溫度 tjqw = Val(Text1.Text) ncount = 0 max = 0 For i = 1 To n If ______①______ Then ncount = ncount + 1 ntempend =i Else ncount = 0End IfIf max < ncount Then max = ncount ______②______End If Next i If max < > 0 Then Text2.Text = ____③____& “-” & rq(nend) Text3.Text = Str(max)End Sub解析 本題主要考查的是程序的綜合能力。本程序的功能是統計滿足條件的連續區間范圍,變量ncount用來統計溫度大于tjqw的連續天數,ntempend用來記錄溫度連續大于tjqw的序號,變量max用來記錄溫度大于tjqw的最長連續天數,nend用來記錄溫度大于tjqw的最長連續天數的最后一天位置,因此①處代碼為qw(i) >= tjqw,②處代碼為nend = ntempend。最長連續天數為max,結束日期為rq(nend),則開始日期為rq(nend - max + 1)。答案?、賟w(i) >= tjqw?、趎end = ntempend ③rq(nend - max + 1)2.小明編寫了一個有關合并區間的VB程序,功能如下:窗體加載時,獲取并存儲合并前的區間數據,并顯示在左邊的列表框中;單擊“合并區間”按鈕Command1,程序以區間左端點數值對區間進行升序排序,然后按相鄰區間的相交情況進行合并,最后將合并后的區間信息顯示在右邊的列表框中。程序運行界面如圖所示。(1)合并前區間為“[1,10],[5,15],[8,12],[16,30],[35,50]”,則合并后的區間為______________。(2)實現上述功能的VB程序如下,請在程序劃線處填入合適的代碼。Dim a(1 To 20) As Integer ′存儲區間左端點Dim b(1 To 20) As Integer ′存儲區間右端點Dim n As IntegerPrivate Sub Form_Load() ′獲取n個合并前區間數據 ′將區間左端點存入a數組,區間右端點存入b數組,并在列表框List1中顯示 ′代碼略End SubPrivate Sub Command1_Click() Dim i As Integer, j As Integer, left As Integer, right As Integer Dim k As Integer, temp1 As Integer, temp2 As Integer For i = 1 To n - 1k = iFor j = n To i + 1 Step -1 If ______①______ Then k = jNext jIf i < > k Then temp1 = a(k): a(k) = a(i): a(i) = temp1 temp2 = b(k): b(k) = b(i): b(i) = temp2End If Next i left = a(1) right = b(1) For i = 2 To n If a(i) <= right Then If ______②________ Then right = b(i) ElseList2.AddItem “[“ + Str(left) + ”,“ + Str(right) + ”]” left = a(i) ________③________ End If Next i List2.AddItem “[“ + Str(left) + ”,” + Str(right) + ”]”End Sub解析 本題主要考查的是程序的綜合能力。(1)本小題主要是區間合并的實際應用,合并后的區間為“[1,30],[35,50]”。(2)本題程序的功能是進行區間合并,首先使用選擇排序算法對區間按左端點升序排序,因此①處代碼為a(k) > a(j);然后根據相鄰區間的左右端點情況進行合并操作,根據代碼“right = b(i)”可知,當前面區間的右端點小于當前區間的右端點時(即right < b(i)),則合并后的區間右端點為當前區間的右端點;當a(i) >right時,表示相鄰兩個區間無相交關系,因此區間的左端點left=a(i),右端點right=b(i)。答案 (1)[1,30],[35,50] (2)①a(k) > a(j)?、趓ight < b(i)?、踨ight = b(i)3.為分析數組a中各元素依次變化的情況,進行如下定義:?變化段:數組中相鄰兩個元素構成一個變化段。變化段有上升段(a(i)>a(i-1))、下降段(a(i)?波峰:從上升段轉到下降段形成一個波峰。波峰的起點是峰頂前所有連續上升段中的第1個,終點是峰頂后所有連續下降段中的最后1個。?對稱波峰:上升段與下降段個數相同的波峰稱為對稱波峰。下圖為一組數據的變化段及波峰示意圖。現要求統計數組a各元素依次變化過程中“對稱波峰”的個數。小李依據上述描述設計如下VB程序。請回答下列問題:(1)數組元素“1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1”依次變化過程中“對稱波峰”的個數為________。(2)請在劃線處填入合適的代碼。Const n = 20Dim a(1 To n) As IntegerPrivate Sub Form_Load() ′讀取數據,并存儲到數組a中,代碼略End SubPrivate Sub Command1_Click() Dim flag As Integer ′存儲變化段的狀態:1表示升,-1表示降,0表示平 Dim count As Integer ′存儲對稱波峰段的個數 Dim steps As Integer Dim i As Integer flag = 0: steps = 0: count = 0 For i = ______①______ To n If a(i) > a(i - 1) ThenIf IsSymPeak(flag, steps) Then count = count + 1If flag = 0 Or flag = -1 Then ________②________Else steps = steps + 1End Ifflag = 1 ElseIf a(i) = a(i - 1) ThenIf IsSymPeak(flag, steps) Then count = count + 1steps = 0flag = 0 Elsesteps = steps - 1flag = -1 End IfNext iIf IsSymPeak(flag, steps) Then count = count + 1Text1.Text = Str(count)End SubFunction IsSymPeak(flag As Integer, steps As Integer) As Boolean If ________③________ Then IsSymPeak = True Else IsSymPeak = False End IfEnd Function解析 本題主要考查的是學生對程序的綜合能力。本題的本質是區間問題,1個波峰可以看作是一個區間,如果此區間內的升序段和降序段數據個數相等,即為對稱波峰。(1)數組元素為“1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1”時,“1,4,3”、“7,9,3”、“3,4,7,9,6,3,1”為對稱波峰,因此共有3個;(2)根據語句“If a(i) > a(i - 1) Then”可知,當前i位置上的數據與它前面的數據進行比較,第一對比較的數據為a(2)與a(1),因此i的初值為2;自定義函數IsSymPeak的功能是判斷當前波峰是否為對稱波峰,若是則IsSymPeak=True,若不是則IsSymPeak=False。一個波峰為對稱波峰的條件是:一個波峰結束前處于下降狀態((a(i)>a(i-1)表示結束),step=-1表示下降狀態),且上升段和下降段數據相等(即step=0),因此③處代碼為flag = -1 And steps = 0;當 “a(i) > a(i - 1)”且“flag = 0 Or flag = -1”時(變化段的狀態為下降或持平),則表示一個波峰結束,即下一個波峰開始,因此steps = 1。答案 (1)3 (2)①2?、趕teps = 1?、踗lag = -1 And steps = 04.回收存儲空間。設在內存中經存放了A、B、C、D四個任務,其余的空間為可用的,如圖a所示。可用空間的信息如表一所示。用一維數組dz和Leng表示,其中dz(i)對應第i個可用空間的開始地址(左列數據),Leng(i)對應第i個可用空間的長度(右列數據)。現某個任務釋放一個區域,其開始地址為xdz,長度為xL,現要求將釋放區域加入到可用空間表中。要求在加入時,若與可用空間相鄰時,則必須進行合并,如圖b。合并方法如下:1)向下合并,即回收區域和下面可用空間相鄰。例如,xdz=80,xL=20,此時合并后的數據如表二中的(a)。2)向上合并,即回收區域和上面可用空間相鄰。例如,xdz=600,xL=50,此時合并后的數據如表二中的(b)。3)上下合并,即回收區域和上面、下面可用空間都相鄰。例如,xdz=150,xL=150,此時合并后的數據如表二中的(c)。4)不合并,即回收區域和上面、下面可用空間都不相鄰。例如,xdz=430,xL=20,此時增加釋放區域后的數據如表二中的(d)。小趙編寫了一個回收內存空間的VB程序,功能如下:窗體加載時,自動讀取每段可用空間的信息,每段可用空間的開始地址和長度分別存儲在數組元素dz(1)、dz(2)…和leng(1)、leng(2)…中,可用空間的段數存儲在變量n中,原可用空間信息顯示在列表框List1中。單擊“回收”按鈕Command1,程序對任務中釋放的區域進行回收處理,回收后的可用空間信息顯示在列表框List2中。程序運行界面如圖c所示。(1)如果釋放區域的開始地址為450,長度為50,則合并方法為________(填:向上合并/向下合并/上下合并/不合并)。(2)實現上述功能的VB程序如下。請在劃線處填入合適代碼。程序說明:對數組dz和leng預置2個標志,即頭和尾標志,如表一(b)所示。Dim dz(0 To 100) As Integer, leng(0 To 100) As IntegerPrivate Sub Form_Load()′讀取原可用空間信息,其中開始地址存儲在一維數組dz中,長度存儲在數組leng中′將原可用空間信息顯示在列表框List1中End SubPrivate Sub Command1_Click() Dim xdz As Integer, xcd As Integer, i As Integer, j As Integer, x As Integer List2.Clear xdz = Val(Text1.Text):xl = Val(Text2.Text) i = 1 n = 4 Do While dz(i) < xdzi = i + 1 Loop i = i - 1 If dz(i) + leng(i) = xdz ThenIf xdz + xl = dz(i + 1) Then ′第3種情況 leng(i) = ________①________ For j = i + 1 To n - 1 dz(j) = dz(j + 1): l(j) = leng(j + 1) Next j n = n - 1 Else ′第2種情況 leng(i) = leng(i) + xl End If ElseIf (xdz + xl) = dz(i + 1) Then ′第1種情況 dz(i + 1) = xdz leng(i + 1) = leng(i + 1) + xl Else ′第4種情況 For j = n To i + 1 Step -1 dz(j + 1) = dz(j):________②________ Next j ________③________ leng(i + 1) = xl n = n + 1 End If For i = 0 To n List2.AddItem Str(dz(i)) + Str(leng(i)) Next iEnd Sub解析 本題主要考查學生的算法綜合應用能力。(1)因為釋放區域的開始地址為450,長度為50,該區域釋放后將與下面的空閑區域相連(開始地址500,長度100),因此采用向下合并的方法;(2)①處代碼表示第3種情況,即上下合并,合并后的總長度為上面空閑區域長度+下面空閑區域長度+釋放區域長度,因此①處填入的代碼為leng(i) + leng(i + 1) + xl;②處代碼表示第4種情況,即不合并,處理辦法是先把后i+1個空閑區域的開始地址和長度后移一個位置,因此②處代碼為leng(j + 1) = leng(j),然后把釋放的區域信息存儲在第i+1個位置上,因此③處代碼為dz(i + 1) = xdz,表示存儲釋放區域的開始地址。答案 (1)向下合并 (2)①leng(i) + leng(i + 1) + xl?、趌eng(j + 1) = leng(j)?、踕z(i + 1) = xdz專項測試十 區間問題1.進入2016年7月以來,浙江省氣溫連續高溫,為了研究氣溫的變化情況,小明用VB編寫了一個最高氣溫連續運行天數的統計軟件。小明采集了杭州市7~8月的每日最高氣溫,并存放在ACCESS數據庫中。程序運行時,讀取日期和最高氣溫并顯示在列表框List1中,在文本框Text1中輸入溫度值,單擊統計按鈕Command1,程序自動統計運行在該溫度值以上的最長連續天數,并顯示在Text3中,同時在Text2中顯示日期區間,運行界面如圖所示。實現上述功能的VB代碼如下,在劃線處填入合適代碼。Dim rq(1 To 100) As String ′存放日期Dim qw(1 To 100) As Integer ′存放最高氣溫值Dim n As Integer ′總天數Private Sub Form_Load() ′讀取數據庫內容,其中日期數據存放在數組rq中,最高氣溫數據存放在qw中,并顯示在列表框List1中,代碼略End SubPrivate Sub Command1_Click() Dim ntempend As Integer ′記錄當前結束日期的下標 Dim max As Integer ′記錄最大連續天數 Dim nend As Integer ′記錄最大連續天數下的結束日期的下標 Dim ncount As Integer ′統計連續天數 Dim tjqw As Integer ′存放輸入的溫度 tjqw = Val(Text1.Text) ncount = 0 max = 0 For i = 1 To n If ______①______ Then ncount = ncount + 1 ntempend =i Else ncount = 0End IfIf max < ncount Then max = ncount ______②______End If Next i If max < > 0 Then Text2.Text = ____③____& “-” & rq(nend) Text3.Text = Str(max)End Sub2.小明編寫了一個有關合并區間的VB程序,功能如下:窗體加載時,獲取并存儲合并前的區間數據,并顯示在左邊的列表框中;單擊“合并區間”按鈕Command1,程序以區間左端點數值對區間進行升序排序,然后按相鄰區間的相交情況進行合并,最后將合并后的區間信息顯示在右邊的列表框中。程序運行界面如圖所示。(1)合并前區間為“[1,10],[5,15],[8,12],[16,30],[35,50]”,則合并后的區間為______________。(2)實現上述功能的VB程序如下,請在程序劃線處填入合適的代碼。Dim a(1 To 20) As Integer ′存儲區間左端點Dim b(1 To 20) As Integer ′存儲區間右端點Dim n As IntegerPrivate Sub Form_Load() ′獲取n個合并前區間數據 ′將區間左端點存入a數組,區間右端點存入b數組,并在列表框List1中顯示 ′代碼略End SubPrivate Sub Command1_Click() Dim i As Integer, j As Integer, left As Integer, right As Integer Dim k As Integer, temp1 As Integer, temp2 As Integer For i = 1 To n - 1k = iFor j = n To i + 1 Step -1 If ______①______ Then k = jNext jIf i < > k Then temp1 = a(k): a(k) = a(i): a(i) = temp1 temp2 = b(k): b(k) = b(i): b(i) = temp2End If Next i left = a(1) right = b(1) For i = 2 To n If a(i) <= right Then If ______②________ Then right = b(i) ElseList2.AddItem “[“ + Str(left) + ”,“ + Str(right) + ”]” left = a(i) ________③________ End If Next i List2.AddItem “[“ + Str(left) + ”,” + Str(right) + ”]”End Sub3.為分析數組a中各元素依次變化的情況,進行如下定義:?變化段:數組中相鄰兩個元素構成一個變化段。變化段有上升段(a(i)>a(i-1))、下降段(a(i)?波峰:從上升段轉到下降段形成一個波峰。波峰的起點是峰頂前所有連續上升段中的第1個,終點是峰頂后所有連續下降段中的最后1個。?對稱波峰:上升段與下降段個數相同的波峰稱為對稱波峰。下圖為一組數據的變化段及波峰示意圖。現要求統計數組a各元素依次變化過程中“對稱波峰”的個數。小李依據上述描述設計如下VB程序。請回答下列問題:(1)數組元素“1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1”依次變化過程中“對稱波峰”的個數為________。(2)請在劃線處填入合適的代碼。Const n = 20Dim a(1 To n) As IntegerPrivate Sub Form_Load() ′讀取數據,并存儲到數組a中,代碼略End SubPrivate Sub Command1_Click() Dim flag As Integer ′存儲變化段的狀態:1表示升,-1表示降,0表示平 Dim count As Integer ′存儲對稱波峰段的個數 Dim steps As Integer Dim i As Integer flag = 0: steps = 0: count = 0 For i = ______①______ To n If a(i) > a(i - 1) ThenIf IsSymPeak(flag, steps) Then count = count + 1If flag = 0 Or flag = -1 Then ________②________Else steps = steps + 1End Ifflag = 1 ElseIf a(i) = a(i - 1) ThenIf IsSymPeak(flag, steps) Then count = count + 1steps = 0flag = 0 Elsesteps = steps - 1flag = -1 End IfNext iIf IsSymPeak(flag, steps) Then count = count + 1Text1.Text = Str(count)End SubFunction IsSymPeak(flag As Integer, steps As Integer) As Boolean If ________③________ Then IsSymPeak = True Else IsSymPeak = False End IfEnd Function4.回收存儲空間。設在內存中經存放了A、B、C、D四個任務,其余的空間為可用的,如圖a所示。可用空間的信息如表一所示。用一維數組dz和Leng表示,其中dz(i)對應第i個可用空間的開始地址(左列數據),Leng(i)對應第i個可用空間的長度(右列數據)。現某個任務釋放一個區域,其開始地址為xdz,長度為xL,現要求將釋放區域加入到可用空間表中。要求在加入時,若與可用空間相鄰時,則必須進行合并,如圖b。合并方法如下:1)向下合并,即回收區域和下面可用空間相鄰。例如,xdz=80,xL=20,此時合并后的數據如表二中的(a)。2)向上合并,即回收區域和上面可用空間相鄰。例如,xdz=600,xL=50,此時合并后的數據如表二中的(b)。3)上下合并,即回收區域和上面、下面可用空間都相鄰。例如,xdz=150,xL=150,此時合并后的數據如表二中的(c)。4)不合并,即回收區域和上面、下面可用空間都不相鄰。例如,xdz=430,xL=20,此時增加釋放區域后的數據如表二中的(d)。小趙編寫了一個回收內存空間的VB程序,功能如下:窗體加載時,自動讀取每段可用空間的信息,每段可用空間的開始地址和長度分別存儲在數組元素dz(1)、dz(2)…和leng(1)、leng(2)…中,可用空間的段數存儲在變量n中,原可用空間信息顯示在列表框List1中。單擊“回收”按鈕Command1,程序對任務中釋放的區域進行回收處理,回收后的可用空間信息顯示在列表框List2中。程序運行界面如圖c所示。(1)如果釋放區域的開始地址為450,長度為50,則合并方法為________(填:向上合并/向下合并/上下合并/不合并)。(2)實現上述功能的VB程序如下。請在劃線處填入合適代碼。程序說明:對數組dz和leng預置2個標志,即頭和尾標志,如表一(b)所示。Dim dz(0 To 100) As Integer, leng(0 To 100) As IntegerPrivate Sub Form_Load()′讀取原可用空間信息,其中開始地址存儲在一維數組dz中,長度存儲在數組leng中′將原可用空間信息顯示在列表框List1中End SubPrivate Sub Command1_Click() Dim xdz As Integer, xcd As Integer, i As Integer, j As Integer, x As Integer List2.Clear xdz = Val(Text1.Text):xl = Val(Text2.Text) i = 1 n = 4 Do While dz(i) < xdzi = i + 1 Loop i = i - 1 If dz(i) + leng(i) = xdz ThenIf xdz + xl = dz(i + 1) Then ′第3種情況 leng(i) = ________①________ For j = i + 1 To n - 1 dz(j) = dz(j + 1): l(j) = leng(j + 1) Next j n = n - 1 Else ′第2種情況 leng(i) = leng(i) + xl End If ElseIf (xdz + xl) = dz(i + 1) Then ′第1種情況 dz(i + 1) = xdz leng(i + 1) = leng(i + 1) + xl Else ′第4種情況 For j = n To i + 1 Step -1 dz(j + 1) = dz(j):________②________ Next j ________③________ leng(i + 1) = xl n = n + 1 End If For i = 0 To n List2.AddItem Str(dz(i)) + Str(leng(i)) Next iEnd Sub 展開更多...... 收起↑ 資源列表 專項測試十 區間問題.doc 專項測試十 區間問題原卷版.doc 縮略圖、資源來源于二一教育資源庫