構(gòu)造結(jié)構(gòu)類(lèi)型數(shù)組列表框_第1頁(yè)
構(gòu)造結(jié)構(gòu)類(lèi)型數(shù)組列表框_第2頁(yè)
構(gòu)造結(jié)構(gòu)類(lèi)型數(shù)組列表框_第3頁(yè)
構(gòu)造結(jié)構(gòu)類(lèi)型數(shù)組列表框_第4頁(yè)
構(gòu)造結(jié)構(gòu)類(lèi)型數(shù)組列表框_第5頁(yè)
已閱讀5頁(yè),還剩96頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、大學(xué)計(jì)算機(jī)基礎(chǔ)教程taiyuan university of technology第第7章章 使用數(shù)組使用數(shù)組visual basic 程序設(shè)計(jì)教程程序設(shè)計(jì)教程visual basic程序設(shè)計(jì)教程2本章介紹:本章介紹:構(gòu)造結(jié)構(gòu)類(lèi)型構(gòu)造結(jié)構(gòu)類(lèi)型數(shù)組數(shù)組列表框列表框組合框組合框一些典型算法一些典型算法visual basic程序設(shè)計(jì)教程3數(shù)組(數(shù)組(arrary)是構(gòu)造的一種新的數(shù)據(jù)表達(dá)。)是構(gòu)造的一種新的數(shù)據(jù)表達(dá)。數(shù)組是一組具有數(shù)組是一組具有的數(shù)據(jù)(叫做的數(shù)據(jù)(叫做數(shù)組元素)的連續(xù)存儲(chǔ)單元。數(shù)組元素)的連續(xù)存儲(chǔ)單元。數(shù)組中包含了一個(gè)或多個(gè)元素?cái)?shù)組中包含了一個(gè)或多個(gè)元素下標(biāo)給出了數(shù)組中元素的順序下

2、標(biāo)給出了數(shù)組中元素的順序數(shù)組和循環(huán)結(jié)構(gòu)配合,使數(shù)據(jù)處理變得容易。數(shù)組和循環(huán)結(jié)構(gòu)配合,使數(shù)據(jù)處理變得容易。visual basic程序設(shè)計(jì)教程4【例【例7-1】設(shè)計(jì)程序,如圖。對(duì)一批馬拉松運(yùn)動(dòng)員按】設(shè)計(jì)程序,如圖。對(duì)一批馬拉松運(yùn)動(dòng)員按成績(jī)(單位:小時(shí))排名次。成績(jī)(單位:小時(shí))排名次。控件:控件:2個(gè)標(biāo)簽個(gè)標(biāo)簽2個(gè)列表框個(gè)列表框1個(gè)命令按鈕個(gè)命令按鈕visual basic程序設(shè)計(jì)教程5“輸入數(shù)據(jù)并排名輸入數(shù)據(jù)并排名”按鈕作用:按鈕作用:輸入運(yùn)行員人數(shù)輸入運(yùn)行員人數(shù)輸入各運(yùn)動(dòng)員的姓名和成績(jī)輸入各運(yùn)動(dòng)員的姓名和成績(jī)左列表框放排序前的數(shù)據(jù)左列表框放排序前的數(shù)據(jù)右列表框放排序后的名次數(shù)據(jù)。右列表框放排

3、序后的名次數(shù)據(jù)。事件:事件:主要是主要是command1的的click事件事件visual basic程序設(shè)計(jì)教程6排序又稱(chēng)分類(lèi)。有多種方法:選擇分類(lèi)法、冒泡分類(lèi)排序又稱(chēng)分類(lèi)。有多種方法:選擇分類(lèi)法、冒泡分類(lèi)法等法等。對(duì)對(duì)n個(gè)數(shù)個(gè)數(shù)a(1)a(n),采用選擇分類(lèi)法的算法是:,采用選擇分類(lèi)法的算法是:先在先在n個(gè)數(shù)中選最小數(shù),放在第個(gè)數(shù)中選最小數(shù),放在第1個(gè)數(shù)組元素中。個(gè)數(shù)組元素中。取第取第1個(gè)數(shù),與后面?zhèn)€數(shù),與后面n-1(即(即2到到n)個(gè)數(shù)逐個(gè)比較。)個(gè)數(shù)逐個(gè)比較。若第若第1個(gè)數(shù)大,則個(gè)數(shù)大,則a(1)與參與比較的元素中的值與參與比較的元素中的值進(jìn)行互換進(jìn)行互換再將互換后的第再將互換后的第1

4、個(gè)數(shù)與剩下的數(shù)據(jù)比較,直到個(gè)數(shù)與剩下的數(shù)據(jù)比較,直到最后。最后。visual basic程序設(shè)計(jì)教程7再在第再在第2至至n個(gè)元素中,選最小數(shù),放在第個(gè)元素中,選最小數(shù),放在第2個(gè)數(shù)組個(gè)數(shù)組元素中。元素中。取第取第2個(gè)數(shù),與后面?zhèn)€數(shù),與后面n-2(即(即3到到n)個(gè)數(shù)逐個(gè)比)個(gè)數(shù)逐個(gè)比較。較。若第若第2個(gè)數(shù)大,則與數(shù)組元素中的值進(jìn)行互個(gè)數(shù)大,則與數(shù)組元素中的值進(jìn)行互換,換,直到最后。,直到最后。重復(fù)以上步驟,直至在最后兩個(gè)數(shù)中選取最小數(shù),重復(fù)以上步驟,直至在最后兩個(gè)數(shù)中選取最小數(shù),放在第放在第n-1個(gè)數(shù)組元素中。個(gè)數(shù)組元素中。visual basic程序設(shè)計(jì)教程8最后第最后第n個(gè)元素已是最大數(shù)了

5、。個(gè)元素已是最大數(shù)了。在第在第i至至n個(gè)元素中,選最小數(shù)并放入個(gè)元素中,選最小數(shù)并放入a(i) 的程序是:的程序是: for j = i + 1 to n將將a(i)與與a(i+1)a(n)逐一逐一比較比較 if a(i) a(j) then temp = a(i) : a(i) = a(j) : a(j) = temp 互換互換 next j然后再將然后再將i從從1循環(huán)到循環(huán)到n-1,就可構(gòu)成分類(lèi)(排序),就可構(gòu)成分類(lèi)(排序)程序段。程序段。visual basic程序設(shè)計(jì)教程9 private sub command1_click()dim name1() as string, score

6、() as single 動(dòng)態(tài)數(shù)組聲明動(dòng)態(tài)數(shù)組聲明dim tempname as string, tempscore as singledim n as integer, i as integer, j as integern = val(inputbox(“請(qǐng)輸入運(yùn)動(dòng)員人數(shù)請(qǐng)輸入運(yùn)動(dòng)員人數(shù)”, “輸入輸入”)redim name1(n), score(n) 根據(jù)人數(shù)動(dòng)態(tài)定義數(shù)組的大小根據(jù)人數(shù)動(dòng)態(tài)定義數(shù)組的大小list1.clear: list2.clear 清除兩個(gè)列表框中數(shù)據(jù)清除兩個(gè)列表框中數(shù)據(jù)for i = 1 to n 輸入姓名和成績(jī)輸入姓名和成績(jī),放入左列表框放入左列表框 name1

7、(i) = inputbox(請(qǐng)輸入第請(qǐng)輸入第 & i & 位運(yùn)動(dòng)員姓名位運(yùn)動(dòng)員姓名, 姓名姓名) score(i) = val(inputbox(請(qǐng)輸入第請(qǐng)輸入第 & i & 位運(yùn)動(dòng)員成績(jī)位運(yùn)動(dòng)員成績(jī), 成績(jī)成績(jī)) list1.additem name1(i) & & score(i), 0 next ivisual basic程序設(shè)計(jì)教程10for i = 1 to n - 1 開(kāi)始按成績(jī)從小到大排序開(kāi)始按成績(jī)從小到大排序 for j = i + 1 to n if score(i) score(j) then 同時(shí)交換姓名和成績(jī)同時(shí)交換姓名

8、和成績(jī) tempname = name1(i): name1(i) = name1(j): name1(j) = tempname tempscore = score(i): score(i) = score(j): score(j) = tempscore end if next jnext ifor i = 1 to n 將排序后數(shù)據(jù)及名次放入右列表框?qū)⑴判蚝髷?shù)據(jù)及名次放入右列表框 list2.additem i & & name1(i) & & score(i) next iend subvisual basic程序設(shè)計(jì)教程117.3.1 如何聲明一維數(shù)組

9、如何聲明一維數(shù)組只有一個(gè)下標(biāo)的數(shù)組,稱(chēng)為一維數(shù)組。只有一個(gè)下標(biāo)的數(shù)組,稱(chēng)為一維數(shù)組。使用使用n(1n16)個(gè)下標(biāo)的數(shù)組,稱(chēng)為維數(shù)組。)個(gè)下標(biāo)的數(shù)組,稱(chēng)為維數(shù)組。數(shù)組在使用前必須先聲明。格式:數(shù)組在使用前必須先聲明。格式:dim 數(shù)組名數(shù)組名(下標(biāo)說(shuō)明下標(biāo)說(shuō)明) as類(lèi)型名類(lèi)型名 ,數(shù)組名數(shù)組名(下下標(biāo)說(shuō)明標(biāo)說(shuō)明) as數(shù)據(jù)名數(shù)據(jù)名 visual basic程序設(shè)計(jì)教程12說(shuō)明:說(shuō)明:數(shù)組名的命名方式與變量名一樣,但不能和簡(jiǎn)單數(shù)組名的命名方式與變量名一樣,但不能和簡(jiǎn)單變量名重名。變量名重名。下標(biāo)說(shuō)明又稱(chēng)維定義符,定義了這個(gè)維的大小。下標(biāo)說(shuō)明又稱(chēng)維定義符,定義了這個(gè)維的大小。它有兩種表示形式:它有

10、兩種表示形式:上界上界下界下界 to 上界上界下界和上界必須使用數(shù)值型常量表達(dá)式下界和上界必須使用數(shù)值型常量表達(dá)式下界和上界表示數(shù)組元素的下標(biāo)的范圍下界和上界表示數(shù)組元素的下標(biāo)的范圍visual basic程序設(shè)計(jì)教程13在缺省狀態(tài)下,起始下標(biāo)(下界值)為在缺省狀態(tài)下,起始下標(biāo)(下界值)為0dim a(50),表示數(shù)組,表示數(shù)組a有有51個(gè)元素,即個(gè)元素,即a(0)、a(1)、a(50)。dim b(4 to 6),表示數(shù)組,表示數(shù)組b有有3個(gè)元素,即為個(gè)元素,即為b(4)、b(5)和和b(6)。缺省下界值可用缺省下界值可用option base語(yǔ)句重新設(shè)置,格式:語(yǔ)句重新設(shè)置,格式: opt

11、ion base 0|1option base 1,表示將,表示將下界缺省值設(shè)置下界缺省值設(shè)置為為1。visual basic程序設(shè)計(jì)教程14類(lèi)型名與變量聲明時(shí)使用的一樣,表示被聲明的類(lèi)型名與變量聲明時(shí)使用的一樣,表示被聲明的這個(gè)數(shù)組的每一個(gè)元素都具有這種類(lèi)型。這個(gè)數(shù)組的每一個(gè)元素都具有這種類(lèi)型。省略類(lèi)型名,則表示為省略類(lèi)型名,則表示為variant類(lèi)型。類(lèi)型。例如,要聲明兩個(gè)包含例如,要聲明兩個(gè)包含50個(gè)元素的數(shù)組,一個(gè)存?zhèn)€元素的數(shù)組,一個(gè)存放姓名,為字符串型,一個(gè)存放年齡,為整型,放姓名,為字符串型,一個(gè)存放年齡,為整型,則聲明語(yǔ)句為:則聲明語(yǔ)句為: dim name1(50) as st

12、ring, age(50) as integer一般情況下,它們實(shí)際各包含元素一般情況下,它們實(shí)際各包含元素51個(gè)。個(gè)。visual basic程序設(shè)計(jì)教程157.3.2 使用一維數(shù)組使用一維數(shù)組使用數(shù)組包括:元素的引用、初始化及輸入輸出。使用數(shù)組包括:元素的引用、初始化及輸入輸出。1引用數(shù)組元素引用數(shù)組元素引用格式為:引用格式為: 數(shù)組名數(shù)組名(下標(biāo)下標(biāo))數(shù)組名應(yīng)與聲明時(shí)的數(shù)組名相同數(shù)組名應(yīng)與聲明時(shí)的數(shù)組名相同下標(biāo)必須用括號(hào)括起來(lái),不能把下標(biāo)必須用括號(hào)括起來(lái),不能把score(1)寫(xiě)成寫(xiě)成score1。下標(biāo)應(yīng)為數(shù)值型的表達(dá)式,允許出現(xiàn)變量下標(biāo)應(yīng)為數(shù)值型的表達(dá)式,允許出現(xiàn)變量下標(biāo)值應(yīng)在下界和上

13、界之間,否則出錯(cuò)。下標(biāo)值應(yīng)在下界和上界之間,否則出錯(cuò)。如,可用:如,可用:a(2)、a(i)、a(k*2)等訪問(wèn)元素,只等訪問(wèn)元素,只要下標(biāo)不越界要下標(biāo)不越界visual basic程序設(shè)計(jì)教程162給數(shù)組元素賦值給數(shù)組元素賦值數(shù)組元素的用法,與簡(jiǎn)單變量用法一樣數(shù)組元素的用法,與簡(jiǎn)單變量用法一樣凡是可用簡(jiǎn)單變量的地方,都可用同一類(lèi)型的凡是可用簡(jiǎn)單變量的地方,都可用同一類(lèi)型的數(shù)組元素?cái)?shù)組元素 a(k*2)=k*100 : s(i)=浙江大學(xué)浙江大學(xué) & 計(jì)算計(jì)算機(jī)學(xué)院機(jī)學(xué)院for i=1 to 50 a(i) = inext ivisual basic程序設(shè)計(jì)教程173運(yùn)行時(shí)通過(guò)輸入賦值

14、運(yùn)行時(shí)通過(guò)輸入賦值通過(guò)文本框:通過(guò)文本框: s(5)=text1.text通過(guò)輸入對(duì)話(huà)框?qū)σ慌鷶?shù)組元素賦值通過(guò)輸入對(duì)話(huà)框?qū)σ慌鷶?shù)組元素賦值for i=1 to 50 a(i) = val(inputbox(請(qǐng)輸入數(shù)據(jù)請(qǐng)輸入數(shù)據(jù))next ivisual basic程序設(shè)計(jì)教程184使用使用array函數(shù)對(duì)數(shù)組所有元素賦初值函數(shù)對(duì)數(shù)組所有元素賦初值array函數(shù)的使用格式是:函數(shù)的使用格式是: array(表達(dá)式表表達(dá)式表)表達(dá)式表中各表達(dá)式用逗號(hào)間隔表達(dá)式表中各表達(dá)式用逗號(hào)間隔array函數(shù)返回含有數(shù)組的函數(shù)返回含有數(shù)組的variant類(lèi)型。類(lèi)型。使用使用array函數(shù)前,必須先將數(shù)組名定義為

15、函數(shù)前,必須先將數(shù)組名定義為variant類(lèi)型。類(lèi)型。dim c, b as integer, i as integer 相當(dāng)于相當(dāng)于dim c as variant,.b = 100c = array(3, 4 + b, 5)for i = 0 to 2: print c(i),: nextarray函數(shù)根據(jù)表達(dá)式個(gè)數(shù),確定數(shù)組的元素個(gè)數(shù)函數(shù)根據(jù)表達(dá)式個(gè)數(shù),確定數(shù)組的元素個(gè)數(shù)visual basic程序設(shè)計(jì)教程195ubound函數(shù)和函數(shù)和lbound函數(shù)函數(shù)這兩個(gè)函數(shù)的作用是獲得數(shù)組上界和下界這兩個(gè)函數(shù)的作用是獲得數(shù)組上界和下界對(duì)于一維數(shù)組,它們的基本格式為:對(duì)于一維數(shù)組,它們的基本格式為

16、: ubound(數(shù)組名數(shù)組名) 和和 lbound(數(shù)組名數(shù)組名) for i = lbound(c) to ubound(c): print c(i),: nextvisual basic程序設(shè)計(jì)教程206輸出一維數(shù)組輸出一維數(shù)組輸出個(gè)別元素,直接使用如輸出個(gè)別元素,直接使用如print a(5)的句子的句子輸出一批數(shù)組元素,往往使用循環(huán):輸出一批數(shù)組元素,往往使用循環(huán):for i = 1 to 50 print a(i), if i mod 5 = 0 then print 換行換行next i7訪問(wèn)數(shù)組訪問(wèn)數(shù)組訪問(wèn)數(shù)組中各元素一般采用循環(huán)。訪問(wèn)數(shù)組中各元素一般采用循環(huán)。visual b

17、asic程序設(shè)計(jì)教程21【例【例7-2】輸入】輸入30位同學(xué)的編號(hào)和成績(jī),求他們的平位同學(xué)的編號(hào)和成績(jī),求他們的平均成績(jī),并輸出高于平均分的同學(xué)編號(hào)和成績(jī),以均成績(jī),并輸出高于平均分的同學(xué)編號(hào)和成績(jī),以及這些同學(xué)的人數(shù)。及這些同學(xué)的人數(shù)。程序思路:程序思路:第一步,聲明兩個(gè)大小至少為第一步,聲明兩個(gè)大小至少為30的一維數(shù)組的一維數(shù)組id和和score,使,使id(i)和和score(i)表示第表示第i位同學(xué)的編位同學(xué)的編號(hào)和成績(jī);號(hào)和成績(jī);visual basic程序設(shè)計(jì)教程22第二步,輸入第二步,輸入30位同學(xué)的編號(hào)和成績(jī);位同學(xué)的編號(hào)和成績(jī);第三步,計(jì)算平均成績(jī);第三步,計(jì)算平均成績(jī);第四

18、步,將每位同學(xué)的成績(jī)與平均成績(jī)比較,發(fā)第四步,將每位同學(xué)的成績(jī)與平均成績(jī)比較,發(fā)現(xiàn)大于或等于平均成績(jī)的輸出編號(hào)和成績(jī),并現(xiàn)大于或等于平均成績(jī)的輸出編號(hào)和成績(jī),并計(jì)數(shù);計(jì)數(shù);第五步,輸出統(tǒng)計(jì)人數(shù)。第五步,輸出統(tǒng)計(jì)人數(shù)。visual basic程序設(shè)計(jì)教程237.3.2 使用一維數(shù)組使用一維數(shù)組- -【例【例7-27-2】 private sub command1_click()dim id(30) as long, score(30) as integer, i as integerdim average as single, count as integerfor i = 1 to 20 開(kāi)始

19、輸入開(kāi)始輸入 id(i) = val(inputbox(請(qǐng)輸入第請(qǐng)輸入第 & i & 位編號(hào)位編號(hào):, ) score(i) = val(inputbox(請(qǐng)輸入第請(qǐng)輸入第 & i & 位成績(jī)位成績(jī):, )next iaverage = 0 開(kāi)始計(jì)算平均分開(kāi)始計(jì)算平均分for i = 1 to 30 average = average + score(i)next i輸入數(shù)據(jù)和計(jì)算平均分可同時(shí)進(jìn)行。這樣可以去掉一次并列的循環(huán)。visual basic程序設(shè)計(jì)教程24average = average / 30print 平均分平均分= ; averagecoun

20、t = 0 開(kāi)始計(jì)數(shù),并輸出高于平均分的數(shù)開(kāi)始計(jì)數(shù),并輸出高于平均分的數(shù)據(jù)據(jù)for i = 1 to 30 if score(i) average then print id(i); score(i), count = count + 1 : if count mod 5 = 0 then print 每行顯示每行顯示5人人 end ifnext iprint: print 人數(shù)人數(shù)=; count 輸出人數(shù)輸出人數(shù)end subvisual basic程序設(shè)計(jì)教程257.3.2 使用一維數(shù)組使用一維數(shù)組【例【例7-3】編程:按編號(hào)順序輸入】編程:按編號(hào)順序輸入10位同學(xué)的編號(hào)和姓名,位同學(xué)的

21、編號(hào)和姓名,現(xiàn)班上又增一位同學(xué),要求他的編號(hào)現(xiàn)班上又增一位同學(xué),要求他的編號(hào)id1和姓名和姓名name1仍按編號(hào)順序插入到數(shù)組仍按編號(hào)順序插入到數(shù)組id和和named中。中。該題主要解決兩個(gè)問(wèn)題:該題主要解決兩個(gè)問(wèn)題:一個(gè)是如何找到合適的位置一個(gè)是如何找到合適的位置可以利用循環(huán),與數(shù)組元素逐個(gè)比較可以利用循環(huán),與數(shù)組元素逐個(gè)比較若發(fā)現(xiàn)一個(gè)比若發(fā)現(xiàn)一個(gè)比id1大的編號(hào)大的編號(hào)id(i)就停止比較,則插入就停止比較,則插入位置就在位置就在id(i)之前。若沒(méi)有一個(gè)編號(hào)比之前。若沒(méi)有一個(gè)編號(hào)比id1大的,大的,則插到數(shù)組最后。則插到數(shù)組最后。visual basic程序設(shè)計(jì)教程26另一個(gè)是如何插入到

22、數(shù)組中。另一個(gè)是如何插入到數(shù)組中。移動(dòng)移動(dòng)id(i)id(10)及及named(i)named(10)的位置,的位置,空出空出i所在位置,插入所在位置,插入id1和和name1。移動(dòng)位置時(shí),可以采用這樣的算法:移動(dòng)位置時(shí),可以采用這樣的算法:把把id(10)移到移到id(11),id(9)移到移到id(10),把,把id(i)移到移到id(i+1)。因?yàn)檫@樣移動(dòng)時(shí),不會(huì)丟失原來(lái)的數(shù)據(jù)。因?yàn)檫@樣移動(dòng)時(shí),不會(huì)丟失原來(lái)的數(shù)據(jù)。visual basic程序設(shè)計(jì)教程277.3.2 使用一維數(shù)組使用一維數(shù)組數(shù)組元素插入數(shù)組元素插入const n = 10private sub command1_click

23、()dim id(n + 1) as long, named(n + 1) as stringdim id1 as long, name1 as string, i as integer, j as integerfor i = 1 to n 輸入輸入 id(i) = val(inputbox(請(qǐng)輸入第請(qǐng)輸入第 & i & 個(gè)編號(hào)個(gè)編號(hào), ) named(i) = inputbox(請(qǐng)輸入第請(qǐng)輸入第 & i & 個(gè)姓名個(gè)姓名, )next iprint: for i = 1 to n: print id(i); named(i); /;: next i 輸出起始

24、數(shù)據(jù)輸出起始數(shù)據(jù)visual basic程序設(shè)計(jì)教程28id1 = val(inputbox(請(qǐng)輸入要插入的編號(hào)請(qǐng)輸入要插入的編號(hào), )name1 = inputbox(請(qǐng)輸入要插入的姓名請(qǐng)輸入要插入的姓名, )for i = 1 to n 確定要插入的位置確定要插入的位置i if id(i) id1 then exit fornext ifor j = n to i step -1 將將i n的數(shù)據(jù)后移的數(shù)據(jù)后移 id(j + 1) = id(j): named(j + 1) = named(j)next jid(i) = id1: named(i) = name1 插入插入print:fo

25、r i=1 to n+1:print id(i); named(i); /;:next i 輸出插輸出插入后的數(shù)據(jù)入后的數(shù)據(jù)end subvisual basic程序設(shè)計(jì)教程297.3.2 使用一維數(shù)組使用一維數(shù)組- -排序改進(jìn)排序改進(jìn)【例【例7-4】改寫(xiě)例】改寫(xiě)例7-1中有關(guān)排序的程序段,使其采用改進(jìn)中有關(guān)排序的程序段,使其采用改進(jìn)的選擇分類(lèi)法。的選擇分類(lèi)法。例例7-1中,每發(fā)現(xiàn)一個(gè)中,每發(fā)現(xiàn)一個(gè)a(i) a(j)時(shí)時(shí),就要交換數(shù)據(jù),事實(shí),就要交換數(shù)據(jù),事實(shí)上對(duì)第上對(duì)第i趟,只要把趟,只要把a(bǔ)(i)a(n)中最小數(shù)與中最小數(shù)與a(i)交換就可以交換就可以了。了。改進(jìn)的選擇分類(lèi)法采用:改進(jìn)的選

26、擇分類(lèi)法采用:在第在第i至至n個(gè)元素中,確定最小數(shù)所在的位置個(gè)元素中,確定最小數(shù)所在的位置position,即下標(biāo),即下標(biāo),再將再將a(i)與與a(position)交換數(shù)據(jù)。交換數(shù)據(jù)。visual basic程序設(shè)計(jì)教程30改進(jìn)的選擇分類(lèi)法采用:改進(jìn)的選擇分類(lèi)法采用:在第在第i至至n個(gè)元素中,確定最小數(shù)所在的位置個(gè)元素中,確定最小數(shù)所在的位置position,即下標(biāo),即下標(biāo),再將再將a(i)與與a(position)交換數(shù)據(jù)。交換數(shù)據(jù)。for i = 1 to n - 1 按成績(jī)從小到大排序按成績(jī)從小到大排序 position = i 先假定先假定score(i)就是最小值,故記錄下就是最小

27、值,故記錄下標(biāo)標(biāo)i for j = i + 1 to n if score(position) score(j) then position=j 記錄更記錄更小的小的 next jvisual basic程序設(shè)計(jì)教程31 if i position then 下標(biāo)下標(biāo)position與下標(biāo)與下標(biāo)i的數(shù)據(jù)的數(shù)據(jù)交換交換 tempname = name1(i): name1(i) = name1(position) name1(position) = tempname tempscore = score(i): score(i) = score(position) score(position)

28、= tempscore end if next ivisual basic程序設(shè)計(jì)教程327.3.3 使用使用for each/next語(yǔ)句訪問(wèn)數(shù)組語(yǔ)句訪問(wèn)數(shù)組采用采用for each /next語(yǔ)句可以遍歷數(shù)組中所有元素語(yǔ)句可以遍歷數(shù)組中所有元素格式:格式: for each 元素元素 in 數(shù)組名數(shù)組名 循環(huán)體循環(huán)體next其中元素必須為一個(gè)其中元素必須為一個(gè)variant類(lèi)型的變量類(lèi)型的變量只要數(shù)組有一個(gè)元素,就會(huì)進(jìn)入循環(huán)。只要數(shù)組有一個(gè)元素,就會(huì)進(jìn)入循環(huán)。visual basic程序設(shè)計(jì)教程33循環(huán)的執(zhí)行過(guò)程是:循環(huán)的執(zhí)行過(guò)程是:分別對(duì)數(shù)組中的第一個(gè)元素、第二個(gè)元素、分別對(duì)數(shù)組中的第一

29、個(gè)元素、第二個(gè)元素、最、最后一個(gè)元素,按序執(zhí)行一次循環(huán)體。后一個(gè)元素,按序執(zhí)行一次循環(huán)體。例如要輸出數(shù)組例如要輸出數(shù)組a中各元素及它們的和,可用:中各元素及它們的和,可用: s = 0for each x in a x為為variant類(lèi)型的變量,不必類(lèi)型的變量,不必賦值;賦值;a為數(shù)組名為數(shù)組名 print x; : s = s + xnextprint: print svisual basic程序設(shè)計(jì)教程347.4.1 列表框列表框(listbox)列表框和組合框可解決單選框和復(fù)選框選項(xiàng)數(shù)量的限列表框和組合框可解決單選框和復(fù)選框選項(xiàng)數(shù)量的限制。制。列表框控件可顯示多個(gè)項(xiàng)目列表列表框控件可顯

30、示多個(gè)項(xiàng)目列表列表框往往可讓用戶(hù)選擇一個(gè)或多個(gè)項(xiàng)目。列表框往往可讓用戶(hù)選擇一個(gè)或多個(gè)項(xiàng)目。例如通過(guò)選擇字體來(lái)改變標(biāo)簽的文字字體。例如通過(guò)選擇字體來(lái)改變標(biāo)簽的文字字體。系統(tǒng)提供的字體有系統(tǒng)提供的字體有100多種,使用多種,使用listbox,可以,可以它們都放入列表框,利用滾動(dòng)條,方便選擇。它們都放入列表框,利用滾動(dòng)條,方便選擇。visual basic程序設(shè)計(jì)教程35列表框和組合框可解決單選框和復(fù)選框選項(xiàng)數(shù)量的限制。列表框和組合框可解決單選框和復(fù)選框選項(xiàng)數(shù)量的限制。列表框控件可顯示多個(gè)項(xiàng)目列表列表框控件可顯示多個(gè)項(xiàng)目列表列表框往往可讓用戶(hù)選擇一個(gè)或多個(gè)項(xiàng)目。列表框往往可讓用戶(hù)選擇一個(gè)或多個(gè)項(xiàng)目

31、。例如通過(guò)選擇字體來(lái)改變標(biāo)簽的文字字體。例如通過(guò)選擇字體來(lái)改變標(biāo)簽的文字字體。系統(tǒng)提供的字體有系統(tǒng)提供的字體有100多種,使用多種,使用listbox,可以它,可以它們都放入列表框,利用滾動(dòng)條,方便選擇。們都放入列表框,利用滾動(dòng)條,方便選擇。1創(chuàng)建列表框控件創(chuàng)建列表框控件創(chuàng)建列表框在工具箱內(nèi)選取列表框工具。創(chuàng)建列表框在工具箱內(nèi)選取列表框工具。visual basic程序設(shè)計(jì)教程362列表框控件的主要屬性列表框控件的主要屬性(名稱(chēng))(名稱(chēng))name,設(shè)置名稱(chēng),字符型。缺省值為,設(shè)置名稱(chēng),字符型。缺省值為list1list : 保存選項(xiàng)的字符串?dāng)?shù)組。如第保存選項(xiàng)的字符串?dāng)?shù)組。如第i項(xiàng)為項(xiàng)為list

32、(i-1)listcount : 列表框項(xiàng)目總數(shù),共有列表框項(xiàng)目總數(shù),共有0 (listcount-)個(gè))個(gè)listindex : 選中的項(xiàng)目在列表框中的位置選中的項(xiàng)目在列表框中的位置(索引值或下索引值或下標(biāo))標(biāo)) 第一項(xiàng)的索引值為第一項(xiàng)的索引值為0,第二項(xiàng)的索引值為,第二項(xiàng)的索引值為1。selected : 列表框某項(xiàng)的選中狀態(tài),布爾型數(shù)組。列表框某項(xiàng)的選中狀態(tài),布爾型數(shù)組。visual basic程序設(shè)計(jì)教程37sorted : 設(shè)置列表框項(xiàng)目是否排序。設(shè)置列表框項(xiàng)目是否排序。true為升序排列為升序排列text : 最后一次選中的選項(xiàng)的文本,該屬性不能直最后一次選中的選項(xiàng)的文本,該屬性不

33、能直接修改接修改multiselect : 確定列表框是否允許多選??稍O(shè)置確定列表框是否允許多選??稍O(shè)置0、1、2selcount : 列表框中選中的項(xiàng)目數(shù)列表框中選中的項(xiàng)目數(shù)屬性舉例,如:屬性舉例,如:str=list1.list(2)if list1.selected(i) then msgbox list1.list(i) multiselect為為0:list1.text等價(jià)等價(jià)list1.list(list1.listindex)visual basic程序設(shè)計(jì)教程383列表框控件的方法列表框控件的方法(1)additem方法additem方法用于建立列表框數(shù)據(jù)項(xiàng)方法用于建立列表框數(shù)

34、據(jù)項(xiàng)格式:格式:列表框?qū)ο竺Q(chēng)列表框?qū)ο竺Q(chēng). additem 項(xiàng)目字符串項(xiàng)目字符串,索引值,索引值索引值表示添加的位置,如索引值表示添加的位置,如3,表示添加的下標(biāo)為,表示添加的下標(biāo)為3visual basic程序設(shè)計(jì)教程39省略索引值,則將項(xiàng)目添加在列表框最后。省略索引值,則將項(xiàng)目添加在列表框最后。如:如:list1.additem hello 將字符串添加到列將字符串添加到列表框最后表框最后list1.additem list2.list(0) 將將list2中的第一中的第一條放入條放入list1list1.additem 計(jì)算機(jī)計(jì)算機(jī),2 將字符串添加到將字符串添加到list1第第2條

35、后條后visual basic程序設(shè)計(jì)教程40(2)removeitem方法removeitem方法清除列表框一項(xiàng)數(shù)據(jù)項(xiàng)方法清除列表框一項(xiàng)數(shù)據(jù)項(xiàng)格式:格式:列表框?qū)ο竺Q(chēng)列表框?qū)ο竺Q(chēng).removeitem 索引值索引值它通過(guò)索引值刪除列表框中指定項(xiàng)目。它通過(guò)索引值刪除列表框中指定項(xiàng)目。如:如:list1.removeitem 2 刪除刪除list1中下標(biāo)為中下標(biāo)為2的項(xiàng)目的項(xiàng)目visual basic程序設(shè)計(jì)教程41(3)clear方法clear方法用于清除列表框中所有項(xiàng)目。方法用于清除列表框中所有項(xiàng)目。格式:格式:列表框?qū)ο竺Q(chēng)列表框?qū)ο竺Q(chēng).clear4列表框控件的常用事件列表框控件的常

36、用事件click事件事件dblclick事件事件visual basic程序設(shè)計(jì)教程42【例【例7-5】通過(guò)選擇字體改變標(biāo)簽文字字體。如圖?!客ㄟ^(guò)選擇字體改變標(biāo)簽文字字體。如圖。screen是系統(tǒng)對(duì)象,指整個(gè)是系統(tǒng)對(duì)象,指整個(gè)windows桌面桌面fontcount屬性提供了可用的字體數(shù)目屬性提供了可用的字體數(shù)目fonts屬性數(shù)組提供了具體的字體,如屬性數(shù)組提供了具體的字體,如fonts(i)為為一種字體一種字體控件:控件:1個(gè)標(biāo)簽和個(gè)標(biāo)簽和1個(gè)列表框個(gè)列表框事件過(guò)程:事件過(guò)程:form_load:標(biāo)簽屬性設(shè)置,標(biāo)簽屬性設(shè)置,各種字體放入列表框中;各種字體放入列表框中;list1_click:

37、實(shí)現(xiàn)修改標(biāo)簽字體。實(shí)現(xiàn)修改標(biāo)簽字體。visual basic程序設(shè)計(jì)教程43【例【例7-5】通過(guò)選擇字體改變標(biāo)簽文字字體。如圖?!客ㄟ^(guò)選擇字體改變標(biāo)簽文字字體。如圖。程序代碼如下:程序代碼如下:private sub form_load() dim i as integer label1.fontsize = 18 label1.caption = 浙江大學(xué)浙江大學(xué)computer for i = 0 to screen.fontcount 1 字體名放入字體名放入list1 list1.additem screen.fonts(i) next iend subprivate sub list

38、1_click() label1.fontname = list1.textend subvisual basic程序設(shè)計(jì)教程44【例【例7-6】程序運(yùn)行界面如圖。程序運(yùn)行界面如圖??丶嚎丶?個(gè)標(biāo)簽框、個(gè)標(biāo)簽框、1個(gè)文本框個(gè)文本框1個(gè)列表框個(gè)列表框命令按鈕命令按鈕“添加添加” 將文本框中的內(nèi)容按升序添加到列表框中,然后將文本框中的內(nèi)容按升序添加到列表框中,然后刪除文本框內(nèi)容,并把焦點(diǎn)定位于文本框。如刪除文本框內(nèi)容,并把焦點(diǎn)定位于文本框。如果列表框中的項(xiàng)目數(shù)超過(guò)了果列表框中的項(xiàng)目數(shù)超過(guò)了30,則顯示,則顯示“個(gè)數(shù)個(gè)數(shù)已到,不能再添加已到,不能再添加”的信息。的信息。visual basic程

39、序設(shè)計(jì)教程45命令按鈕命令按鈕“刪除刪除”刪除列表框中所選的項(xiàng)目(允許多選)。刪除列表框中所選的項(xiàng)目(允許多選)。注意:刪除一個(gè)注意:刪除一個(gè),listcount的值就會(huì)減的值就會(huì)減1。主要屬性設(shè)置:主要屬性設(shè)置:listl的的sorted:由于要求升序,設(shè)置為:由于要求升序,設(shè)置為true。listl的的multiselect:由于允許多選,設(shè)置為:由于允許多選,設(shè)置為2。visual basic程序設(shè)計(jì)教程46【例【例7-6】程序運(yùn)行界面如圖。程序:】程序運(yùn)行界面如圖。程序: private sub command1_click()if list1.listcount = 30 then

40、msgbox 個(gè)數(shù)已到,不能再添加個(gè)數(shù)已到,不能再添加, , 提示提示else list1.additem text1.text text1.text = text1.setfocusend ifend sub private sub command2_click()dim i as integerfor i = list1.listcount - 1 to 0 step -1 if list1.selected(i) then list1.removeitem inext iend subvisual basic程序設(shè)計(jì)教程477.4.2 組合框(組合框(comboboxcombobox)組

41、合框兼有文本框和列表框兩者的功能組合框兼有文本框和列表框兩者的功能它既允許用戶(hù)輸入文本,也允許在列表中選擇項(xiàng)目它既允許用戶(hù)輸入文本,也允許在列表中選擇項(xiàng)目1創(chuàng)建組合框控件創(chuàng)建組合框控件創(chuàng)建組合框在工具箱內(nèi)選取列表組合框工具。創(chuàng)建組合框在工具箱內(nèi)選取列表組合框工具。2組合框控件的屬性組合框控件的屬性與列表框相同的與列表框相同的list、listcount、listindex、sorted屬性屬性與文本框相同的與文本框相同的locked、selstart、sellength、seltextvisual basic程序設(shè)計(jì)教程48其他主要屬性:其他主要屬性:(名稱(chēng))(名稱(chēng))name:組合框名稱(chēng)。缺省

42、值為:組合框名稱(chēng)。缺省值為combo1 text:用戶(hù)輸入的文本內(nèi)容或選中的文字:用戶(hù)輸入的文本內(nèi)容或選中的文字 style:確定組合框性能和樣式??稍O(shè):確定組合框性能和樣式??稍O(shè)0、1、2三三個(gè)值:個(gè)值:0:下拉組合框,包括:下拉組合框,包括1個(gè)下拉式列表和個(gè)下拉式列表和1個(gè)文本個(gè)文本框(缺省值);框(缺省值);1:簡(jiǎn)單組合框,包括:簡(jiǎn)單組合框,包括1個(gè)文本框和個(gè)文本框和1個(gè)不能下拉個(gè)不能下拉的列表;的列表;2:下拉式列表,只能選擇,不能輸入:下拉式列表,只能選擇,不能輸入visual basic程序設(shè)計(jì)教程493組合框控件的方法組合框控件的方法additem:添加項(xiàng)目:添加項(xiàng)目remove

43、item:刪除項(xiàng)目:刪除項(xiàng)目clear:刪除所有項(xiàng)目:刪除所有項(xiàng)目4組合框控件的常用事件組合框控件的常用事件click事件:事件:選擇項(xiàng)目時(shí)發(fā)生選擇項(xiàng)目時(shí)發(fā)生change事件:事件:style為為0或或1時(shí),用戶(hù)在組合框控件的文本框部分時(shí),用戶(hù)在組合框控件的文本框部分輸入文字時(shí),驅(qū)動(dòng)事件代碼執(zhí)行。輸入文字時(shí),驅(qū)動(dòng)事件代碼執(zhí)行。visual basic程序設(shè)計(jì)教程50【例【例7-7】編制設(shè)置字體、字型和】編制設(shè)置字體、字型和字號(hào)的演示程序。如圖。字號(hào)的演示程序。如圖。控件:控件:6個(gè)標(biāo)簽,其中個(gè)標(biāo)簽,其中1個(gè)用于顯示預(yù)個(gè)用于顯示預(yù)覽效果覽效果1個(gè)框架個(gè)框架3個(gè)組合框個(gè)組合框visual basi

44、c程序設(shè)計(jì)教程51事件:事件:form_load事件:添加組合框中初始項(xiàng)目等。事件:添加組合框中初始項(xiàng)目等。三個(gè)組合框的三個(gè)組合框的click事件:在選擇項(xiàng)目時(shí)驅(qū)動(dòng)事件:在選擇項(xiàng)目時(shí)驅(qū)動(dòng)combo1_keypress事件:有輸完字體名回車(chē)后,事件:有輸完字體名回車(chē)后,改變字體改變字體combo3_change事件:通過(guò)輸入改變預(yù)覽文字事件:通過(guò)輸入改變預(yù)覽文字大小。大小。主要屬性:主要屬性:預(yù)覽預(yù)覽name設(shè)為設(shè)為lblexample,wordwrap為為true字體、字型和字號(hào)組合框的字體、字型和字號(hào)組合框的style值分別設(shè)置成值分別設(shè)置成1、2和和0visual basic程序設(shè)計(jì)教程5

45、2 private sub combo1_keypress(keyascii as integer) 輸入字體名改輸入字體名改字體字體 dim i as integer if keyascii = 13 then for i = 0 to screen.fontcount - 1 if screen.fonts(i) = combo1.text then exit for next i if i = 6 and n max then max = age(i, j) if age(i, j) 0 then count = count + 1: average = average + age(i,

46、 j) next j print next i print 最大年齡為最大年齡為:; max print 平均年齡為平均年齡為:; round(average / count, 2)end subvisual basic程序設(shè)計(jì)教程757.7.1 如何聲明動(dòng)態(tài)數(shù)組如何聲明動(dòng)態(tài)數(shù)組如果在運(yùn)行時(shí)才能確定數(shù)組大小,可用動(dòng)態(tài)數(shù)組。如果在運(yùn)行時(shí)才能確定數(shù)組大小,可用動(dòng)態(tài)數(shù)組。使用動(dòng)態(tài)數(shù)組有利于節(jié)省存儲(chǔ)空間。使用動(dòng)態(tài)數(shù)組有利于節(jié)省存儲(chǔ)空間。聲明并使用動(dòng)態(tài)數(shù)組需要兩個(gè)步驟:聲明并使用動(dòng)態(tài)數(shù)組需要兩個(gè)步驟:1聲明動(dòng)態(tài)數(shù)組聲明動(dòng)態(tài)數(shù)組格式:格式:dim 數(shù)組名數(shù)組名( ) as 類(lèi)型名類(lèi)型名它聲明了一個(gè)空維數(shù)組

47、,表明該數(shù)組是動(dòng)態(tài)數(shù)組它聲明了一個(gè)空維數(shù)組,表明該數(shù)組是動(dòng)態(tài)數(shù)組例如例如dim a() as integervisual basic程序設(shè)計(jì)教程762用用redim語(yǔ)句分配數(shù)組的實(shí)際元素個(gè)數(shù)語(yǔ)句分配數(shù)組的實(shí)際元素個(gè)數(shù)redim語(yǔ)句是一個(gè)可執(zhí)行語(yǔ)句語(yǔ)句是一個(gè)可執(zhí)行語(yǔ)句作用是為數(shù)組分配實(shí)際空間。作用是為數(shù)組分配實(shí)際空間。格式為:格式為:redim 數(shù)組名數(shù)組名(下標(biāo)說(shuō)明下標(biāo)說(shuō)明,下標(biāo)說(shuō)明下標(biāo)說(shuō)明) n=10,則可用,則可用redim a(n),或,或redim a(n,n)在分配實(shí)際元素個(gè)數(shù)后,就可象固定數(shù)組一樣在分配實(shí)際元素個(gè)數(shù)后,就可象固定數(shù)組一樣使用使用visual basic程序設(shè)計(jì)教程7

48、77.7.2 保留動(dòng)態(tài)數(shù)組中存放的數(shù)據(jù)保留動(dòng)態(tài)數(shù)組中存放的數(shù)據(jù)redim語(yǔ)句會(huì)使原有的數(shù)據(jù)就全部會(huì)丟失。語(yǔ)句會(huì)使原有的數(shù)據(jù)就全部會(huì)丟失。在在redim中使用中使用preserve關(guān)鍵字可保留原數(shù)據(jù)。關(guān)鍵字可保留原數(shù)據(jù)。用法是:用法是:redim preserve 數(shù)組名數(shù)組名(下標(biāo)說(shuō)明下標(biāo)說(shuō)明,下標(biāo)說(shuō)明下標(biāo)說(shuō)明)多維數(shù)組,使用多維數(shù)組,使用preserve關(guān)鍵字關(guān)鍵字只能改變數(shù)組中最后一維的上界只能改變數(shù)組中最后一維的上界visual basic程序設(shè)計(jì)教程78如有以下代碼段,輸出結(jié)果如圖。如有以下代碼段,輸出結(jié)果如圖。dim id() as integer, name1() as strin

49、g, i as integerredim id(5), name1(5)for i = 1 to 5 id(i) = i: name1(i) = a & inext iredim preserve id(ubound(id) + 1), name1(ubound(name1) + 1)id(6) = 6: name1(6) = abcfor i = 1 to 6 print id(i), name1(i)next ivisual basic程序設(shè)計(jì)教程79【例【例7-11】編程:輸入正整數(shù)】編程:輸入正整數(shù)n,再由,再由inputbox函數(shù)函數(shù)輸入輸入n個(gè)數(shù)至數(shù)組并在窗體上輸出這個(gè)數(shù)至

50、數(shù)組并在窗體上輸出這n個(gè)數(shù),然后要個(gè)數(shù),然后要求元素?cái)?shù)據(jù)反過(guò)來(lái)存放,并輸出。求元素?cái)?shù)據(jù)反過(guò)來(lái)存放,并輸出。即第即第1個(gè)元素與第個(gè)元素與第n個(gè)元素互換,第個(gè)元素互換,第2個(gè)元素與第個(gè)元素與第n-1個(gè)元素互換,個(gè)元素互換,。最后在窗體上輸出對(duì)換后各。最后在窗體上輸出對(duì)換后各元素的值。元素的值。如:輸入如:輸入8和和11、12、13、14、15、16、17、18,輸出為:輸出為:11 12 13 14 15 16 17 18和和18 17 16 15 14 13 12 11。visual basic程序設(shè)計(jì)教程80分析:分析:因數(shù)組元素個(gè)數(shù)在運(yùn)行中才能確定,故采用動(dòng)因數(shù)組元素個(gè)數(shù)在運(yùn)行中才能確定,故

51、采用動(dòng)態(tài)數(shù)組較合適。態(tài)數(shù)組較合適。另外一個(gè)問(wèn)題是如何進(jìn)行數(shù)據(jù)對(duì)換,對(duì)換幾次?另外一個(gè)問(wèn)題是如何進(jìn)行數(shù)據(jù)對(duì)換,對(duì)換幾次?對(duì)換只要進(jìn)行對(duì)換只要進(jìn)行int(n/2)次就可以了。次就可以了。本例將窗體的本例將窗體的autoredraw屬性設(shè)置為屬性設(shè)置為true。visual basic程序設(shè)計(jì)教程81【例【例7-11】編程:數(shù)組元素反過(guò)來(lái)存放。】編程:數(shù)組元素反過(guò)來(lái)存放。private sub command1_click()dim a() as integer, n as integer, i as integer, t as integern = val(inputbox(請(qǐng)輸入數(shù)據(jù)個(gè)數(shù)請(qǐng)輸入數(shù)

52、據(jù)個(gè)數(shù))redim a(n)for i = 1 to n a(i) = val(inputbox(請(qǐng)輸入第請(qǐng)輸入第 & i & 個(gè)數(shù)個(gè)數(shù)) print a(i);next iprintvisual basic程序設(shè)計(jì)教程82for i = 1 to n 2 t = a(i): a(i) = a(n - i + 1): a(n - i + 1) = t a(i)與與a(n-i+1)互換互換next ifor i = 1 to n print a(i);next iprintend subvisual basic程序設(shè)計(jì)教程837.8.1 檢索問(wèn)題檢索問(wèn)題【例【例7-12】用隨機(jī)函

53、數(shù)產(chǎn)生】用隨機(jī)函數(shù)產(chǎn)生30個(gè)兩位整數(shù)。然后輸入一個(gè)兩個(gè)兩位整數(shù)。然后輸入一個(gè)兩位整數(shù)位整數(shù)x,判斷,判斷x是否在這是否在這30個(gè)數(shù)之內(nèi),若是,輸出第一個(gè)個(gè)數(shù)之內(nèi),若是,輸出第一個(gè)相同數(shù)的下標(biāo)。若無(wú),顯示相同數(shù)的下標(biāo)。若無(wú),顯示“找不到找不到”。若輸入。若輸入x的不是兩的不是兩位整數(shù),則結(jié)束該事件執(zhí)行。位整數(shù),則結(jié)束該事件執(zhí)行。這是一個(gè)檢索(查找)問(wèn)題。這是一個(gè)檢索(查找)問(wèn)題。關(guān)鍵是如何在關(guān)鍵是如何在a(1)a(30) 中檢索數(shù)據(jù)。中檢索數(shù)據(jù)。簡(jiǎn)單的方法是采用順序檢索(線(xiàn)性查找法),即:簡(jiǎn)單的方法是采用順序檢索(線(xiàn)性查找法),即:將鍵盤(pán)輸入的數(shù)據(jù)將鍵盤(pán)輸入的數(shù)據(jù)x與與a(1)a(n)逐一比較逐

54、一比較若與某個(gè)若與某個(gè)a(i)相符,則找到,否則找不到。相符,則找到,否則找不到。visual basic程序設(shè)計(jì)教程84 7.8.1 檢索問(wèn)題檢索問(wèn)題-順序檢索順序檢索(線(xiàn)性查找法)(線(xiàn)性查找法) private sub command1_click()dim a(30) as integer, i as integer, x as integerrandomizeclsfor i = 1 to 30 產(chǎn)生數(shù)據(jù)并輸出產(chǎn)生數(shù)據(jù)并輸出 a(i) = int(rnd * 90 + 10) : print a(i); if i mod 10 = 0 then printnext ix = val(i

55、nputbox(請(qǐng)輸入要查找的兩位數(shù)請(qǐng)輸入要查找的兩位數(shù))visual basic程序設(shè)計(jì)教程85if x = 10 and x 30 then msgbox 找不到找不到 & x, , 提示提示 else msgbox x & 是第是第 & i & 個(gè)數(shù)個(gè)數(shù), , 提示提示 end ifelse 輸入的不是兩位數(shù)輸入的不是兩位數(shù) msgbox 數(shù)據(jù)輸入有錯(cuò)數(shù)據(jù)輸入有錯(cuò)!, vbcritical, 出錯(cuò)出錯(cuò)end ifend subvisual basic程序設(shè)計(jì)教程867.8.1 檢索問(wèn)題檢索問(wèn)題【例【例7-13】程序運(yùn)行時(shí),數(shù)組】程序運(yùn)行時(shí),數(shù)組a存放了存放

56、了20個(gè)已經(jīng)按照從個(gè)已經(jīng)按照從小到大排列的數(shù)據(jù),然后從鍵盤(pán)輸入一個(gè)數(shù)小到大排列的數(shù)據(jù),然后從鍵盤(pán)輸入一個(gè)數(shù)key,判,判斷該數(shù)是否在這斷該數(shù)是否在這30個(gè)數(shù)內(nèi)。若是,則輸出這個(gè)數(shù)的下個(gè)數(shù)內(nèi)。若是,則輸出這個(gè)數(shù)的下標(biāo)。若不是,則顯示標(biāo)。若不是,則顯示“找不到找不到”。這仍是檢索問(wèn)題,當(dāng)然可用順序查找法。這仍是檢索問(wèn)題,當(dāng)然可用順序查找法。但但30個(gè)數(shù)據(jù)已經(jīng)排過(guò)序,可采用一種快速的查找方法,個(gè)數(shù)據(jù)已經(jīng)排過(guò)序,可采用一種快速的查找方法,稱(chēng)為稱(chēng)為二分法查找(折半查找法、二分檢索法)(折半查找法、二分檢索法)visual basic程序設(shè)計(jì)教程877.8.1 檢索問(wèn)題檢索問(wèn)題二分法二分法算法:算法:待查

57、數(shù)據(jù)范圍由下標(biāo)決定,初始下界待查數(shù)據(jù)范圍由下標(biāo)決定,初始下界low=lbound(a),上界,上界high= ubound(a)。1把待查數(shù)據(jù)范圍分成二半,取出作為分界線(xiàn)把待查數(shù)據(jù)范圍分成二半,取出作為分界線(xiàn)的中間元素,其下標(biāo)為的中間元素,其下標(biāo)為mid=(low+high)2 ;2將中間元素將中間元素a(mid)與與key比較;比較;3若:若:key = 中間元素中間元素a(mid),找到。跳出檢。跳出檢索循環(huán);索循環(huán);visual basic程序設(shè)計(jì)教程884若:若:key 中間元素中間元素a(mid),因數(shù)據(jù)排過(guò)序,則以,因數(shù)據(jù)排過(guò)序,則以中間元素的后半部分范圍作為新的待查數(shù)據(jù)范圍,即中

58、間元素的后半部分范圍作為新的待查數(shù)據(jù)范圍,即可更改下界可更改下界為為low=mid+1。5若:若:key high。即不存在。即不存在待查數(shù)據(jù)范圍。待查數(shù)據(jù)范圍。visual basic程序設(shè)計(jì)教程89例如:在以下數(shù)據(jù)中找例如:在以下數(shù)據(jù)中找33。low=1,high=8,mid=4 low=5,high=8,mid=6 low=5,high=5,mid=5 。共。共比較比較3 3 3 3次。次。5 5 59 9 920 20 2033 33 3344 44 4456 56 5690 90 90【例【例7-13】從鍵盤(pán)輸入一個(gè)整數(shù),判斷該數(shù)是否在已排序】從鍵盤(pán)輸入一個(gè)整數(shù),判斷該數(shù)是否在已排序

59、的的20個(gè)數(shù)的數(shù)組之內(nèi)。若存在,則顯示數(shù)據(jù)下標(biāo)。若沒(méi)有,個(gè)數(shù)的數(shù)組之內(nèi)。若存在,則顯示數(shù)據(jù)下標(biāo)。若沒(méi)有,則顯示:則顯示:找不到找不到。visual basic程序設(shè)計(jì)教程90例如:在以下數(shù)據(jù)中找例如:在以下數(shù)據(jù)中找40。low=1,high=8,mid=4 low=5,high=8,mid=6 low=5,high=5,mid=5 。key33,3 3 3 3 low=5+1=65 5 5 5 出現(xiàn)出現(xiàn)lowhigh9 9 9 920 20 20 2033 33 33 3344 44 44 4456 56 56 5690 90 90 90hlhl【例【例7-13】從鍵盤(pán)輸入一個(gè)整數(shù),判斷該數(shù)是

60、否】從鍵盤(pán)輸入一個(gè)整數(shù),判斷該數(shù)是否在已排序的在已排序的20個(gè)數(shù)的數(shù)組之內(nèi)。若存在,則顯示個(gè)數(shù)的數(shù)組之內(nèi)。若存在,則顯示數(shù)據(jù)下標(biāo)。若沒(méi)有,則顯示:數(shù)據(jù)下標(biāo)。若沒(méi)有,則顯示:找不到找不到。visual basic程序設(shè)計(jì)教程91private sub command1_click() dim i as integer, a, key as integer 聲明聲明a為為variant類(lèi)型類(lèi)型 dim low as integer, high as integer, mid as integer a = array(1, 4, 5, 7, 10, 12, 34, 45, 56, 74, 88, 90, 120, 233, 422, 456, 555, 557, 567, 600) key = val(inputbox(“輸入一個(gè)要檢索的整數(shù)輸入一個(gè)要檢索的整數(shù)”, “輸入數(shù)輸入數(shù)據(jù)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論