版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、人民衛(wèi)生二九年三月二十二日日 5:18:40 PM第八章程序設(shè)計(jì)基礎(chǔ)第一節(jié) Visual Basic 程序設(shè)計(jì)語(yǔ)言簡(jiǎn)介第二節(jié) Visual Basic 語(yǔ)言基礎(chǔ)拼寫 上標(biāo) 下標(biāo) 公式 分節(jié)、頁(yè) 首字下沉效果、帶圈序號(hào)項(xiàng)目符號(hào)段落對(duì)齊、邊框設(shè)置一、數(shù)據(jù)類型Visual Basic 提供了多種標(biāo)準(zhǔn)的數(shù)據(jù)類型,用戶可根據(jù)自己 program 設(shè)計(jì)中的需要,選用相應(yīng)的數(shù)據(jù)類型。1數(shù)值型(Numeric)Visual Basic 中的數(shù)值數(shù)據(jù)類型有:eger(整型)、Long(長(zhǎng)整型)、 Single(單精度浮點(diǎn)型)、 Double(雙精度浮點(diǎn)型) Currency(貨幣型)。(1)eger(整型)、L
2、ong (長(zhǎng)整型)eger 類型占兩個(gè)字節(jié),除去符號(hào)位,整數(shù)的范圍從-32768(215)32767(215-1),數(shù)值超過(guò)范圍時(shí),產(chǎn)生溢出錯(cuò)誤。,用%作為整型的類型符,如:253%。Long 類型占節(jié),除去符號(hào)位,整數(shù)的范圍從-232+232-1,數(shù)值超過(guò)范圍時(shí),產(chǎn)生溢出錯(cuò)誤。在 Visual Basic 中;用&作為長(zhǎng)整型的類型符,如:897231&。(2) (2) Single(單精度浮點(diǎn)型)、Double(雙精度浮點(diǎn)型):浮點(diǎn)類型數(shù)值范圍較大。浮點(diǎn)類型可表示整數(shù)、小數(shù)、指數(shù)。單的形式表示,小數(shù)和冪之間加 E。正數(shù)精度浮點(diǎn)數(shù)(Single)占 4 個(gè)字節(jié),精度是 7 位。用小數(shù)加冪(以
3、10 為底)的范圍: 1.401298E-45 3.402823E38 ;負(fù)數(shù)的范圍: -3.402823E38-1.401298E-45。在 Visual Basic 中,用!作為單精度浮點(diǎn)型的類型符。例如:523.12、523.12! 和 0.52312E+3 (等價(jià)與 0.52312103) 都表示同值的單精度浮點(diǎn)數(shù)。雙精度浮點(diǎn)數(shù)(Double)占 8 個(gè)字節(jié),精度是 16 位。表示形式同單精度浮點(diǎn)類型,不同之處是用 D 代替 E。正數(shù)的范圍:4.94065645841247D-324:1.79769313486232D308;負(fù)數(shù)的范圍-1.79769313486232D308 -4.
4、94065645841247D-324 。在 Visual Basic 中,用#作為雙精度浮點(diǎn)型的類型符;在指數(shù)形式中用 D 代替 E,或在指數(shù)形式后加#。例如:523.12#、 0.52312D+3 和 0.52312E+3#為同值的雙精度浮點(diǎn)數(shù)。返回(3) (3) Currency(貨幣型):貨幣型數(shù)據(jù)類型是定點(diǎn)數(shù)據(jù)類型,保留小數(shù)點(diǎn)右面 4 位和小數(shù)點(diǎn)左面 15位,適用于貨幣計(jì)算。在 Visual Basic 中,用作為貨幣型數(shù)據(jù)的類型符。2字節(jié)型(Byte)字節(jié)型用于返回二進(jìn)制數(shù)。二、變量1變量的定義在 program 執(zhí)行過(guò),需要臨時(shí)一些數(shù)據(jù)。在Visual Basic 中,用變量數(shù)據(jù)
5、。變量有名字和數(shù)據(jù)類型。變量名用于變量;變量的數(shù)據(jù)類型用于確定變量所能的數(shù)據(jù)種類。變量是內(nèi)存中存放未知值的容器。program 每次運(yùn)行時(shí),產(chǎn)生的值存放到變量中。2變量名變量名名規(guī)則:必須以字母開頭;不能包含;不得超過(guò) 255 個(gè)字符;在同一范圍內(nèi)必須是唯一的。返回在變量命名時(shí),可給變量加前綴,表明變量的數(shù)據(jù)類型。數(shù)據(jù)類型的前綴和類型符如下所示:無(wú) 數(shù) 雙 日 貨 字 邏 數(shù)據(jù) 精 期 幣 節(jié) 輯 據(jù)類 度 型 型 型 型 類返回型 型型前綴前綴類型符無(wú)類型符無(wú)無(wú)變 字 單 對(duì) 長(zhǎng) 整體 符 精 象 整 型型 型 度 型 型型無(wú)eger Long Object Single String Va
6、riant%lng obj sng str vnt&blnByte byt Currency Date Time Double!cur dtm dbl$#四、數(shù)組數(shù)組是一組相同數(shù)據(jù)類型的變量的集合。數(shù)組有一個(gè)數(shù)組名,用數(shù)組名和下標(biāo)(元素在數(shù)組中的序號(hào))來(lái)數(shù)組中的每個(gè)元素。數(shù)組有上下界,數(shù)組的元素在上下界中是連續(xù)的。系統(tǒng)為每個(gè)元素分配空間。在同類型大批數(shù)據(jù)處理時(shí),數(shù)組和循環(huán)語(yǔ)句結(jié)合使用,使 program 更為簡(jiǎn)潔。例如: 一個(gè)數(shù)組 A 有 5 個(gè)元素,在數(shù)學(xué)上以數(shù)集的形式 表 示 為A=ei i=1,2,3,4,5 , 其 中12,345a1=e ,a2=e a3=e ,a4=e ,a5=e
7、。返回五、常用函數(shù)Visual Basic 提供了大量的函數(shù)(標(biāo)準(zhǔn)函數(shù))。這些函數(shù)都是一些常用的函數(shù)或算法, 系統(tǒng)已編好 program,放入庫(kù)中供用戶 program 調(diào)用。用戶調(diào)用時(shí),給出參數(shù)即可。函數(shù)庫(kù)中的函數(shù)分為數(shù)值型函數(shù)、字符型函數(shù)、日期函數(shù)、轉(zhuǎn)換函數(shù)和格式輸出函數(shù)。以下將介紹一些常用的函數(shù),其他的函數(shù)用戶可瀏覽“幫助”菜單。1 數(shù)值型函數(shù)數(shù)值型函數(shù)的定義與用例見(jiàn)表 8-1:表 8-1數(shù)值型函數(shù)平方根函數(shù)Sqr(n)函數(shù)名稱函數(shù)函 數(shù) 值示例絕對(duì)值函數(shù)Abs(n)nn0-nn0Abs(23)=23 Abs(-123)=123指數(shù)函數(shù)Exp(n)enExp(2)= 7.3890對(duì)數(shù)函數(shù)
8、Log(n)n0Log(7.389)=1.99999間的數(shù)取整函數(shù)(n)取不大于 n 的整數(shù)(12.5)=12(-12.5)=-13四舍五入取整函數(shù)Roun d(n)n 先四舍五入再取整Round(15.5)=16 Round(-15.5)=-16正弦函數(shù)Sin(n)n 的正弦函數(shù)值Sin(3.14/2)=0.9 9999余弦函數(shù)Cos(n)n 的余弦函數(shù)值Cos(0)=1正切函數(shù)Tan(n)n 的正切函數(shù)值Tan(3.14/4)=0.9 9920六、運(yùn)算符與表達(dá)式program 中計(jì)算的算式(表達(dá)式)是用運(yùn)算符和運(yùn)算對(duì)象所組成的。Visual Basic 中運(yùn)算符和算式有自身的組成規(guī)則。1運(yùn)
9、算符Visual Basic 中有四類運(yùn)算符:算術(shù)運(yùn)算符、字符串運(yùn)算符、關(guān)系運(yùn)算符和邏輯運(yùn)算符。(1) 算術(shù)運(yùn)算符:算術(shù)運(yùn)算符有:加(+)、減(-)、乘(*)、除(/)、整除()、乘方()、取模(Mod)。有些運(yùn)算符與通常運(yùn)算符的符號(hào)不同,但功能與通常意義上的運(yùn)算符基本相同。減號(hào)“-”有兩個(gè)運(yùn)算對(duì)象(雙目運(yùn)算)時(shí),作減號(hào);在單目運(yùn)算時(shí),作負(fù)號(hào)。除法分為一般的除法和整除兩種,并用不同的除號(hào)加以區(qū)分。乘方的符號(hào)()加在底數(shù)和冪之間。例如:53 表示 53。取模(Mod)的結(jié)果是兩個(gè)數(shù)相除的余數(shù)。例如:20 Mod 6=2。算術(shù)運(yùn)算符的優(yōu)先級(jí)(高低):乘方負(fù)號(hào)(單目減號(hào))乘、除整除取模加、減例如:1
10、00+”123”=223100+”ab” 系統(tǒng)給出“類型不匹配”的信息字符運(yùn)算符:字符運(yùn)算符有:&和+。這兩個(gè)運(yùn)算符的功能是將字符串連接起來(lái)。關(guān)系運(yùn)算符:關(guān)系運(yùn)算符的功能是對(duì)運(yùn)算對(duì)象進(jìn)行大小的比較,當(dāng)關(guān)系成立時(shí),返回 True;關(guān)系不成立時(shí),返回 False。在 Visual Basic 中,True 用-1 表示;False用 0 表示。運(yùn)算對(duì)象可以是數(shù)值型、字符型。關(guān)系運(yùn)算符有:等于(=)、大于()、大于等于(=)、小于()、小于等于(=)、不等于()、字符串匹配 Like。關(guān)系運(yùn)算符的優(yōu)先級(jí)相同,其中 Like 的功能是在運(yùn)算符左邊的字符串中查找運(yùn)算符右邊的字符串,有就返回“True”;
11、沒(méi)有就返回“False”。Like 可與通配符“?”、“*”、“#”、字符列表、!字符列表結(jié)合使用,進(jìn)行模糊查詢。邏輯運(yùn)算符:邏輯運(yùn)算符有:取反(Not)、與(And)、或(Or)。主要用于多個(gè)關(guān)系表達(dá)式的邏輯判斷。其中 Not 為單目運(yùn)算。邏輯運(yùn)算的結(jié)果返回邏輯值:True 或 False。返回Not:只有一個(gè)運(yùn)算對(duì)象(單目運(yùn)算),對(duì)運(yùn)算對(duì)象做取反操作。And:所有運(yùn)算對(duì)象為 True 時(shí),結(jié)果為 True;否則,結(jié)果為 False。Or :所有運(yùn)算對(duì)象中,僅當(dāng)所有的運(yùn)算對(duì)象為 False,結(jié)果才會(huì)為 False;其它為 True;邏輯運(yùn)算符的優(yōu)先級(jí)(高低):NotAndOr。例如: Not
12、 “abc”ef” 的結(jié)果為:True?!癮bc”ef” And 1234”123”的結(jié)果為:False?!癮bc”ef” Or 1234”123”的結(jié)果為:True。2表達(dá)式表達(dá)式的定義:表達(dá)式是由常量、變量、運(yùn)算符、函數(shù)和圓括號(hào)等組成。通過(guò)運(yùn)算,表達(dá)式最終有一個(gè)結(jié)果,即表達(dá)式的值。表達(dá)式值的類型取決運(yùn)算對(duì)象和運(yùn)算符。表達(dá)式的表示:表達(dá)式的書寫應(yīng)根據(jù)Visual Basic中的規(guī)定。還應(yīng)注意: 乘號(hào)不能省略。 只能使用圓括號(hào)。在一個(gè)表達(dá)式中可以出現(xiàn)多對(duì)圓括號(hào);左右括號(hào)要配對(duì)。 表達(dá)式所有內(nèi)容在同一行上。例如:第三節(jié) 基本控制語(yǔ)句第四節(jié) 過(guò)程將 program 分割成較小的邏輯就可以簡(jiǎn)化 pr
13、ogram 設(shè)計(jì)任務(wù)。稱這些為過(guò)程,它們可以變成增強(qiáng)和擴(kuò)展 Visual Basic 的構(gòu)件。過(guò)程可用于壓縮重復(fù)任務(wù)或共享任務(wù),例如,壓縮頻繁的計(jì)算、文本與控件操作和數(shù)據(jù)庫(kù)操作。采用過(guò)程進(jìn)行編程的優(yōu)點(diǎn):過(guò)程將 program 劃分成離散的功能模塊,獨(dú)立的模塊使整個(gè)program 容易調(diào)試。一個(gè) program 中的過(guò)程,可以容易地成為另一個(gè) program 的構(gòu)件。在 Visual Basic 中通常有幾種過(guò)程: Sub (子過(guò)程)、Function(函數(shù))過(guò)程、 Property (屬性)過(guò)程和 event(事件)過(guò)程。前面已多次使用了事件過(guò)程,當(dāng)發(fā)生某事件(如 Click、DblClick
14、、Load 等)時(shí),對(duì)該事件做出響應(yīng)的 program 段稱作事件過(guò)程。這種事件過(guò)程了 Visual Basic 應(yīng)用 program 的主體。當(dāng)多個(gè)不同的事件過(guò)程需要使用一段相同的 program 代碼時(shí),把這一段代碼獨(dú)立出來(lái),作為一個(gè)過(guò)程,這種過(guò)程則稱為“通用過(guò)程”( General procedure),它可以單獨(dú)建立,供事件過(guò)程調(diào)用。通用過(guò)程告訴應(yīng)用 program 如何完成一項(xiàng)指定的任務(wù)。一旦確定了通用過(guò)程,就必須專由應(yīng)用 program 來(lái)調(diào)用。而 Visual Basic 中,通用過(guò)程又分為兩類,即子過(guò)程(Sub 過(guò)程)和函數(shù)過(guò)程(Function 過(guò)程)。本節(jié)將介紹通用過(guò)程的定
15、義、調(diào)用和參數(shù)傳送。一、子(Sub)過(guò)程的定義、調(diào)用子過(guò)程是在響應(yīng)事件時(shí)執(zhí)行的代碼塊。將模塊中的代碼分成子過(guò)程后,在應(yīng)用 program 中查找和修改代碼變得更容易了。1.子過(guò)程的定義子過(guò)程的結(jié)構(gòu)與前幾節(jié)介紹的事件過(guò)程的結(jié)構(gòu)類似,其定義語(yǔ)句的語(yǔ)法格式:Private | Public | Friend S語(yǔ)句塊 Exit Sub 語(yǔ)句塊End Sub其中:ic Sub 過(guò)程名(參數(shù)列表)(1)Sub 語(yǔ)句用來(lái)子過(guò)程的名稱、參數(shù)和其主體的代碼。每個(gè)子過(guò)程以 Sub 關(guān)鍵字開頭,以 End Sub 關(guān)鍵字結(jié)束。在 Sub 和 End Sub 之間是描述過(guò)程操作的語(yǔ)句塊,稱為“過(guò)程體”,每次調(diào)用過(guò)程
16、都會(huì)執(zhí)行過(guò)程體。當(dāng) program 執(zhí)行到 End Sub 時(shí),將退出該過(guò)程,返回到調(diào)用語(yǔ)句的下一語(yǔ)句;如果過(guò)程體中含有 Exit Sub 語(yǔ)句,當(dāng) program 執(zhí)行到 Exit Sub 時(shí),也退出該過(guò)程,返回到調(diào)用語(yǔ)句的下一語(yǔ)句。例如定義一個(gè)計(jì)算半徑為 4 厘米的圓面積的子過(guò)程,定義格式如下:Private Sub circle_area() s=3.14159*42End Sub過(guò)程名,是一個(gè)長(zhǎng)度不超過(guò) 40 個(gè)字符的變量名,在同一個(gè)模塊中,同一個(gè)變量名不能既作子過(guò)程名又用作函數(shù)過(guò)程名。參數(shù)列表(可選的),代表在調(diào)用時(shí)要傳遞給子過(guò)程的參數(shù)的變量列表。在變量列表中含有在調(diào)用時(shí)傳送給該過(guò)程
17、的簡(jiǎn)單變量名或數(shù)組名,各名字之間用逗號(hào)隔開?!皡?shù)列表”指明了調(diào)用時(shí)傳送給過(guò)程的參數(shù)類型和個(gè)數(shù),每個(gè)參數(shù)的格式為:ByVal | ByRef 變量名( )As 數(shù)據(jù)類型“變量名”前面的“ByVal | ByRef”是可選的,如果加上“ByVal”,則表明該參數(shù)是“傳值”(Passed by Value)參數(shù),沒(méi)有加“ByVal”或加“ByRef”的參數(shù)稱為“”(Passed by reference)參數(shù)。“變量名”如果是數(shù)組,則要在數(shù)組名后加上一對(duì)括號(hào)?!皵?shù)據(jù)類型”指的是變量的類型,可以是 Byte、eger、Long、Currency、Single、Double、Decimal(目前尚不支
18、持)、Date、String、 Object 或 Variant。或用戶定義的類型。如果省略“As 數(shù)據(jù)類型”,則缺省為 Variant。例如定義一個(gè)計(jì)算任意半徑的圓面積的帶參子過(guò)程,定義格式如下:Private Sub circle_area(ByVa s=3.14159*r2End Subsingle)(4) Sic 指定過(guò)的局部變量在內(nèi)存中的缺省方式。使用了 Sic,則過(guò)的局部變量就是“Sic”型的,即在每次調(diào)用過(guò)程時(shí),局部變量的值保持不變;如果省略“Sic”,則局部變量就缺省為“自動(dòng)”的,即在每次調(diào)用過(guò)程時(shí),局部變量被初始化為 0 或空字符串。Sic 屬性對(duì)在 Sub 過(guò)程之外定義的同
19、名變量沒(méi)有影響,即使這些變量在過(guò)使用。(5) Private | Public | Friend參數(shù)的含義。Public 表示子過(guò)程是公有過(guò)程,所有模塊的所有其它過(guò)程都可這個(gè)子過(guò)程。Private 表示子過(guò)程是私有過(guò)程,只能被包含其的模塊中的其它過(guò)程,不能被其它模塊中的過(guò)程。子過(guò)程可以放入標(biāo)準(zhǔn)模塊、類模塊和窗體模塊中(有關(guān)模塊說(shuō)明詳見(jiàn)本節(jié)“過(guò)程的作用域”的小字注釋)。按照缺省規(guī)定,所有模塊中的子過(guò)程為 Public(公用的),這意味著在應(yīng)用 program 中可隨處調(diào)用它們。注意:子過(guò)程不能嵌套定義,但可以嵌套調(diào)用。即在子過(guò)程的定義內(nèi),不能定義子過(guò)程或函數(shù)過(guò)程,但可以調(diào)用它們。2. 在 Vis
20、ual Basic 中建立一個(gè)過(guò)程的操作定義 Sub 過(guò)程的操作方法有如下兩種。返回方法一,利用工具菜單中的“添加過(guò)程”命令定義過(guò)程:?jiǎn)螕簟肮こ?添加模塊”菜單命令,彈出“模塊(代碼)”窗口;再單擊“工具/添加過(guò)程”,彈出“添加過(guò)程”所示???,如圖 8-38在“名稱”框內(nèi)輸入要建立的過(guò)程的名字;在“類型”欄內(nèi)選擇要建立的過(guò)程的類型,如果建立子過(guò)程,則應(yīng)選擇“子 program(S)”;在“范圍”欄內(nèi)選擇過(guò)程的適用范圍為“公有的(B)”;單擊“確定”按鈕,將打開模塊代碼窗口。如圖 8-39 此時(shí)可以在 Sub 和 End Sub之間鍵入 program 代碼(與事件過(guò)程的代碼輸入相同)。方法二,
21、通過(guò)“工程/添加模塊”命令打開標(biāo)準(zhǔn)模塊代碼窗口,然后在“(通用)/()”狀態(tài)下直接輸入過(guò)程。如進(jìn)行圓面積過(guò)程的定義,進(jìn)入模塊代碼窗口后,在“(通用)/(聲明)”狀態(tài)下,直接在窗口內(nèi)輸入:“Public Sub circle_area()”,然后按回車鍵,窗口內(nèi)顯示:Public Sub circle_area()End Sub此時(shí)在 Sub 與 End Sub 之間輸入過(guò)程體代碼。如果建立窗體級(jí)的通用過(guò)程,則雙擊窗體進(jìn)入窗體代碼窗口,然后在“(通用)/(3. 子過(guò)程的調(diào)用)”狀態(tài)下直接輸入過(guò)程。(1)調(diào)用子過(guò)程有兩種格式: Call 子過(guò)程名(實(shí)參列表)子過(guò)程名 實(shí)參列表注意,當(dāng)使用 Call
22、 語(yǔ)法時(shí),參數(shù)必須在括號(hào)內(nèi)。若省略 Call 關(guān)鍵字,則必須省略參數(shù)兩邊的括號(hào)。若實(shí)參要獲得子過(guò)程的返回值,則實(shí)參只能是變量,不能是常量、表達(dá)式或控件名。實(shí)參列表與形參列表中的實(shí)參與形參的個(gè)數(shù)必須相同,類型也必須相同。(2)調(diào)用其它模塊中的過(guò)程在“過(guò)程作用域”部分介紹。例 8.16 已知多邊形的各條邊的長(zhǎng)度,要計(jì)算多邊形的面積,如圖8-40 所示。分析:任意多邊形可以分解為若干個(gè)三角形,多邊形面積就是這若干個(gè)三角形面積之和。計(jì)算機(jī)三角形面積的公式是:返回其中,x、y、z 為任意三角形的三條邊,c 為三角形周長(zhǎng)的一半。圖 8-40 所示的多邊形由 4 個(gè)三角形組成,而三角形面積的計(jì)算公式是相同的
23、,因此,可以編寫一個(gè)通用的三角形面積計(jì)算過(guò)程,對(duì)不同邊長(zhǎng)的三角形分別調(diào)用此過(guò)程即可求出它們的面積,然后再累加,就得到多邊形的面積。解:三角形面積計(jì)算為帶參子過(guò)程,定義如下*三角形面積計(jì)算的 Sub 過(guò)程Public Sub area(s, x, y, z)c =s = End1 / 2 * (x + y + z)sqrt(c * (c - x) * (c - y) * (c - z) Sub設(shè)計(jì)一窗體為主 program 運(yùn)行,含多邊形邊長(zhǎng)輸入和啟動(dòng)多邊形面積計(jì)算的觸發(fā)按鈕,如圖 8-41 所示。Dim dat(10) Private SubFor j = 1 To 9d1_Click()la
24、1$ = 第 + Str(j) + 條線dat(j) = InputBox(la1$, 邊長(zhǎng)劃線輸入) Next jEnd SubPrivate Subd2_Click()a = dat(1): b = dat(2): c = dat(3)Call area(s, a, b, c) 第tota = 0式調(diào)用過(guò)程For j = 1 To 4 -1tota = s +a = c: b =tota dat(jb, c* 2 + 2): c = dat(j * 2 + 3)第二種方式調(diào)用過(guò)程areaNext Prs, a,j多邊形面積=; totaEnd Sub二、函數(shù)(Function)過(guò)程的定義、
25、調(diào)用Visual Basic 除了提供許多函數(shù)(如:Sqr、Cos、Chr)供使用者調(diào)用之外,還允許使用者用 Function 語(yǔ)句編寫自己的Function 過(guò)程。1.定義函數(shù)過(guò)程函數(shù)過(guò)程定義的語(yǔ)法格式:Private|Public S As 類型語(yǔ)句塊過(guò)程名=返回值 Exit Function 語(yǔ)句塊過(guò)程名=返回值End Function函數(shù)過(guò)程由 Function 語(yǔ)句碼,其中:ic Function 過(guò)程名 (參數(shù)列表)它的名稱、參數(shù)以及其主體的代函數(shù)過(guò)程以 Function 關(guān)鍵字開頭,以 End Function 關(guān)鍵字結(jié)束,兩者之間的語(yǔ)句是描述過(guò)程操作的“函數(shù)過(guò)程體”。格式中的“
26、過(guò)程名”、“參數(shù)列表”、“Public”、“Private”、“Sic”、“Exit Function”的含義與子過(guò)相同?!癆s 類型”定義函數(shù)過(guò)程返回值的數(shù)據(jù)類型,可以是 Byte、布爾eger、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(除定長(zhǎng))、Object、Variant或任何用戶定義類型。如省略,則為 Variant。與子過(guò)程不同,函數(shù)過(guò)程直接返回一個(gè)值到調(diào)用處,因此在函數(shù)過(guò)程體中至少要對(duì)“過(guò)程名”賦一次返回值,語(yǔ)句形式為:“過(guò)程名=表達(dá)式”。如果沒(méi)有對(duì)過(guò)程名賦值,則過(guò)程將返回一個(gè)缺省值:數(shù)值函數(shù)返回 0,字符串函數(shù)
27、返回一個(gè)零長(zhǎng)度字符串 (),Variant函數(shù)則返回 Empty。實(shí)參列表與形參列表中的實(shí)參與形參的個(gè)數(shù)必須相同,類型也必須相同。函數(shù)過(guò)程不能嵌套定義,但能在過(guò)程內(nèi)調(diào)用通用過(guò)程。函數(shù)過(guò)程可以遞歸調(diào)用。2.建立函數(shù)過(guò)程的操作建立函數(shù)過(guò)程的操作與建立子過(guò)程的操作方法相同,只是當(dāng)用第一種方法建立時(shí),在“添加過(guò)程”如圖 8-42 所示。3.調(diào)用函數(shù)過(guò)程函數(shù)過(guò)程的調(diào)用同 Visual Basic下:函數(shù)過(guò)程名(參數(shù)列表)框的“類型”欄內(nèi)選擇“函數(shù)”。函數(shù)調(diào)用的方法一樣。格式如由于函數(shù)過(guò)程名返回一個(gè)值,所以函數(shù)過(guò)程不能作為單獨(dú)的語(yǔ)句使用,只能作為表達(dá)式或表達(dá)式中的一部分來(lái)使用。三、參數(shù)傳送在調(diào)用一個(gè)過(guò)程時(shí)
28、,必須把實(shí)際參數(shù)傳遞給過(guò)程,完成形式參數(shù)(簡(jiǎn)稱:形參)和實(shí)際參數(shù)(簡(jiǎn)稱:實(shí)參)的結(jié)合,然后用實(shí)參執(zhí)行調(diào)用的過(guò)程。形參是在子過(guò)程或函數(shù)過(guò)程的定義中出現(xiàn)的變量名,實(shí)參則是在調(diào)用子過(guò)程或函數(shù)過(guò)程時(shí)傳送給子過(guò)程或函數(shù)過(guò)程的常數(shù)、變量、表達(dá)式或數(shù)組。在 Visual Basic 中,實(shí)參和形參結(jié)合的方法有:傳址(ByRef)或傳值(ByVal),其中傳址又稱為。區(qū)分兩種參數(shù)傳送方式的方法是在定義的形參前加“ByDef”或 “ByVal”關(guān)鍵字。1.傳址傳址的結(jié)合過(guò)程是:調(diào)用一個(gè)過(guò)程時(shí),將實(shí)參的地址傳遞給形參,這就使過(guò)程體的是對(duì)應(yīng)的實(shí)際變量。因此,實(shí)參的值會(huì)隨過(guò)程體內(nèi)對(duì)形參的改變而改變。傳址方式是通過(guò)關(guān)鍵
29、字 ByRef 來(lái)定義的。在定義通用過(guò)程時(shí),如果形參前面有關(guān)鍵字 ByRef 或缺省,則該參數(shù)用傳址方式傳送。VisualBasic 在缺省情況下,變量(簡(jiǎn)單變量、數(shù)組或數(shù)組元素以及)都是通過(guò)“”傳送給子過(guò)程或函數(shù)過(guò)程,因此可以通過(guò)改變過(guò)相應(yīng)的參數(shù)來(lái)改變?cè)撟兞康闹怠?.傳值傳值的結(jié)合過(guò)程是,調(diào)用一個(gè)過(guò)程時(shí),將實(shí)參的值而不是地址傳遞給形參。被調(diào)用過(guò)程的操作是在形參自己的單元中進(jìn)行,當(dāng)過(guò)程調(diào)用結(jié)束時(shí),這些形參所占用的單元也同時(shí)被。由于通用過(guò)程沒(méi)有實(shí)參的原始地址,因而不會(huì)改變?cè)瓉?lái)實(shí)參的值,所有變化都是在實(shí)參的副本上進(jìn)行的。3.數(shù)組參數(shù)的傳送Visual Basic 允許參數(shù)是數(shù)組,數(shù)組一般通過(guò)傳址方
30、式傳送。在傳送數(shù)組時(shí),除了遵守參數(shù)傳送的一般規(guī)則外,還應(yīng)注意以下事項(xiàng): (1)在實(shí)參列表和形參列表中放入數(shù)組名,忽略維數(shù)的定義,但圓括號(hào)不能省略。(2)如果被調(diào)用過(guò)程不知道實(shí)參數(shù)組的上下界,可用 Lbound 和Ubound 函數(shù)確定實(shí)參數(shù)組的下界和上界。例 8.19 編寫一函數(shù)過(guò)程,求任意一維數(shù)組的最小值元素。用窗體單擊事件調(diào)用函數(shù)。解:函數(shù)過(guò)程 programPublic Function Fmin(a() Aseger)Dim minFormin Aseger, i Aseger= a(LBound(a)i = LBound(a) To UBound(a)If min a(i) Then
31、 min = a(i) Next iFmin = min End Function窗體單擊事件過(guò)程 Private Sub Form_Click() Dim a%(3 To 9), i%For i = 3 To 9la1$ a(i) NextPr= 第 + Str(i - 2) + 個(gè)數(shù)= InputBox(la1$, 數(shù)組輸入) i最小值:; Fmin(a()End Sub返回(3)如果只傳送數(shù)組中某個(gè)元素給被調(diào)用過(guò)程,則在實(shí)參列表的數(shù)組名后的括號(hào)中寫上指定元素的下標(biāo)。4.其他參數(shù)傳送VB 提供了十分靈活和安全的參數(shù)傳送方式,允許使用可變參數(shù)和指名參數(shù)傳送。在調(diào)用一個(gè)過(guò)程時(shí),可以向過(guò)程傳送可
32、選的參數(shù)或者任意數(shù)量的參數(shù),并可指定要傳送的參數(shù)的名字。有關(guān)這方面的使用請(qǐng)參閱 Visual Basic 的語(yǔ)言參考手冊(cè)。四、過(guò)程的作用域Visual Basic 的應(yīng)用 program 由若干個(gè)過(guò)程組成,這些過(guò)程一般保存在窗體文件(.frm)、標(biāo)準(zhǔn)模塊文件(.bas)或類模塊中*。一個(gè) VB應(yīng)用 program 的一般組成描述如圖 8-43 所示。一個(gè)過(guò)程所處的位置不同,可被的范圍就不同。過(guò)程可被的范圍稱為過(guò)程的作用域。過(guò)程的作用域分為:窗體/模塊級(jí)和全局級(jí)。1.窗體/模塊級(jí)的過(guò)程在某個(gè)窗體或標(biāo)準(zhǔn)模塊內(nèi)定義子過(guò)程或函數(shù)過(guò)程時(shí),在其語(yǔ)句(Sub 語(yǔ)句或 Function 語(yǔ)句)前加上關(guān)鍵字 P
33、rivate,則稱過(guò)程為窗體或模塊級(jí)過(guò)程。這些過(guò)程只能被本窗體(在本窗體內(nèi)定義)或本標(biāo)準(zhǔn)模塊(在本標(biāo)準(zhǔn)模塊內(nèi)定義)中的過(guò)程調(diào)用,其調(diào)用方法見(jiàn)本節(jié)子過(guò)程、函數(shù)過(guò)程的定義和調(diào)用介紹。2.全局級(jí)的過(guò)程在某個(gè)窗體或標(biāo)準(zhǔn)模塊內(nèi)定義子過(guò)程或函數(shù)過(guò)程時(shí),在其語(yǔ)句(Sub 語(yǔ)句或 Function 語(yǔ)句)前加上關(guān)鍵字 Public(或缺?。?,則稱過(guò)程為全局級(jí)(公用)過(guò)程。全局級(jí)過(guò)程可供該應(yīng)用 program 的所有窗體和所有標(biāo)準(zhǔn)模塊中的過(guò)程調(diào)用,但過(guò)程定義所在的位置不同,其調(diào)用方式則不同。全局級(jí)過(guò)程的調(diào)用方法:對(duì)于窗體中定義的全局級(jí)過(guò)程,外部過(guò)程(本窗體之外的其他過(guò)程)要調(diào)用時(shí),必須在被調(diào)用的過(guò)程名前加該過(guò)程
34、所處的窗體名。如窗體模塊 Form1 中包含了 SomeSub 過(guò)程,則可使用下面的語(yǔ)句調(diào)用 Form1 中的過(guò)程:Call Form1.SomeSub(arguments)對(duì)于在標(biāo)準(zhǔn)模塊中定義的全局級(jí)過(guò)程,外部過(guò)程均可調(diào)用。如果過(guò)程名是唯一的(過(guò)程僅出現(xiàn)在一個(gè)地方,這個(gè)過(guò)程就是唯一的),調(diào)用時(shí)則直接過(guò)程名。如果兩個(gè)以上的模塊都包含同名的過(guò)程,調(diào)用時(shí)就要在過(guò)程名前該過(guò)程所處的模塊名。例如,對(duì)于 Module1和 Module2 中名為 CommonName 的過(guò)程, 從 Module2 中調(diào)用CommonName 則運(yùn)行 Module2 中的 CommonName 過(guò)程, 而不是Module1
35、 中的 CommonName 過(guò)程。若在 Module1 中調(diào)用中的 CommonName 過(guò)程,要用下面的語(yǔ)句:Module2CallmonName (arguments)不同作用域的過(guò)程調(diào)用有關(guān)規(guī)則見(jiàn)表 8-27。表 8-27 不同作用范圍的兩種過(guò)程定義及調(diào)用規(guī)則作用范圍模塊級(jí)全局級(jí)窗體標(biāo)準(zhǔn)模塊窗體標(biāo)準(zhǔn)模塊定義方式過(guò)程名前加 Private例:Private Sub My1(形參表)過(guò)程名前加 Public 或缺省例:Public Sub My (形參表)能否被本模塊其他過(guò)程調(diào)用能能能能能否被本應(yīng)用 program 其他模塊調(diào)用不能不能能,但必須在過(guò)程名前加窗體名,例:Call 窗體名.M
36、y (實(shí)參表)能,過(guò)程名唯一,直接,過(guò)程名不唯一,則必須在過(guò)程名前加標(biāo)準(zhǔn)模塊名,例:Call 標(biāo)準(zhǔn)模塊名. My (實(shí)參表)返回五、遞歸1.遞歸的概念用自身的結(jié)構(gòu)來(lái)描述自身就稱為“遞歸”。例如對(duì)階乘運(yùn)算的定義,顯然,用“階乘”本身定義階乘,這樣的定義就稱為遞歸定義。2.子過(guò)程和函數(shù)過(guò)程的遞歸調(diào)用所謂遞歸調(diào)用就是一個(gè)過(guò)程調(diào)用過(guò)程本身。在遞歸調(diào)用中,一個(gè)過(guò)程執(zhí)行的某一步要用到它自身的上一步(或上幾步)的結(jié)果。VisualBasic 允許一個(gè)自定義的子過(guò)程或函數(shù)過(guò)程在過(guò)程體的調(diào)用自己,這樣的子過(guò)程或函數(shù)過(guò)程稱為遞歸子過(guò)程或遞歸函數(shù)過(guò)程。對(duì)于具有遞歸特性,可以采用遞歸調(diào)用描述和解決它們。遞歸調(diào)用在完成
37、階乘運(yùn)算、級(jí)數(shù)運(yùn)算、冪指數(shù)運(yùn)算等方面非常方便。遞歸分為兩種類型,一種是直接遞歸,即在過(guò)調(diào)用過(guò)程本身;一種是間接遞歸,即間接地調(diào)用一個(gè)過(guò)程。例如第一個(gè)過(guò)程調(diào)用了第二個(gè)過(guò)程,而第二個(gè)過(guò)程又回過(guò)頭來(lái)調(diào)用第一個(gè)過(guò)程。Visual Basic 支持上述兩種類型的遞歸。但由于內(nèi)存的限制,對(duì)于低版本的 VB,如果超過(guò)規(guī)定的遞歸次數(shù),則產(chǎn)生“堆棧溢出”錯(cuò)誤。例 8.21 編寫計(jì)算 n!的遞歸函數(shù)過(guò)程,用窗體單擊事件啟動(dòng)數(shù)據(jù)輸入和調(diào)用階乘遞歸函數(shù)過(guò)程。分析:根據(jù)階乘的數(shù)學(xué)定義,負(fù)數(shù)的階乘沒(méi)有定義,0 的階乘為 1,正數(shù) n 的階乘為:n*(n-1)*(n*2)*2*1可以寫成如下形式:解:利用上式,求n 的階乘
38、可以轉(zhuǎn)換為求n(n-1)!,因此,fact(n)=n!的函數(shù)過(guò)程如下。PublicFunction fact(n As1 Or n = 0 Then 1eger) AsegerIf n fact Elsefact=n * fact(n - 1)End IfEnd Function窗體單擊事件過(guò)程(輸入數(shù)據(jù)和調(diào)用函數(shù)過(guò)程)Private Sub Form_click()Dima =a Aseger, accu AsegerInputBox(輸入求階乘數(shù):)If a = 0 And a 1 時(shí),連續(xù)調(diào)用 fact()自身共n-1 次,直到 n=1 為止。假設(shè) n=4,fact(4)的執(zhí)行過(guò)程如圖
39、8-44所示??梢?jiàn),在 fact(4)的求解過(guò)遞推與回歸各持續(xù)了三次。因此,遞歸求解分為兩個(gè)階段。第一階段是“遞推”,即把求 n 的階乘表示為求(n-l)階乘的函數(shù),而(n-1)的階乘仍然不知道,還要“遞推”,直到 1 的階乘。此時(shí) Fact(1)的值為已知,不必再“推”了。然后開始第二階段,采用“回歸”方法,從 1 的階乘(1)推算出 2 的階乘(2),再推算出 3 的階乘(6),一直到推算出 n 的階乘值為止。在計(jì)算機(jī)中,遞歸處理是通過(guò)棧來(lái)實(shí)現(xiàn)的。棧中存放形參、局部變量、調(diào)用結(jié)束時(shí)的返回地址。每調(diào)用一次自身,計(jì)算機(jī)把當(dāng)前參數(shù)壓進(jìn)棧,直到達(dá)到遞歸結(jié)束條件,這個(gè)過(guò)程叫遞推過(guò)程;然后不斷從棧出當(dāng)
40、前參數(shù),直到棧空,這個(gè)過(guò)程叫回歸過(guò)程。那么,遞歸處理要經(jīng)過(guò)多少次遞推與回歸才結(jié)束遞歸過(guò)程?顯而易見(jiàn),如果不要求遞歸過(guò)程進(jìn)行下去,就必須有一個(gè)結(jié)束遞歸過(guò)程的條件。在例 8.21 中是通過(guò)“If n = 1 Or n = 0 Then fact= 1”語(yǔ)句實(shí)現(xiàn)遞歸的結(jié)束。由此可見(jiàn)(1)遞歸結(jié)束條件及結(jié)束時(shí)的值;遞歸的條件如下:(2)能用遞歸形式表示,并且遞歸向結(jié)束條件發(fā)展。 注意:遞歸算法設(shè)計(jì)簡(jiǎn)單,但消耗的計(jì)算機(jī)機(jī)時(shí)和占據(jù)的內(nèi)存空間比非遞歸的 program 大。設(shè)計(jì)一個(gè)正確的遞歸子過(guò)程或函數(shù)過(guò)程必須注意兩個(gè)要點(diǎn):一要具備遞歸條件;二要具備遞歸結(jié)束的條件。第五節(jié) 窗體與基本控件第六節(jié) 綜合應(yīng)用舉例
41、常用算法是學(xué)習(xí) program 設(shè)計(jì)的基礎(chǔ),結(jié)合臨床醫(yī)學(xué)與基礎(chǔ)醫(yī)學(xué)的研究需求,本節(jié)將介紹一些常用算法的應(yīng)用,并結(jié)合窗體控件和界面設(shè)計(jì)方法進(jìn)行綜合舉例。一、排序排序是將一組數(shù)按遞增或遞減的次序排列。常用的排序算法有:選擇法排序、冒泡法排序、 法排序、合并排序等,這里介紹冒泡法排序。冒泡法排序的算法步驟是:(1)每輪排序從最后的兩個(gè)數(shù)開始,將相鄰的數(shù)比較,當(dāng)次序不對(duì)就交換兩數(shù)的位置,出了內(nèi)循環(huán),最小數(shù)就冒出來(lái)排在第一位置。 (2)除第 1 個(gè)數(shù)外,其余 n-1 個(gè)數(shù)再按步驟(1)的方法冒出次小的數(shù)排在第二位置。(3)重復(fù)步驟(1)n-1 次,就二、數(shù)據(jù)查找遞增序列。查找是性表中,根據(jù)指定關(guān)鍵值,找出與其值相同的元素,一般有順序查找和二分查找。方法來(lái)檢索需要的書。館內(nèi)的書籍?dāng)?shù)據(jù)庫(kù)就可以用查找的三、數(shù)值積分與曲線下的面積計(jì)算數(shù)值積分是用近似計(jì)算方法,解決定積分計(jì)算問(wèn)題,常用的方法有矩形法、梯形法、拋物(又稱生法)等。按積分劃分的區(qū)間,又有定長(zhǎng)和變長(zhǎng)的不同實(shí)現(xiàn)方法。這里介紹用定長(zhǎng)的梯形法計(jì)算的積分。在醫(yī)學(xué)研究中,時(shí)常會(huì)遇到要求某信號(hào)曲線下的面積,此時(shí),可以運(yùn)用上面的積分求解過(guò)程來(lái)解決此類問(wèn)題。四、分類統(tǒng)計(jì)分類統(tǒng)計(jì)也是經(jīng)常遇到的運(yùn)算,它是在一批數(shù)據(jù)中按分類的條件統(tǒng)計(jì)每一類中包含
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 洞見(jiàn)趨勢(shì) 解碼未來(lái)福利-2023年企業(yè)福利策略和管理趨勢(shì)調(diào)研報(bào)告
- 防震知識(shí)課件教學(xué)課件
- 設(shè)計(jì)營(yíng)銷課件教學(xué)課件
- 股份置換協(xié)議書(2篇)
- 南京工業(yè)大學(xué)浦江學(xué)院《稅務(wù)稽查》2022-2023學(xué)年第一學(xué)期期末試卷
- 集控化驗(yàn)辦公樓施工組織設(shè)計(jì)
- 防災(zāi)減災(zāi)說(shuō)課稿
- 宿淮高速收費(fèi)大棚施工組織設(shè)計(jì)
- 《軸對(duì)稱》說(shuō)課稿
- 【初中化學(xué)】化石能源的合理利用課件-2024-2025學(xué)年九年級(jí)化學(xué)人教版(2024)上冊(cè)
- 我國(guó)綠色化工未來(lái)發(fā)展戰(zhàn)略與思考
- 蘇里南商業(yè)機(jī)會(huì)多多
- 高考數(shù)學(xué)小題狂練:每題都附有詳細(xì)解析
- 浮動(dòng)碼頭施工方案
- Poka-Yoke防錯(cuò)技術(shù)(完整版)
- 保安交接班記錄表(2)
- 神明—EZflame火焰檢測(cè)系統(tǒng)
- 個(gè)人簡(jiǎn)歷求職簡(jiǎn)歷課件.ppt
- 2018年江蘇高考滿分作文:在母語(yǔ)的屋檐下
- 新青島版五四制2021-2022四年級(jí)科學(xué)上冊(cè)實(shí)驗(yàn)指導(dǎo)
- 小學(xué)四年級(jí)音樂(lè)課程標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論