版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第3章 過程、函數(shù)與算法,3.1 過程,Sub過程的定義,3.1.1 Sub過程,Sub過程沒有返回值,是在響應(yīng)事件時(shí)執(zhí)行的代碼塊。Sub過程用Sub End Sub定義,其格式為: PrivatePublicStaticSub 過程名 (參數(shù)表) 語句序列 End Sub 說明: Sub過程定義以Sub開始,以End Sub結(jié)束,中間是描述過程功能的語句序列,稱為過程體。 Sub前面的Private、Public和Static,用于指定過程或其中定義的變量的有效范圍。 過程名與變量的命名規(guī)則相同,不能與Visual Basic中的關(guān)鍵字重名,也不能與同級(jí)的變量同名。,圖3-1 “添加過程”對
2、話框 圖3-2 代碼編輯窗口,Sub過程的調(diào)用,(1)直接使用子程序名調(diào)用Sub過程 格式:子程序名 參數(shù)1,參數(shù)2 直接使用子程序名調(diào)用上述Sum子程序如下: Sum a1,b1 (2)使用Call語句調(diào)用Sub過程 格式:Call 過程名(參數(shù)1,參數(shù)2) 注意 參數(shù)的個(gè)數(shù)、數(shù)據(jù)類型必須與被調(diào)用過程的參數(shù)一致。 例如,下面是調(diào)用Sum子程序的語句: a1 = 5 b1 = 5 Call Sum (a1,b1) 同樣在使用Call語句調(diào)用時(shí),也可以不帶參數(shù),如:Call Sum。,定義Function過程,3.1.2 Function過程,PrivatePublicStaticFunctio
3、n 過程名 (參數(shù)表) As 數(shù)據(jù)類型 語句序列 End Function 說明: Function過程定義以Function開始,以End Function結(jié)束,中間是描述過程功能的語句序列,稱為過程體或函數(shù)體。 Private和Public表示函數(shù)是“公用的”還是“私用的”。 參數(shù)表的具體形式為: 變量名 As 數(shù)據(jù)類型 ,變量名 As 數(shù)據(jù)類型 其中,As 數(shù)據(jù)類型主要用來表示函數(shù)返回值的類型。,圖3-3 “添加過程”對話框,Function過程的調(diào)用,過程名(參數(shù)表) 例如,調(diào)用前面定義計(jì)算減法的Function過程“add”,可以采用下面的程序: Private Sub Comman
4、d1_Click () Dim z(2) As Single For I = 1 To 2 Z(i)=InputBox(“Enter a value ”,”INPUT BOX”) Next i Sum = add(z(1),z(2) Print ”Sum=”;Sum End Sub,按值傳遞參數(shù),3.1.3 參數(shù)傳遞,例如: Private Sub Do (ByVal n As Integer) n=n+1 Print 子程序中m的值為 &n End Sub Private Sub Form_Click () Dim m As Integer m=10 Print 調(diào)用前m的值為 &m Do
5、m Print 調(diào)用后m的值為 &m End Sub,程序執(zhí)行結(jié)果為: 調(diào)用前m的值為10 子程序中m的值為11 調(diào)用后m的值為10,按地址傳遞參數(shù),例如,將上面的Do過程修改為: Private Sub Do (n As Integer) n=n+1 Print 子程序中m的值為 &n End Sub Form_Click ()過程保持不變,程序執(zhí)行結(jié)果為: 調(diào)用前m的值為10 子程序中m的值為11 調(diào)用后m的值為11,3.2 常用內(nèi)部函數(shù),3.2.1 算術(shù)函數(shù),表3-1 常用算術(shù)函數(shù),3.2.2 字符串函數(shù),表3-2 常用字符串函數(shù),3.2.3 轉(zhuǎn)換函數(shù),表3-3 轉(zhuǎn)換函數(shù)的數(shù)據(jù)類型,3.
6、2.5 判斷函數(shù),表3-5 常見的判斷函數(shù),3.3 常用算法,3.3.1 簡單算法,例:用隨機(jī)函數(shù)產(chǎn)生100個(gè)0,99范圍內(nèi)的隨機(jī)整數(shù),統(tǒng)計(jì)個(gè)位上的數(shù)字分別為1,2,3,4,5,6,7,8,9,0的數(shù)的個(gè)數(shù),并打印出來。 將程序編寫在一個(gè)GetTJput過程中,代碼如下: Public Sub GetTJput() Dim m(1 To 100) As Integer Dim n(1 To 10) As Integer Dim i As Integer, p As Integer 產(chǎn)生100個(gè)0,99范圍內(nèi)的隨機(jī)整數(shù),并以每行10個(gè)打印出來,For i = 1 To 100 m(i) = In
7、t(Rnd * 100) If m(i) n; (2)m除以n得余數(shù)r; (3)若r =0,則n為求得的最大公約數(shù),算法結(jié)束;否則執(zhí)行(4); (4)mn,nr,再重復(fù)執(zhí)行(2)。 例如,求m = 14,n=6的最大公約數(shù)和最小公倍數(shù):,Public Sub Main() m= inputBox(m=) n = inputBox(n=) nm = n*m If m 0) m=n n=r r= m mod n Loop Print 最大公約數(shù)=, n Print 最小公倍數(shù)=, n*m/n End Sub,3.3.3 判斷素?cái)?shù),選擇法排序(升序),3.3.4 排序問題,基本思路如下: (1)對有
8、n個(gè)數(shù)的序列(存放在數(shù)組a(n)中),從中選出最小的 數(shù),并與第1個(gè)數(shù)交換位置; (2)除第1個(gè)數(shù)外,其余n-1個(gè)數(shù)中選最小的數(shù),并與第2個(gè)數(shù) 交換位置; (3)依次類推,選擇了n-1次后,這個(gè)數(shù)列已按升序排列。,程序代碼如下: For i = 1 To n - 1 imin = i For j = i + 1 To n If a(imin) a(j) Then imin = j Next j temp = a(i) a(i) = a(imin) a(imin) = temp Next I,冒泡法排序(升序),冒泡法排序是一類依靠“交換”進(jìn)行排序的方法,其基本思路:將相鄰兩個(gè)數(shù)比較,如果前者較
9、大,則將兩個(gè)數(shù)進(jìn)行交換。 (1)有n個(gè)數(shù)(存放在數(shù)組a(n)中),第一次將每相鄰兩個(gè)數(shù)比 較,小的調(diào)到前面,經(jīng)n-1次兩兩相鄰比較后,最大的數(shù) 已“沉底”,放在最后一個(gè)位置,小數(shù)上升“浮起”; (2)第二次對余下的n-1個(gè)數(shù)(最大的數(shù)已“沉底”)按上法比 較,經(jīng)n-2次兩兩相鄰比較后得次大的數(shù); (3)依次類推,n個(gè)數(shù)共進(jìn)行n-1次比較,在第j次中要進(jìn)行n-j次 兩兩比較。,程序如下: For i = 1 To n - 1 For j = 1 To n-i If a(j) a(j+1) Then temp=a(j); a(j)=a(j+1); a(j+1)=temp End if Next j
10、 Next i,合并法排序,合并法排序即是將兩個(gè)有序數(shù)組A、B合并成另一個(gè)有序的數(shù)組C,并按升序排列。 基本思想如下: (1)先在A、B數(shù)組中各取第一個(gè)元素進(jìn)行比較,將小的元素放入 C數(shù)組; (2)取小的元素所在數(shù)組的下一個(gè)元素,與另一數(shù)組中上次比較 后較大的元素比較,重復(fù)上述比較過程,直到某個(gè)數(shù)組被先排完; (3)將另一個(gè)數(shù)組剩余元素插入C數(shù)組,合并排序完成。,程序如下: Do While ia = UBound(A) And ib = UBound(B) 當(dāng)A和B數(shù)組均未比較完 If A(ia) B(ib) Then C(ic) = A(ia): ia = ia + 1 Else C(ic
11、) = B(ib): ib = ib + 1 End If ic = ic + 1 Loop Do While ia = UBound(A) A數(shù)組中的剩余元素抄入C數(shù)組 C(ic) = A(ia) ia = ia + 1: ic = ic + 1 Loop Do While ib = UBound(B) B數(shù)組中的剩余元素抄入C數(shù)組 C(ic) = B(ib) ib = ib + 1 ic = ic + 1 Loop,順序查找法,3.3.5 查找問題,順序查找法即是在一列數(shù)中查找某數(shù)x。第一種方法的基本思想是:一列數(shù)放在數(shù)組a(1)a(n)中,待查找的數(shù)放在x 中,把x與a數(shù)組中的元素從頭到
12、尾一一進(jìn)行比較查找。用變量p表示a數(shù)組元素下標(biāo),p初值為1,使x與a(p)比較,如果x不等于a(p),則使p=p+1,不斷重復(fù)這個(gè)過程;一旦x等于a(p)則退出循環(huán)。另外,如果p大于數(shù)組長度,循環(huán)也應(yīng)該停止。這個(gè)過程可由如下語句實(shí)現(xiàn): p = 1 Do While x a(p) And p = n p = p + 1 Loop,下面寫一查找函數(shù)Find,若找到則返回下標(biāo)值,找不到則返回0: Option Base 1 Private Function Find( a( ) As Single,x As Single) As Integer Dim n%,p% N = Ubound( a ) p
13、 = 1 Do While x a(p) And p n then p=0 Find=p End Function,另一種方法的基本思想是:一列數(shù)放在數(shù)組a(1)a(n)中,待查找的關(guān)鍵值為key,把key與a數(shù)組中的元素從頭到尾一一進(jìn)行比較查找,若相同,則查找成功,若找不到,則查找失敗。其查找子過程如下(Index為存放找到元素的下標(biāo)): Public Sub Search(a() As Variant, key As Variant, index%) Dim i% For i = LBound(a) To UBound(a) If key = a(i) Then index = i Exi
14、t Sub End If Next i index = -1 End Sub,折半查找法,折半查找法只能對有序數(shù)列進(jìn)行查找。 基本思想:設(shè)n個(gè)有序數(shù)(從小到大)存放在數(shù)組a(1)a(n)中,要查找的數(shù)為x。用變量bot、top、mid 分別表示查找數(shù)據(jù)范圍的底部(數(shù)組下界)、頂部(數(shù)組的上界)和中間,mid=(top+bot)/2,折半查找的算法如下: (1)x=a(mid),則已找到退出循環(huán),否則進(jìn)行下面的判斷; (2)xa(mid),x必定落在mid+1和top的范圍之內(nèi),即bot=mid+1; (4)在確定了新的查找范圍后,重復(fù)進(jìn)行以上比較,直到找到或者bot=top。 將上面的算法寫成
15、如下函數(shù),若找到則返回該數(shù)所在的下標(biāo)值,沒找到則返回-1。,Function search(a() As Integer, x As Integer) As Integer Dim bot%, top%, mid% Dim find As Boolean /代表是否找到/ bot = LBound(a) top = UBound(a) find = False /判斷是否找到的邏輯變量,初值為False/ Do While bot = top And Not find mid = (top + bot) 2 If x = a(mid) Then find = True Exit Do Else
16、If x a(mid) Then top = mid - 1 Else bot = mid + 1 End If Loop If find Then search = mid Else search = -1 End If End Function,3.3.6 遞歸算法,用自身的結(jié)構(gòu)來描述自身,稱遞歸。VB允許在一個(gè)Sub子過程和Function過程的定義內(nèi)部調(diào)用自己,即遞歸Sub子過程和遞歸Function函數(shù)。遞歸處理一般用棧來實(shí)現(xiàn),每調(diào)用一次自身,把當(dāng)前參數(shù)壓棧,直到遞歸結(jié)束。然后從棧中彈出當(dāng)前參數(shù),直到??铡?例如,編Sum(n)=n! 的遞歸函數(shù): Function Sum (n As Integer) As Integer If n = 1 Then Sum = 1 Else Sum = n *
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年黃淮學(xué)院招聘高層次人才備考題庫含答案詳解
- 2026年橫瀝鎮(zhèn)中心衛(wèi)生院招聘備考題庫完整答案詳解
- 2025年高職工藝美術(shù)品設(shè)計(jì)(陶藝設(shè)計(jì)制作)試題及答案
- 三年(2023-2025)中考?xì)v史真題分類匯編(全國)專題27 殖民地人民的反抗與資本主義制度的擴(kuò)展(解析版)
- 高中AI課程中自然語言處理在智能作文邏輯分析系統(tǒng)中的應(yīng)用實(shí)踐課題報(bào)告教學(xué)研究課題報(bào)告
- 2025年兒童安全教育動(dòng)畫化五年發(fā)展報(bào)告
- 2025年再生能源在建筑領(lǐng)域應(yīng)用創(chuàng)新報(bào)告
- 國家智慧教育云平臺(tái)下的勞動(dòng)教育課程教學(xué)資源開發(fā)與共享研究教學(xué)研究課題報(bào)告
- 附件4境內(nèi)旅游“一日游”合同(示范文本)2026年版本
- 玻璃磨邊工段年終總結(jié)(3篇)
- 2024年蘇教版小學(xué)二年級(jí)上冊數(shù)學(xué)期末測試試卷(含答案)
- 鋼結(jié)構(gòu)廠房施工樣板引路方案
- 晚期肝癌綜合治療方案培訓(xùn)
- 2026年華為射頻芯片設(shè)計(jì)工程師高頻常見面試題包含詳細(xì)解答+避坑指南
- 2025浙江杭州錢塘新區(qū)建設(shè)投資集團(tuán)有限公司招聘5人參考筆試題庫及答案解析
- 黑龍江省佳木斯市一中2026屆高二上數(shù)學(xué)期末監(jiān)測模擬試題含解析
- 物流開票合同范本
- 安全事故論文3000字
- 三年(2023-2025)中考英語真題分類匯編(全國)專題41 讀寫綜合(解析版)
- 編程基礎(chǔ)教案
- 組建祠堂集資協(xié)議書
評論
0/150
提交評論