利用數(shù)組可以有效地存儲(chǔ)和處理成批數(shù)據(jù)本章主要內(nèi)容數(shù)組_第1頁
利用數(shù)組可以有效地存儲(chǔ)和處理成批數(shù)據(jù)本章主要內(nèi)容數(shù)組_第2頁
利用數(shù)組可以有效地存儲(chǔ)和處理成批數(shù)據(jù)本章主要內(nèi)容數(shù)組_第3頁
利用數(shù)組可以有效地存儲(chǔ)和處理成批數(shù)據(jù)本章主要內(nèi)容數(shù)組_第4頁
利用數(shù)組可以有效地存儲(chǔ)和處理成批數(shù)據(jù)本章主要內(nèi)容數(shù)組_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第6數(shù)組

利用數(shù)組可以有效地存儲(chǔ)和處理成批數(shù)據(jù)

本章主要內(nèi)容數(shù)組的概念數(shù)組的聲明和應(yīng)用動(dòng)態(tài)數(shù)組

ForEach...Next循環(huán)語句控件數(shù)組程序舉例

第6章數(shù)組

6.1.1數(shù)組與數(shù)組元素

簡(jiǎn)單變量用一個(gè)變量名標(biāo)識(shí),不同的變量使用不同的變量名表示。處理成批的數(shù)據(jù)時(shí),必須使用數(shù)組來處理表示100個(gè)學(xué)生的成績(jī),采用簡(jiǎn)單變量來表示:

s1,s2,s3,…s99,s100

采用數(shù)組來表示:t(0),t(1),t(2),…t(98),t(99)

t(k)(k=0,1,2,…99)為數(shù)組元素(或稱下標(biāo)變量),它表示第k個(gè)學(xué)生的成績(jī),k稱為下標(biāo)變量的下標(biāo)數(shù)組的一個(gè)主要特點(diǎn)是通過下標(biāo)(相當(dāng)于索引)來引用數(shù)組元素

6.1數(shù)組的概念

例如計(jì)算這100個(gè)學(xué)生成績(jī)的平均分,可用:

S=0

Fork=0To99

S=S+t(k)

‘累加分?jǐn)?shù)

Nextk

Aver=S/100

‘求平均分

數(shù)組是一組按一定順序排列的數(shù)據(jù)的集合

例如,學(xué)生成績(jī)T=[t(0),t(1),…t(99)]是一個(gè)數(shù)組

三元一次方程組的系數(shù)矩陣

a11a12a13

A=a21a22a23

a31a31a33

也是一個(gè)數(shù)組

數(shù)組名(不能與簡(jiǎn)單變量同名);數(shù)組類型

又稱有序的變量——下標(biāo)變量

默認(rèn)情況下,下標(biāo)從0開始,

optionbasen必須在定義數(shù)組前使用。

例如,由一行共5個(gè)元素組成的數(shù)組x,它的5個(gè)下標(biāo)變量為:

x(0)x(1)x(2)x(3)x(4)

由三行四列元素組成的數(shù)組y,它的12個(gè)下標(biāo)變量可表示為:

y(0,0)y(0,1)y(0,2)y(0,3)

y(1,0)y(1,1)y(1,2)y(1,3)

y(2,0)y(2,1)y(2,2)y(2,3)

下標(biāo)變量與簡(jiǎn)單變量具有基本相同的性質(zhì)和作用數(shù)組元素

下標(biāo)用來標(biāo)明該下標(biāo)變量在數(shù)組中的位置下標(biāo)可以是常數(shù)值,也可以是變量(包括下標(biāo)變量)或數(shù)值表達(dá)式

例如:若x(2)=10,k=2,則y(x(2))就是y(10),y(x(2)+k)就是y(12)

只要有規(guī)則地改變下標(biāo)值,就可以很方便地使下標(biāo)變量(如a(i))成為所需要的具體下標(biāo)變量

數(shù)組的維數(shù)6.1.2下標(biāo)和數(shù)組的維數(shù)6.2.1數(shù)組聲明語句

使用數(shù)組之前,一般需要定義數(shù)組,以便讓系統(tǒng)分配相應(yīng)的存儲(chǔ)單元。格式為:

Dim數(shù)組名([下界1to]上界1[,[下界2to]上界2…])[As數(shù)據(jù)類型]

功能:指定數(shù)組的維數(shù)、各維的上下界和數(shù)據(jù)類型

舉例:

dima%(10),b!(2t08),c#(15),b(3,4)asLongDimSum(10)AsLong‘下標(biāo)號(hào)從0~10,共11個(gè)元素

DimAry(1to20)AsInteger‘下標(biāo)號(hào)從1~20,共20個(gè)元素

Dimd(1to5,1to10)AsDouble‘定義二維數(shù)組

dimc(-2to2)asstring*20

還可以使用Public、Static、Private等語句來聲明數(shù)組

6.2數(shù)組的聲明和應(yīng)用數(shù)組下標(biāo)測(cè)試函數(shù)Ubound(數(shù)組名[,維])Lbound(數(shù)組名[,維])Dimy(1to12,5to20,-3to6)PrintLbound(y,1),Ubound(y,1)PrintLbound(y,2),Ubound(y,2)PrintLbound(y,3),Ubound(y,3)

設(shè)定下界的方法

OptionBase1‘設(shè)定下界為1

DimData(10)AsSingle‘下標(biāo)號(hào)從1~10

6.2.2Array函數(shù)

使用Array函數(shù)可以為數(shù)組元素賦值

示例

DimDAsVariant‘定義數(shù)組名(變體類型)

D=Array(1,2,3,4)

執(zhí)行結(jié)果:1→D(0),2→D(1),3→D(2),4→D(3)

數(shù)組刷新語句可以作用于動(dòng)態(tài)數(shù)組和靜態(tài)數(shù)組

格式:

Erase數(shù)組名[,數(shù)組名]…

功能:該語句用來清除靜態(tài)數(shù)組的內(nèi)容,或者釋放動(dòng)態(tài)數(shù)組占用的內(nèi)存空間例如:

DimArray1(20)AsIntegerDimArray2()AsSingle

ReDimArray2(9,10)……EraseArray1,Array2

對(duì)靜態(tài)數(shù)組,Erase語句將數(shù)組重新初始化;對(duì)動(dòng)態(tài)數(shù)組,Erase語句將釋放動(dòng)態(tài)數(shù)組所使用的內(nèi)存

6.3.2

數(shù)組刷新語句(Erase)Erase

數(shù)組名[,數(shù)組名],……重新對(duì)靜太數(shù)組進(jìn)行初始化,數(shù)值置0,字符為空字符串,而原數(shù)組存在。釋放動(dòng)態(tài)數(shù)組存儲(chǔ)空間,原有數(shù)組不再存在。變體數(shù)組,每個(gè)元素重新置為空。數(shù)組的引用和賦值:OptionBase1DimB1AsVariantB1=Array(89,96,81,67,79,90,63,85,95,83)

y=B1(3)C=B1(5)+B1(7)數(shù)組的引用下標(biāo)不能越界數(shù)組的賦值:使用循環(huán)語句:

dimk(10)Fork=0To10

t(k)=2*k+1

Nextk

Dimd(5)AsIntegerFori=1To5'輸入成績(jī)

d(i)=Val(InputBox("請(qǐng)輸入第"&Str(i)&_"個(gè)學(xué)生的成績(jī)","輸入成績(jī)"))

Nexti數(shù)組輸出Fori=1To5Printd(i);Nexti

與前面的循環(huán)語句For...Next類似,都是用來執(zhí)行指定重復(fù)次數(shù)的循環(huán)。但ForEach...Next語句專門作用于數(shù)組或?qū)ο蠹现械拿恳怀蓡T。語法格式:

ForEach成員In數(shù)組名

循環(huán)體

[ExitFor]

Next成員

“成員”是一個(gè)Variant變量,它實(shí)際上代表數(shù)組中每一個(gè)元素本語句可以對(duì)數(shù)組元素進(jìn)行讀取、查詢或顯示,它所重復(fù)執(zhí)行的次數(shù)由數(shù)組中元素的個(gè)數(shù)確定在不知道數(shù)組中元素的數(shù)目時(shí)非常有用

6.4

ForEach...Next循環(huán)語句PrivateSubForm_Load()Dima(1To10)AsLong,sumAsLong,tAsLongDimnAsIntegerShowt=1Forn=1To10t=t*na(n)=tNextnsum=0ForEachxInasum=sum+xNextxPrint"1!+2!+3!+……10!=";sumEndSub輸出結(jié)果:

1!+2!+3!+…+10!=4037913例6.6求1!+2!+…+10!的值

兩種形式的數(shù)組:靜態(tài)數(shù)組和動(dòng)態(tài)數(shù)組靜態(tài)數(shù)組是指數(shù)組元素的個(gè)數(shù)固定不變;動(dòng)態(tài)數(shù)組的元素個(gè)數(shù),在程序運(yùn)行時(shí)可以改變動(dòng)態(tài)數(shù)組可以在運(yùn)行過程中改變數(shù)組的大小,提高存儲(chǔ)區(qū)的使用效率

6.3.1建立動(dòng)態(tài)數(shù)組

建立動(dòng)態(tài)數(shù)組的步驟:

第一步:聲明一個(gè)沒有下標(biāo)(或稱空維數(shù))的數(shù)組為動(dòng)態(tài)數(shù)組第二步:在過程中用ReDim語句重新定義帶下標(biāo)的動(dòng)態(tài)數(shù)組

ReDim語句格式:

ReDim[Preserve]數(shù)組名([下界1T0]上界1[,[下界2T0]上界2…])[As數(shù)據(jù)類型]

功能:重新定義動(dòng)態(tài)數(shù)組,按定義的上下界重新分配存儲(chǔ)單元

6.3

動(dòng)態(tài)數(shù)組

聲明F為動(dòng)態(tài)數(shù)組的示例:

PrivateSubCommand1_Click()DimF()AsInteger‘聲明一個(gè)整型動(dòng)態(tài)數(shù)組

……

Size=20

ReDimF(Size)……EndSub

每次執(zhí)行ReDim時(shí),系統(tǒng)會(huì)清除指定數(shù)組的內(nèi)容

若采用:ReDimPreserveF(Size)

則能保留數(shù)組中原有的數(shù)據(jù)PrivateSubForm_Load()Dima()AsIntegerShow

ReDima(800)k=0Forx=200To600Step3IfxMod8=0Thenk=k+1a(k)=xEndIfNextx

ReDimPreservea(k)Fori=1TokPrinta(i)NextiEndSub例6.5

ReDim語句應(yīng)用示例

兩類數(shù)組:一般數(shù)組和控件數(shù)組

6.5.1控件數(shù)組的概念

控件數(shù)組是一組具有相同名稱、類型和事件過程的控件例如,Label1(0),Label1(1),Label1(2),……

但Label1,Label2,Label3,……不是控件數(shù)組控件數(shù)組具有以下特點(diǎn):

(1)相同的控件名稱(即Name屬性);

(2)控件數(shù)組中的控件具有相同的一般屬性;

(3)所有控件共用相同的事件過程。以下標(biāo)索引值(Index)來標(biāo)識(shí)各個(gè)控件,第一個(gè)下標(biāo)索引號(hào)為06.5控件數(shù)組6.5.2控件數(shù)組的建立建立控件數(shù)組有三種方法:

(1)給控件起相同的名稱

(2)將現(xiàn)有的控件復(fù)制并粘貼到窗體等上面

(3)將控件的Index屬性設(shè)置為非Null數(shù)值

6.5.3控件數(shù)組的使用

例6.7

按圖6.4設(shè)計(jì)窗體,其中一組(共5個(gè))單選按鈕構(gòu)成控件數(shù)組,要求當(dāng)單擊某個(gè)單選按鈕時(shí),能夠改變文本框中文字的大小控件數(shù)組設(shè)計(jì)步驟:

(1)設(shè)計(jì)控件數(shù)組Option1,其中包含5個(gè)單選按鈕對(duì)象

具體操作方法:

①畫出第一個(gè)單選按鈕控件,名稱采用默認(rèn)的Option1。此時(shí)該控件處于選定狀態(tài)。

②單擊工具欄上的“復(fù)制”按鈕(或按Ctrl+C)。③單擊工具欄上的“粘貼”按鈕(或按Ctrl+V),此時(shí)系統(tǒng)彈出一個(gè)如圖6.5所示的對(duì)話框單擊“是”,就建立一個(gè)控件數(shù)組元素,其Index屬性為1,而已畫出的第一個(gè)控件的Index屬性值為0。通過鼠標(biāo)拖放可以調(diào)整新控件的位置

④繼續(xù)單擊“粘貼”按鈕(或按Ctrl+V)和調(diào)整控件位置,可得到控件數(shù)組中的其他三個(gè)控件,其Index屬性值分別為2,3和4(即從上而下為0,1,2,3,4)

⑤設(shè)置控件數(shù)組各元素(從上而下)的Caption屬性分別為10,14,18,24和28

(2)建立一個(gè)文本框Text1,其Text屬性設(shè)置為“控件數(shù)組的使用”。再建立一個(gè)標(biāo)簽,其Caption屬性為“字號(hào)控制”

(3)編寫程序代碼PrivateSubForm_Load()Option1(0).Value=True'選定第一個(gè)單選按鈕

Text1.FontSize=10'設(shè)定文本框中的字號(hào)EndSubPrivateSubOption1_Click(IndexAsInteger)SelectCaseIndex'系統(tǒng)自動(dòng)返回Index值

Case0Text1.FontSize=10Case1Text1.FontSize=14Case2Text1.FontSize=18Case3Text1.FontSize=24Case4Text1.FontSize=28EndSelect

EndSub

例6.1

輸入某小組5個(gè)同學(xué)的成績(jī),計(jì)算總分和平均分(取小數(shù)后一位)

本例利用InputBox函數(shù)來輸入成績(jī),輸入完畢后經(jīng)過計(jì)算,再采用Print直接在窗體上輸出結(jié)果

6.2.3

數(shù)組的應(yīng)用

PrivateSubForm_Load()Dimd(5)AsIntegerDimiAsInteger,totalAsSingle,averageAsSingleShowFori=1To5'輸入成績(jī)

d(i)=Val(InputBox("請(qǐng)輸入第"&Str(i)&_"個(gè)學(xué)生的成績(jī)","輸入成績(jī)"))

Nextitotal=0Fori=1To5'計(jì)算總分和平均分

total=total+d(i)Nextiaverage=total/5Print"總分:"&totalPrint"平均分:"&Format(average,"##.0")EndSub

程序中,先通過Dim語句為數(shù)組d定義維數(shù)及下標(biāo)范圍,也即為數(shù)組安排一塊連續(xù)的內(nèi)存存儲(chǔ)區(qū),但這并不意味著內(nèi)存里該數(shù)組已建立了應(yīng)有的內(nèi)容本例中輸入數(shù)組中的數(shù)據(jù)是由InputBox函數(shù)來實(shí)現(xiàn)的,共循環(huán)了五次,輸入的五個(gè)數(shù)依次賦值給下標(biāo)變量d(1)~d(5)

建立了數(shù)組中的數(shù)據(jù)后,就可以按要求進(jìn)行處理

(1)創(chuàng)建應(yīng)用程序的用戶界面和設(shè)置對(duì)象屬性

例6.2

輸入10名學(xué)生的成績(jī),求出最高分和最低分功能要求:通過Array函數(shù)輸入10個(gè)分?jǐn)?shù);單擊“查找”按鈕(Command2)后,開始查找最高分和最低分,找到后顯示在標(biāo)簽Label1上

OptionBase1DimscoreAsVariantPrivateSubForm_Load()Label1.Caption="單擊“查找”按鈕開始查找最高分和最低分"

score=Array(89,96,81,67,79,90,63,85,95,83)

EndSub

(2)編寫程序代碼

PrivateSubCommand1_Click()DimmaxAsInteger,minAsIntegermax=score(1)'設(shè)定初值

min=score(1)Fori=2To10Ifmax<score(i)Then'找最高分

max=score(i)EndIfIfmin>score(i)Then'找最低分

min=score(i)EndIfNexti

'Chr(13)起換行作用

Label1.Caption="最高分:"+Str(max)+_Chr(13)+"最低分:"+Str(min)

EndSub例6.3分別計(jì)算5個(gè)學(xué)生和3門課的平均分

某學(xué)習(xí)小組有5名學(xué)生,成績(jī)?nèi)绫?.1所示

分析:用一個(gè)二維數(shù)組a(5,3)來描述。程序中設(shè)置兩重循環(huán),用以實(shí)現(xiàn)每行和每列上的累加。本例采用賦值語句來輸入學(xué)生成績(jī),并采用Print直接在窗體上輸出結(jié)果

r=1c=1,2,3r=2c=1,2,3r=3c=1,2,3r=4c=1,2,3r=5c=1,2,3求5個(gè)學(xué)生的平均分

下標(biāo)使用情況

OptionBase1PrivateSubForm_Load()Dima(5,3)AsIntegerDimrAsInteger,cAsInteger,sAsIntegerk=Array("數(shù)學(xué)","英語","計(jì)算機(jī)")'輸入課程名

a(1,1)=69:a(1,2)=89:a(1,3)=74'輸入學(xué)生成績(jī)

a(2,1)=94:a(2,2)=80:a(2,3)=90a(3,1)=57:a(3,2)=62:a(3,3)=73a(4,1)=98:a(4,2)=94:a(4,3)=90a(5,1)=73:a(5,2)=76:a(5,3)=63例6.3

ShowPrint"學(xué)生","平均分“

'輸出20個(gè)減號(hào)“-”

PrintString(20,"-")Forr=1To5s=0'累加前清0

Forc=1To3

'累加同一行數(shù)據(jù)

s=s+a(r,c)NextcPrintr,Format(s/3,"##.0")NextrPrint

Print"課程","平均分"

PrintString(20,"-")Forc=1To3s=0Forr=1To5

'累加同一列數(shù)據(jù)

s=s+a(r,c)NextrPrintk(c),Format(s/5,"##.0")NextcEndSub

程序運(yùn)行結(jié)果

解題方法:

(1)利用Int(91*Rnd+10)產(chǎn)生值為10到100的隨機(jī)整數(shù)

使用Randomize得到不同的隨機(jī)數(shù)序列

(2)按值從小到大進(jìn)行排序。排序方法:

將10個(gè)數(shù)放入數(shù)組a中,對(duì)下列下標(biāo)變量進(jìn)行排序處理:

a(1),a(2),a(3),…,a(10)

①?gòu)倪@10個(gè)下標(biāo)變量中,選出最小值,通過交換把該值存入a(1)中②除a(1)之外(a(1)已存放最小值),從其余9個(gè)下標(biāo)變量中選出最小值(即10個(gè)數(shù)中的次小值),通過交換把該值存入a(2)中

③選出a(3)~a(10)中的最小值,通過交換,把該值存入a(3)中

④重復(fù)上述處理,至a(8),可使a(1)~a(8)按小到大排列

⑤第9次處理,選出a(9)及a(10)中的最小值,通過交換把該值存入a(9)中,此時(shí)a(10)存放的就是最大值

例6.4

隨機(jī)產(chǎn)生十個(gè)10~100的整數(shù),用“選擇排序法”按值從小到大順序排序,最后輸出結(jié)果排列要求

小大示例:

a(1)a(2)a(3)a(4)

906465591.a(1)與a(2)~a(4)比較,選出最小值,結(jié)果

599065642.a(2)與a(3)~a(4)比較,選出次小值,結(jié)果

596490653.a(3)與a(4)比較,選出較小值,結(jié)果

59646590

i=1j=2,3,4i=2j=3,4i=3j=4Fori=1to3Forj=i+1to4……NextjNexti程序結(jié)構(gòu)完成上述比較及排序處理過程,可以采用兩重循環(huán)結(jié)構(gòu),外循環(huán)的循環(huán)變量i從1到9,共循環(huán)九次;內(nèi)循環(huán)的循環(huán)變量j從i+1到10。

本例采用默認(rèn)的用戶界面,所需數(shù)據(jù)由隨機(jī)函數(shù)產(chǎn)生,處理后結(jié)果信息通過Print方法直接輸出在窗體上。

PrivateSubForm_Load()ShowRandomizeDima(1To10)AsIntegerPrint"原始數(shù)據(jù):"

Fori=1To10'產(chǎn)生10個(gè)隨機(jī)數(shù)

a(i)=Int(91*Rnd+10)Printa(i);Nexti

(3)程序結(jié)構(gòu)

Print:PrintFori=1To9Forj=i+1To10Ifa(i)>a(j)Thent=a(i):a(i)=a(j):a(j)=t'交換位置

EndIfNextjNextiPrint"排序結(jié)果:"

Fori=1To10Printa(i);NextiEndSub

改寫中間程序段“Fori=1To9”~“Nexti”(共7個(gè)程序行)

Fori=1To9k=i‘k用來記錄每次選擇的最小值的下標(biāo)

Forj=i+1To10Ifa(k)>a(j)Thenk=jEndIfNextjt=a(k):a(k)=a(i):a(i)=t'交換位置

Nexti

變量k記錄每一次選出的最小值的下標(biāo),在本次比較結(jié)束后,使a(i)與a(k)一次換位即可

6.6

程序舉例

例6.8查找考場(chǎng)教室號(hào)

某課程統(tǒng)考憑準(zhǔn)考證入場(chǎng),考場(chǎng)教室安排如表6.2。編制程序,查找準(zhǔn)考證號(hào)碼所對(duì)應(yīng)的教室號(hào)碼

(1)分析:為便于查找,通過二維數(shù)組rm建立這兩種號(hào)碼對(duì)照表。數(shù)組rm由Form_Load事件過程來建立,它的每一行存放了一個(gè)教室資料(包含準(zhǔn)考證號(hào)碼范圍和教室號(hào)碼)。當(dāng)判斷到某個(gè)給定準(zhǔn)考證號(hào)碼落在某一行的準(zhǔn)考證號(hào)碼范圍內(nèi)時(shí),則該行中的教室號(hào)碼為所求

(2)創(chuàng)建應(yīng)用程序的用戶界面和設(shè)置對(duì)象屬性

(3)編寫程序代碼

功能要求:用戶在文本框Text1中輸入準(zhǔn)考證號(hào)碼,單擊“查找”按鈕(Command1)后,則查找出對(duì)應(yīng)的教室,并將教室號(hào)碼輸出在文本框Text2中

Dimrm(6,3)AsIntegerPrivateSubForm_Load()

‘輸入數(shù)組數(shù)據(jù)

rm(1,1)=2101:rm(1,2)=2147:rm(1,3)=102rm(2,1)=1741:rm(2,2)=1802:rm(2,3)=103rm(3,1)=1201:rm(3,2)=1287:rm(3,3)=114rm(4,1)=3333:rm(4,2)=3387:rm(4,3)=209rm(5,1)=1803:rm(5,2)=1829:rm(5,3)=305rm(6,1)=2511:rm(6,2)=2576:rm(6,3)=306

EndSub

PrivateSubCommand1_Click()DimnoAsInteger,flagAsIntegerflag=0'查找標(biāo)記,0表示未找到

no=Val(Text1.Text)Fori=1To6Ifno>=rm(i,1)Andno<=rm(i,2)ThenText2.Text=rm(i,3)'顯示教室號(hào)碼

flag=1'1表示找到

ExitForEndIfNextiIfflag=0ThenText2.Text="無此準(zhǔn)考證號(hào)碼"

EndIfText1.SetFocus‘設(shè)置焦點(diǎn)

EndSub

某學(xué)習(xí)小組10名學(xué)生的成績(jī)情況如表6.3所示,現(xiàn)要求采用折半查找法,通過學(xué)號(hào)查詢學(xué)生成績(jī)

(1)分析:折半查找法也稱對(duì)半查找法,是一種效率較高的查找方法。對(duì)于大型數(shù)組,它的查找速度比順序查找法(例6.8采用的是順序查找法)快得多在采用折半查找法之前,要求將數(shù)組按查找關(guān)鍵字(如本例的學(xué)號(hào))排好序(從大到小或小到大)例6.9

采用折半查找法查詢學(xué)生成績(jī)

·先從數(shù)組中間開始比較,判別中間的那個(gè)元素是不是要找的數(shù)據(jù):

是,則查找成功否,若被查找的數(shù)據(jù)是在該數(shù)組的上半部,則從上半部的中間繼續(xù)查找,否則從下半部的中間繼續(xù)查找

·照此進(jìn)行下去,不斷縮小查找范圍

·至最后,因找到或找不到而停止查找

對(duì)于n個(gè)數(shù)據(jù),若用變量Top、Bott分別表示每次“折半”的首位置和末位置,則中間位置M為

M=Int((Top+Bott)/2)這樣就將[Top,Bott]分成兩段,即[Top,M-1]和[M+1,Bott],

若要找的數(shù)據(jù)小于由M指示的數(shù)據(jù),則該數(shù)據(jù)在[Top,M-1]范圍內(nèi),反之,則在[M+1,Bott]范圍內(nèi)

折半查找法的過程

折半查找法的過程學(xué)號(hào)h()1201120212031205120612071209121012111215先排好序數(shù)學(xué)d(x,1)語文d(x,2)9286787183746775715562809883998057678078m=Int((Top+Bott)/2)要找的學(xué)號(hào)Noh(m)=m為所求m<

Bott=m-1>Top=m+1

Top=1Bott=10

(2)創(chuàng)建應(yīng)用程序的用戶界面和設(shè)置對(duì)象屬性

(3)編寫程序代碼

Dimh(10)AsInteger,d(10,2)AsInteger

PrivateSubForm_Load()

'學(xué)號(hào)存放在數(shù)組h()中

h(1)=1201:h(2)=1202:h(3)=1203h(4)=1205:h(5)=1206:h(6)=1207h(7)=1209:h(8)=1210:h(9)=1211:h(10)=1215'成績(jī)存放在數(shù)組d(,)中

d(1,1)=92:d(1,2)=86d(2,1)=78:d(2,2)=71d(3,1)=83:d(3,2)=74d(4,1)=67:d(4,2)=75d(5,1)=71:d(5,2)=55d(6,1)=62:d(6,2)=80d(7,1)=98:d(7,2)=83d(8,1)=99:d(8,2)=80d(9,1)=57:d(9,2)=67d(10,1)=80:d(10,2)=78

EndSub

PrivateSubCommand1_Click()DimnoAsInteger,flagAsIntegerDimmAsInteger,topAsInteger,bottAsIntegerflag=-1'置未找到標(biāo)志

top=1:bott=10'設(shè)定范圍

no=Val(Text1.Text)'取學(xué)號(hào)

Ifno<h(top)Orno>h(bott)Thenflag=-2'若超出學(xué)號(hào)范圍,置特殊標(biāo)志-2

EndIf

DoWhileflag=-1Andtop<=bott

m=(top+bott)/2'取中點(diǎn)

SelectCaseTrueCaseno=h(m)'找到

flag=m'置找到標(biāo)志

Text2.Text=h(m)Text3.Text=d(m,1)Text4.Text=d(m,2)Text5.Text=(d(m,1)+d(m,2))/2Caseno<h(m)'小于中間數(shù)據(jù)

bott=m-1'上半部

Caseno>h(m)'大于中間數(shù)據(jù)

top=m+1'下半部

EndSelectLoop

Ifflag<0Then'判是否找不到

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論