vbshilei課件.ppt_第1頁
vbshilei課件.ppt_第2頁
vbshilei課件.ppt_第3頁
vbshilei課件.ppt_第4頁
vbshilei課件.ppt_第5頁
已閱讀5頁,還剩220頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Visual Basic 程序設(shè)計,主講人:時雷 ,Microsoft公司推出的Visual Basic語言是以結(jié)構(gòu)化Basic語言為基礎(chǔ),采用事件驅(qū)動運行機制的新一代可視化程序設(shè)計語言。它是隨著Windows操作系統(tǒng)的應(yīng)用而產(chǎn)生的。 通過這門課的學(xué)習(xí)將進一步認(rèn)識計算機系統(tǒng),了解計算機程序設(shè)計算法思想,熟練計算機程序設(shè)計過程,能用VB程序設(shè)計語言解決簡單的界面設(shè)計和代碼設(shè)計,基本達到計算機二級水平。 我們的教學(xué)和實踐環(huán)節(jié)均以Visual Basic 6.0為平臺進行。,這門課的學(xué)習(xí)方法:預(yù)習(xí)教材+聽課作筆記+上機練習(xí)(其中上機練習(xí)很重要,第二周開始) 成績評定:平時成績(課堂、上機、作業(yè)) 期

2、末上機考試成績 VB學(xué)習(xí)的重點:VB集成環(huán)境(界面)的組成、常用對象常用屬性的設(shè)置和使用、常用對象方法的使用、語言基礎(chǔ)、算法思想和程序設(shè)計結(jié)構(gòu),1.1 程序設(shè)計語言簡述,程序設(shè)計語言是人機之間交流的工具。 計算機識別機器語言二進制代碼,人識別高級語言; 程序是人求解問題的算法(邏輯思維)描述,要想在計算機上運行程序,必須有“翻譯”將人識別的高級語言程序翻譯成計算機識別的機器語言程序。 這個“翻譯”就是語言編譯器。,計算機語言的分類,低級語言 機器語言+匯編語言 高級語言 一種接近人類語言(英文)的語言,機器語言, 機器指令:能被計算機識別的二進制代碼。 機器語言:機器指令的集合。因機器CPU的

3、不同而異,不同機型,機器語言不同,可移植性差。 機器語言程序:用機器語言寫出的程序。其優(yōu)點是計算機能直接運行,效率高。,計算機語言是人與計算機交流信息的工具。,用簡單的Z-80指令可編寫程序如下:,舉例求兩個數(shù)值之和 (56+43),計算機5643的Z80機器語言程序,通過上面的例子可以看出,機器語言難學(xué)難用,而且易錯難改,十分枯燥無味,為了便于記憶,計算機專家們又創(chuàng)造了匯編語言。 匯編語言是用特定的助記符號代表數(shù)字代碼,幫助人們記憶,它和機器指令基本上是一一對應(yīng)的。 匯編程序語義和機器語言程序一一對應(yīng)。,匯編語言,匯編語言程序 說明 START:LD A, 38H 38H表示38是十六進制數(shù)

4、 LD B, 2BH 2BH表示2B是十六進制數(shù) ADD A, B A為累加器 B為寄存器 NOP 空語句 HALT 停語句,舉例計算 5643的Z80匯編程序,高級語言是用英語和人們熟悉的數(shù)學(xué)公式來表達的,因此具有較好的通用性。 例:計算5643的C程序 C程序 說明 int n,m,l; 定義n、m、l為整形變量 n56; 把55賦給n m=43; 把43賦給m lmn; 把mn之和賦給l printf(“L=%dn”,l); 輸出結(jié)果,高級語言,事實上,高級語言程序(通常稱為為源程序)輸入計算機之后,先要被翻譯成機器語言程序(通常稱為目標(biāo)程序),然后再執(zhí)行。這個翻譯工作是由一個系統(tǒng)軟件“

5、 編譯程序” 完成的。不同的機器,不同的高級語言有不同的編譯程序,如果沒有C編譯程序,計算機是不能運行C源程序的。,編譯程序,程序是什么,程序 ( Program) 是為解決某個問題用計算機語言或命令設(shè)計、 編寫的一系列指令的有序集合。 是人的思維活動的代碼化描述。 程序的順序執(zhí)行 一個程序通常分為若干個具有一定獨立性的程序段,這些程序段是按邏輯步驟編排執(zhí)行的,只有當(dāng)當(dāng)前程序段執(zhí)行完成后,才將控制權(quán)轉(zhuǎn)交到下一個程序段并執(zhí)行下一個程序段。,程序順序執(zhí)行舉例一,設(shè)有一個程序有三個程序段,分別執(zhí)行 I(輸入)、C(計算)和P(輸出)操作。 執(zhí)行順序為: 只有輸入了數(shù)據(jù) ,才能計算這些數(shù)據(jù),也只有計算

6、產(chǎn)生了結(jié)果,才能輸出它們。這些邏輯關(guān)系(順序)是不能隨意改變的。,結(jié)果,數(shù)據(jù),I,C,P,對于初學(xué)者,往往把程序設(shè)計理解為簡單的編制一個程序。實際上,程序設(shè)計包括多方面的內(nèi)容,而編制程序只是其中一個方面。 程序設(shè)計可用如下公式描述: 程序設(shè)計=算法+數(shù)據(jù)結(jié)構(gòu)+方法+工具環(huán)境 程序設(shè)計的過程: 問題的分析 算法的設(shè)計 流程的描述 代碼化 調(diào)試與運行,程序設(shè)計的基本過程,問題分析,即找出事物之間的關(guān)系,并將事物 及其關(guān)系數(shù)字(數(shù)值)化,算法的設(shè)計,算法是指在有限步內(nèi)解決一個具體問題而規(guī)定的意義明確的解題步驟的有限集合。 概括地說,算法是指解題方案的準(zhǔn)確而完整的描述。從程序來說,也可以說算法是一個有

7、限條指令的集合,這些指令確定了解決某一特定類型問題的運算序列。,算法的基本特征,確定性 算法的每個步驟必須明確定義,不允許模棱兩可的理解,也不允許有多義性。 有窮性 算法必須在有限時間內(nèi)完成,必須執(zhí)行有限個步驟終止。 零個或多個輸入 一個或多個輸出 有效性(a/b中要求b0)即可行性, 用某種程序設(shè)計語言編寫的程序本質(zhì)上也是問題處理方案的描述,并且是最終的描述。 在一般的程序設(shè)計過程中,不提倡一開始就編寫程序,特別是對于大型的程序。 程序是程序設(shè)計的最終產(chǎn)品,需要經(jīng)過每一步的細(xì)致加工才能得到,如果企圖一開始就編寫出程序,往往會適得其反,達不到預(yù)想的結(jié)果。,編程:代碼化,最后編寫的程序還需要進行

8、測試和調(diào)試,只有經(jīng)過調(diào)試后的程序才能正式運行。 測試:是指通過一些典型例子,盡可能多發(fā)現(xiàn)程序中的錯誤。 調(diào)試:是指找出程序中錯誤的具體位置,并改正錯誤。 結(jié)論:測試與調(diào)試往往是交替進行的,通過測試發(fā)現(xiàn)程序中的錯誤,通過調(diào)試進一步找出錯誤的位置并改正錯誤。,調(diào)試與運行,1.2 Visual Basic 瀏覽,啟動VB,瀏覽VB集成環(huán)境 主窗口 窗體 工具箱 工程管理窗口 屬性窗口,1.主窗口 應(yīng)用程序窗口,由標(biāo)題欄、菜單欄和工具欄組成 2.窗體(form)窗口 設(shè)計vb程序的 界面 3.代碼(code)窗口 編輯窗體、標(biāo)準(zhǔn)模塊中的代碼 4.屬性(properties)窗口 所有窗體或控件的屬性設(shè)

9、置 5.工程資源管理器(project expror)窗口 保存一個應(yīng)用程序所有的文件 6. 工具箱(toolbox)窗口 顯示各種控件的制作工具,供用戶在窗體上設(shè)計,標(biāo)準(zhǔn)控件簡介,工具箱中放置的是VB的標(biāo)準(zhǔn)控件,每個控件按鈕上的圖標(biāo)形象地表示了該對象的功能。當(dāng)移動鼠標(biāo)到控件上時,會顯示該對象的名字。 例如:標(biāo)簽、文本框、命令按鈕,2.1 建立簡單的應(yīng)用程序,例子:輸入圓的半徑,計算圓的面積。 1.建立用戶界面的對象 2.對象屬性的設(shè)置 3.對象事件過程及編程 4.程序運行和調(diào)試 5.保存文件 程序見第一章程序,注意: 1.窗體名和窗體文件名概念, 窗體名:窗體的Name屬性,在代碼中用來引用

10、該窗體,同一工程不能有相同的窗體名; 窗體文件名:窗體存放在磁盤上的文件名,該文件包含了該窗體的所有控件屬性和代碼,同一文件夾不能有相同的文件名。 2. 在工程中添加現(xiàn)存的窗體時,只是對該窗體文件的引用納入工程。因此,如果更改窗體并保存它,會影響包含此窗體文件的任何工程。 3. 在工程中刪除窗體時,僅將此窗體從工程里刪除掉,但是窗體文件仍存在于磁盤上。但是,如果在VB之外刪除一個窗體文件,VB不能更新此工程文件,當(dāng)打開此工程時,將顯示一個文件丟失的錯誤信息。,開發(fā)一個程序的步驟,需求分析 界面設(shè)計 設(shè)計事件驅(qū)動程序 測試,基本概念,1、對象 2、屬性 3、控件 4、事件 5、方法,對象的概念,

11、對象是代碼和數(shù)據(jù)的集合??蓪⑺醋饔脩艚缑嫔系囊粋€單元,例如:窗體、控件等。 每個對象都有自己的屬性、方法和事件的特征。 在Visual Basic 中所有控件都在工具箱窗口中。,對象的屬性,對象的屬性是標(biāo)識一個對象的所有特征,例如 控件的顏色、大小、字體都是對象的屬性。 用戶可以在設(shè)計時通過屬性窗口或運行時通過代碼改變屬性。 熟練掌握VB編程的一個前提就是熟悉每一個控件的屬性,要記住每一個屬性的功能不太可能,所以要先掌握一些控件的公共屬性。,控件的常用公共屬性,Name: 設(shè)置控件名稱,以標(biāo)識控件. Alignment:設(shè)置控件中文字的對齊方 式.0為左對齊,1為右對齊. Back Colo

12、r:背景顏色 Font:字體 Caption:設(shè)置控件的顯示標(biāo)題.,一.常用屬性 1.Name名稱屬性 創(chuàng)建的對象名稱,有默認(rèn)的名.在程序中,控件名是作為對象的標(biāo)識而引用,不會顯示在窗體上。 2.Caption標(biāo)題屬性 該屬性決定了控件上顯示的內(nèi)容。 3.Height、width、top和left屬性,4.Enabled屬性 控件是否可操作. 當(dāng)設(shè)置為false時,呈暗淡色,禁止用戶進行操作. 5. Visible屬性 控件是否可見.當(dāng)設(shè)置為false時, 用戶看不到,但控件本身存在。 6. Font屬性 Fontname 字體 Fontsize字體大小 Fontbold是否是粗體 Fonti

13、talic 是否斜體 Fontstrikethru是否加一刪除線 Fontunderline是否帶下劃線 在窗體是建立兩個命令按鈕 Command1和Command2, Command2 的Font通過屬性窗口設(shè)置, 其余 屬性通過代碼實現(xiàn)。,7. Forecolor前景顏色屬性 設(shè)置控件的前景顏色(即正文顏色). 其值是一個16進制常數(shù),用戶可以在調(diào)色板中直接選擇所需顏色。 8. Backcolor背景顏色屬性 9. Backstyle背景風(fēng)格屬性 0-transparent:透明顯示,即控件背景顏色顯示不出來 10. BorderStyle邊框風(fēng)格屬性 0-None:控件周圍沒有邊框 1-

14、Fixed Single:控件帶有單邊框。 11. Alignment屬性 控件上正文水平對齊方式 0: 正文左對齊 1: 右對齊2: 居中 12. AutoSize屬性 控件是否根據(jù)正文自動調(diào)整大小, False. 13. WordWarp屬性 AutoSize True時,WordWarp才有效 按正文字體大小在垂直方向上改變顯示區(qū)域的大小。,14.TabIndex屬性 決定了按Tab鍵時,焦點在各個控件移動的順序。各個控件默認(rèn) TabIndex值就是以控件建立時 的順序,第一個為0. 15.default控件默認(rèn)屬性 反映該控件最重要的屬性,使用時可省略屬性名。. 注意:Command的

15、默認(rèn)屬性為Default,當(dāng)該屬性為True,當(dāng)按Enter鍵,該控件起作用。 控件設(shè)置 效果,二.窗體 1.屬性 Caption標(biāo)題 MaxButton、MinButton Icon、ControlBox Picture、AutoRedraw BorderStyle (0 1 2 3 4 5 ) WindowsState (0-正常、1-最小化、2-最大化) 2.事件 Click、DblClick和Load Load 當(dāng)裝入窗體時激發(fā),通常用于對屬性和變量初始化 3.方法 Print、Cls和Move等,三. 標(biāo)簽 Label 用于顯示文本(輸出)信息,不能作為輸入信息的界面。 四.文本框

16、TextBox 是一個文本編輯區(qū)域,可在該區(qū)域輸入,編輯和顯示正文內(nèi)容。 1.其他屬性 Text : 正文內(nèi)容 Maxlength: 設(shè)置正文的最多字符個數(shù),0任意長度值., MultiLine: 是否為多行,默認(rèn)一行. FALSE ScrollBars: 當(dāng)MultiLine為True時,該屬性才有效,表示滾動條的形式 0-None、1-Horizontal、2-Vertical、3-Both。 Locked: 是否可被編輯屬性,F(xiàn)alse,表示為可編輯。 PassWord : 口令字符. Text屬性返回輸入的數(shù)據(jù),屏幕顯示該字符, SelStart,SelLength,SelText :

17、 選中文本的起始、長度、內(nèi)容。,2.常用事件 Change : 當(dāng)改變文本框的Text屬性時會引發(fā)該事件. KeyPress(KeyAscii As Integer): 同上,并可返回一個KeyAscii參數(shù) KeyAscii 為13,按回車鍵;為0 去除剛輸入的字符. LostFocus : 當(dāng)控件失去焦點時發(fā)生. GotFocus : 當(dāng)控件獲得焦點時發(fā)生. 3.常用方法 對象.SetFocus: 是把光標(biāo)移到指定的文本框?qū)ο笾小?4.文本框的應(yīng)用 數(shù)據(jù)過濾 例:要求輸入合法的數(shù)字?jǐn)?shù)據(jù)。當(dāng)輸入結(jié)束時(按Tab鍵),對于輸入正確的數(shù)據(jù),顯示正確信息;對輸入的非數(shù)字?jǐn)?shù)據(jù),則響鈴(Beep)、顯

18、示錯誤信息、清除文本框中的內(nèi)容,并使焦點重新回到文本框。 Text2_ LostFocus 當(dāng)輸入結(jié)束按Tab鍵時,該事件激發(fā) IsNumeric(Text2) : 判斷是否輸入非數(shù)字?jǐn)?shù)據(jù). Text2.SetFocus : 使焦點重新回到文本框,五.命令按鈕CommandButton 接受用戶輸入的命令.輸入命令可以有三種方式: 鼠標(biāo)單擊 Tab鍵焦點到該按鈕 快捷鍵 1. 其他屬性 Caption: 命令按鈕顯示的內(nèi)容,可設(shè)置快捷鍵,例 一句語句可分若干行書寫,用續(xù)行符連接 _ 一行=255個字符 3.注釋有利于程序的維護和調(diào)試 Rem開始 或 單撇 ,程序中書寫代碼基本要求,2.2 VB

19、的數(shù)據(jù)類型,標(biāo)準(zhǔn)數(shù)據(jù)類型,2.3 變量與常量,一.變量和常量的命名規(guī)則 變量:在程序運行中其存儲的值可以改變。 常量:在程序運行中其值不可以改變。 命名 規(guī)則: 1.以字母或漢字開頭,后可跟漢字、字母、數(shù)字或下劃線組 成,長度小于等于255個字符; 2.不要使用VB中的關(guān)鍵字; 3.VB中不區(qū)分變量名的大小寫,變量名中間不能有空格. 4.為了增加程序的可讀性,可在變量名前加一個縮寫的前綴來表明該變量的數(shù)據(jù)類型。,二.變量聲明 1.用Dim語句顯式聲明變量 形式 :Dim 變量名 AS 類型 Dim 變量名 類型符 例 Dim iCount As integer , sAllsum As sin

20、gle 等價于 Dim iCount%, sAllsum! 還可以用public private static(以后講) 2.隱式聲明 未進行上述的聲明而直接使用,其類型為 Variant 類型 建議不使用. 注意: 在通用聲明處加 Option Explicit 語句來強制顯式聲明變量。,三. 常量 (1).普通常量(前面的各種數(shù)據(jù)類型都可以有常量) (2).符號常量: 1. 用戶聲明常量 形式: Const 常量名 AS 類型 = 表達式 省略 AS 類型 ,常量的類型由表達式值的類型決定 為使與變量名區(qū)分,一般常量名使用大寫字母 可指定特定的數(shù)據(jù)類型(在前面列出的數(shù)據(jù)類型中均可使用)。說

21、明符號常量時,可以在常量名后加上類型說明符,類型說明符不是符號常量的組成部分。 經(jīng)過說明的符號常量只是常數(shù)值的名字,不能在程序代碼中修改它的值。 在一行中說明多個常數(shù)時使用逗號分隔。 常量說明語句若在過程內(nèi)部,則符號常量只能在該過程內(nèi)有效;若說明語句出現(xiàn)在窗體代碼的聲明部分,則窗體以及窗體中各控件的事件過程都能引用該符號常量。 例 Const MAX%=100, pi as single =3.14,2.4 運算符和表達式,一. 運算符(進行運算的符號:算術(shù)運算符、字符串運算符、邏輯運算符、關(guān)系運算符 ) 1. 算術(shù)運算符(例子21) 例:5+10 mod 10 9 / 3 +2 2 結(jié)果:1

22、0 (運算符、表達式、運算),2. 字符串運算符(例子22) 、+ 字符串連接 123 + 456 結(jié)果 123456 123 a, b=; b End Sub 運行結(jié)果 (4)若語句行末尾有分號或逗號,則輸出本行輸出項后不換行,1. Spc函數(shù) 格式:Spc(n) 功能:在輸出下一項之前插入n個空格。 例如: Print 學(xué)號;Spc(2);姓名;Spc(5);成績 輸出結(jié)果(表示空格): 學(xué)號姓名成績,特殊打印格式,函數(shù)格式:Tab(n) 功能:把輸出位置移到第n列。 例如: Print Tab(2);學(xué)號;Tab(11);姓名;Tab(21);成績 輸出結(jié)果是(1個漢字占2個位置): 學(xué)

23、號姓名成績,2. Tab函數(shù),程序代碼如下: Private Sub Form_Click() Print Print Tab(15); 學(xué)號; Tab(26); 姓名; Tab(36); 成績 Print Tab(14); String(27, -) 輸出27個減號字符“-” Print Tab(14); 20011001; Tab(26); 張小三; Tab(36); 57 Print Tab(14); 20011003; Tab(26); 李小四; Tab(36); 69 Print Tab(14); 20011012; Tab(26); 馬小五; Tab(36); 92 Print T

24、ab(14); String(27, -) 輸出27個減號字符“-” End Sub,例子 使用Tab對輸出進行定位,運行結(jié)果 ,編寫的窗體單擊事件過程代碼如下: Private Sub Form_Click() Dim a As Integer, b As Integer, c As Integer Dim d As Integer, s As Integer, m As Single a = 6 : b = 21 : c = 23 : d = 15 s = a + b + c + d m = (a * 18 + b * 19 + c * 20 + d * 21) / s 以下舍入到小數(shù)后1

25、位 Print 平均年齡:; Int(m * 10 + 0.5) / 10 End Sub 運行程序后單擊窗體,輸出結(jié)果是: 平均年齡:19.7,例如:使用Print方法輸出全班學(xué)生的平均年齡 已知18歲6人,19歲21人,20歲23人,21歲15人,三個語句 1. 注釋語句 格式: 或 Rem 功能:為提高程序可讀性,對程序進行注解 注意:1)注釋語句是非執(zhí)行語句;2)任何字符、漢字都可以作為注釋內(nèi)容;3)注釋語句獨立一行或放于一行的最后 2. 暫停語句 格式: Stop 功能:暫停程序的執(zhí)行,相當(dāng)于設(shè)置斷點 3. 結(jié)束語句 格式: End 功能:結(jié)束一個程序的執(zhí)行,Print方法 格式:.

26、Print , .Print ; 注意:1)省略時,在當(dāng)前窗體上輸出; 2)數(shù)值表達式先計算結(jié)果再輸出,字符串原樣輸出,無 時輸出空行; 3)多個表達式時,若用逗號,按標(biāo)準(zhǔn)格式顯示,若用空格或分號,按緊湊格式輸出; 4)每次執(zhí)行均自動換行,為在同一行顯示,可在末尾加逗號或分號。,與Print方法有關(guān)的函數(shù) 1、Tab函數(shù) 格式:Tab(n) 功能:在指定位置輸出表達式的值 2、Spc函數(shù) 格式:Spc(n) 功能:跳過n個空格,對輸出進行定位 3、Format函數(shù) 格式:Format(, ) 功能:使數(shù)值按“格式字符串”指定的格式輸出,例: 顯示圖形 Private Sub Form_Clic

27、k() For i = 1 To 5 Print Tab(i); String(6 - I, ); Spc(6); String(I, ) Next i End Sub 考慮:若把Spc(6)換成Tab(6),效果如何? 自己看看,Cls方法 形式 : 對象.Cls 作用 : 清除運行時在窗體或圖形框中顯示的文本或圖形。 注意 : 不清除在設(shè)計時的文本和圖形。 Move方法 形式 : 對象.Move 左邊距離,上邊距離,寬度,高度 作用 : 移動窗體或控件,并可改變其大小。 對象:可以是窗體及除時鐘、菜單外的所有控件 例: 圖形起始點(左上角)移到窗體的中心,同時圖形縮小50%。,自學(xué)作業(yè):

28、編一帳號和密碼檢驗程序。 要求: 帳號不超過6位數(shù)字,有錯,清除原內(nèi)容再輸入. 密碼為:1234,輸入時在屏幕上以 “*”代替; 若密碼錯,顯示有關(guān)信息,選擇“重試”按鈕,清除原內(nèi)容再輸入,選擇“取消”按鈕,停止運行。,例4-4 輸入圓的半徑,計算并輸出元的周長和面積?!痉治觥?(1)本題中,要用到數(shù)據(jù)輸入、數(shù)據(jù)處理、結(jié)果輸出三部分程序代碼,我們可用輸入框來進行數(shù)據(jù)輸入,用消息框進行結(jié)果輸出。程序算法的的N_S圖見下圖4.8。,4.2.4 順序結(jié)構(gòu)程序設(shè)計舉例,(2)在程序窗體中設(shè)置以退出命令按鈕如下: 控件名稱:Command1, 標(biāo)題:“退出”,其他屬性取默認(rèn)值。 程序代碼如下: Priv

29、ate Sub Form_Click() Dim Radius As Single, Area!, Perimeter!, Msg$ Radius = Val(InputBox(請輸入圓半徑:) 輸入信息。 Perimeter = 2 * 3.14159 * Radius 計算圓周長 Area = 3.14159 * Radius 2 計算圓面積。 Msg = 圓面積= If x Max Then Max = x Next i Print Print 最大值=; Max End Sub,常見錯誤 1. 不循環(huán)或死循環(huán)的問題 主要是循環(huán)條件、循環(huán)初值、循環(huán)終值、循環(huán)步長的設(shè)置有問題。 2循環(huán)結(jié)構(gòu)

30、中缺少配對的結(jié)束語句 For 少 配對的Next 3.循環(huán)嵌套時,內(nèi)外循環(huán)交叉 4累加、連乘時,存放累加、連乘結(jié)果的變量賦初值問題 (1)一重循環(huán) 在一重循環(huán)中,存放累加、連乘結(jié)果的變量初值設(shè)置應(yīng)在循環(huán)語句前。 (2)多重循環(huán) 這要視具體問題分別對待。,第四章 數(shù)組,1 數(shù)組的概念 2 靜態(tài)數(shù)組及聲明 3 動態(tài)數(shù)組及聲明 4 數(shù)組的基本操作 5 控件數(shù)組 6 自定義數(shù)據(jù)類型 7 常用算法(二) 8 常見錯誤,一、 數(shù)組的概念 1.引例 例若我們要求一個班100個學(xué)生的平均成績,然后統(tǒng)計高于平均分的人數(shù)。 按以前簡單變量的使用和循環(huán)結(jié)構(gòu)相結(jié)合,求平均成績程序段如下: aver = 0 For i

31、 = 1 To 100 mark = InputBox(輸入 + i + 位學(xué)生的成績) aver = aver + mark Next i aver = aver / 100 但若要統(tǒng)計高于平均分的人數(shù),則無法實現(xiàn)。mark是一個簡單變量,存放的是最后一個學(xué)生的成績。 已有知識解決方法:再重復(fù)輸入成績,帶來兩個問題: (1)輸入數(shù)據(jù)的工作量成倍增加; (2)若本次輸入的成績與上次不同,則統(tǒng)計的結(jié)果不正確。 解決此問題的根本方法,引入數(shù)組,始終保持輸入的數(shù)據(jù),一次輸入,多次使用。,二、數(shù)組的聲明 數(shù)組是由固定的同類元素按一定順序排列而成的結(jié)構(gòu)類型數(shù)據(jù),它由一個相同的標(biāo)識符號表示,并用不同下標(biāo)來

32、區(qū)分的一系列變量。 數(shù)組并不是一種數(shù)據(jù)類型,而是一組相同類型的變量的集合. 在VB中有兩大類數(shù)組:變量數(shù)組和控件數(shù)組。 變量數(shù)組: 靜態(tài)(固定大小)數(shù)組、動態(tài)(可變大小,可調(diào))數(shù)組,變量數(shù)組必須先聲明后使用。下標(biāo)的個數(shù)稱為數(shù)組的維數(shù)。 1. 靜態(tài)數(shù)組及聲明 形式: Dim 數(shù)組名(下標(biāo)1,下標(biāo)2) As 類型 聲明了數(shù)組的名、維數(shù)、大小、類型 維數(shù):幾個下標(biāo)為幾維數(shù)組,最多60維。 下標(biāo): 下界 To 上界 省略下界為0 ,必須為常數(shù)。 每一維大小: 上界下界+1 數(shù)組大小: 每一維大小的乘積 例:Dim mark(1 to 100) As Integer,Dim lArray( 0 To 3

33、, 0 To 4) As Long 共有 45個元素 等價于: Dim lArray(3, 4) As Long,注意: (1) 下界缺省為0 ,也可在重新定義數(shù)組的下界。例如: Option Base 1 (2)錯誤的聲明,下標(biāo)是變量 n =Inputbox(“輸入n”) Dim x(n) As Single (3)在數(shù)組聲明中的下標(biāo)說明了數(shù)組的整體,即每一維的大??; 而在程序其他地方出現(xiàn)的下標(biāo)表示數(shù)組中的一個元素。 兩者寫法形式相同,但意義不同。 例如: Dim x(10) As Integer 聲明了x數(shù)組有11個元素 x(10)=100 對x(10)這個數(shù)組元素賦值, 建立公用數(shù)組,在

34、標(biāo)準(zhǔn)模塊的通用段中用Public語句聲明數(shù)組。 Public 數(shù)組名(下界To 上界, 下界To 上界)As 數(shù)據(jù)類型 建立模塊級數(shù)組,在標(biāo)準(zhǔn)模塊的通用段中用Private或Dim語句聲明數(shù)組。 Dim/ Private 數(shù)組名(下界To 上界, 下界To 上界)As 數(shù)據(jù)類型 建立過程級數(shù)組,在過程中用Private或Dim語句聲明數(shù)組。 Dim/ Private 數(shù)組名(下界To 上界, 下界To 上界)As 數(shù)據(jù)類型, 與簡單靜態(tài)變量對應(yīng),在過程中還可以建立另外一種數(shù)組靜態(tài)數(shù)組。 Static 數(shù)組名(下界To 上界, 下界To 上界)As 數(shù)據(jù)類型 在過程內(nèi)使用Static建立的數(shù)組為

35、靜態(tài)數(shù)組,與前面討論過的簡單靜態(tài)變量一樣,過程運行結(jié)束后,VB不收回靜態(tài)數(shù)組,并且保留它們的值,在此基礎(chǔ)上繼續(xù)運行程序。 例4.1,三、動態(tài)數(shù)組(可調(diào)數(shù)組)及聲明 動態(tài)數(shù)組指在聲明數(shù)組時未給出數(shù)組的大小(省略括號中的下標(biāo)),當(dāng)要使用它時,隨時用ReDim語句重新指出數(shù)組大小。 形式如下: ReDim 數(shù)組名(下標(biāo),下標(biāo)2) As 類型 例 Sub Form_Load( ) Dim sArray( ) As Single ReDim sArray(4,8) End Sub 說明: (1) Dim、Private、Public變量聲明語句是說明性語句,可出現(xiàn)在過 程內(nèi)或通用聲明段;ReDim語句是

36、執(zhí)行語句,只能出現(xiàn)在過程內(nèi)。 (2) 在過程中可多次使用ReDim來改變數(shù)組的大小,也可改變數(shù)組的維數(shù). (3) 每次使用ReDim語句都會使原來數(shù)組中的值丟失,可以在ReDim語句后加Preserve參數(shù)用來保留數(shù)組中的數(shù)據(jù),但使用Preserve只能改變最后一維的大小,前面幾維大小不能改變。例4.1.2 (4) ReDim中的下標(biāo)可以是常量,也可以是有了確定值的變量。,四、數(shù)組的基本操作,1.數(shù)組元素的引用 對數(shù)組的引用是指對數(shù)組元素的引用,數(shù)組元素可以作為左值和右值,其方法是,在數(shù)組后面的括號中指定下標(biāo),例如A(10),B%(20) 要注意區(qū)分?jǐn)?shù)組定義和數(shù)組元素。例如: Dim A(10

37、):Static B%(20) 表示數(shù)組的定義,數(shù)組A長度為11,靜態(tài)數(shù)組B長度為21 sum=sum+A(10) 表示對數(shù)組A中序號為10的元素的引用 ,4.求數(shù)組上下界語句 知道了數(shù)組的上下界,便可以通過For循環(huán)對其操作,特別是當(dāng)數(shù)組作為變參時,往往需要知道其上下界,此時可分別用ubound、lbound來測試數(shù)組上界和下界。其格式為: ubound(數(shù)組名,第n維) lbound(數(shù)組名,第n維),四、數(shù)組的基本操作,例4.2,Option Base 1 Dim score(10),scores(10,20) Print lbound(score),ubound(score) 輸出結(jié)果

38、為:110 Print lbound(scores,1),lbound(scores,2) 輸出結(jié)果為:11 Print ubound(scores,1),ubound(scores,2)輸出結(jié)果為:1020,數(shù)組的輸入與輸出,數(shù)組元素一般通過For循環(huán)語句及Inputbox函數(shù)輸入。 例:輸入并輸出10個學(xué)生的成績。 當(dāng)數(shù)組長度較長時,可用循環(huán)語句對其個元素賦值;當(dāng)數(shù)組長度較短時,可以直接對各元素賦值。例:三個學(xué)生的成績。 對于多維數(shù)組可以用多重循環(huán)對其賦值。 例:多個學(xué)生多門課程的成績。,數(shù)組的輸出和雙重循環(huán)配合使用 輸出方陣sC中的下三角元素 For i = 0 To 4 For j =

39、 0 To i sc(i, j) = i * 5 + j Print sc(i, j); ; Next j Print 換行 Next I,5.數(shù)組刷新語句,數(shù)組刷新語句用于清除指定數(shù)組的內(nèi)容。語句格式為: Erase, 在Erase語句中,給出的數(shù)組名不帶括號和下標(biāo)。對于數(shù)值數(shù)組,用刷新語句刷新后,所有數(shù)組元素被置為0;對于字符串?dāng)?shù)組,被刷新后各數(shù)組元素被置為空。刷新后的數(shù)組的長度不變。例4.3,4.3 控件數(shù)組 1. 控件數(shù)組的概念 一組相同類型的控件組成的數(shù)組稱為控件數(shù)組。其中的每個控件稱為控件數(shù)組元素,它們共用一個控件名,具有相同的屬性,建立時系統(tǒng)給每個元素賦一個唯一的索引號(Inde

40、x),第一個元素的Index屬性值為0,第二個元素的Index屬性值為1,以此類推。 。 控件數(shù)組共享同樣的事件過程,通過返回的下標(biāo)值區(qū)分控件數(shù)組中的各個元素。 例: Private Sub cmdName _Click(Index As Integer) If Index=3 then 處理第四個命令按鈕的操作 End If End Sub,2. 建立控件數(shù)組的方法,創(chuàng)建一個控件數(shù)組有以下4種方法: (1) 將一個名字賦予多個同型控件對象 例4.4 (2) 復(fù)制現(xiàn)有的控件并粘貼到容器對象中 (3) 將控件的Index屬性設(shè)置為非負(fù)整數(shù) (4) 在程序代碼中使用load或unload方法 例4

41、.5,應(yīng)用控件數(shù)組時應(yīng)注意的幾個問題:, 控件數(shù)組的各個元素必須是同一類控件。 控件數(shù)組中各個元素可以共用同一個事件過程,在事件過程的聲明中增加Index參數(shù),通過Index參數(shù)值來指明是哪一個控件發(fā)生了該事件。 一旦在設(shè)計階段創(chuàng)建了一個控件數(shù)組,則在運行階段即可用Load語句添加新的元素,也可用UnLoad語句刪除新添加的元素(但不能刪除設(shè)計階段建立的元素)。,4.4 數(shù)組實例應(yīng)用,例4.6 數(shù)組的輸入和輸出。 例4.7 用數(shù)組輸出一個3行4列矩陣,矩陣元素用數(shù)組元素表示。,求數(shù)組中最大元素及所在下標(biāo) Dim Max As Integer,iMax As Integer Max=iA(1):

42、iMax=1 For i = 2 To 10 If iA(i)Max Then Max=iA(i) iMax=i End If Next I 將數(shù)組中各元素交換 For i =1 To 102 t=iA(i) iA(i)=iA(10-i+1) iA(10-i+1)=t Next I,例4.8 用一個一維數(shù)組存放隨機產(chǎn)生的10個兩位整數(shù),并對其由小到大排序(冒泡排序) 每次都找出剩余數(shù)中的最小數(shù)。 每次if條件滿足后都執(zhí)行兩數(shù)交換操作。 一趟里面可能有多次交換操作。 例4.9 利用數(shù)組輸出斐波那契函數(shù)數(shù)值和楊輝三角圖形。,選擇排序 例 對已知存放在數(shù)組中的n個數(shù),用選擇法按遞增順序排序。 (1)

43、 從n個數(shù)的序列中選出最小的數(shù)(遞增),與第1個數(shù)交換位置; (2)除第1個數(shù)外,其余n-1個數(shù)再按(1)的方法選出次小的數(shù),與第 2個數(shù)交換位置; (3)重復(fù)(1)n-1遍,最后構(gòu)成遞增序列。 For i = 1 To n - 1 iMin= i For j = i+1 To n If iA(j) iA(iMin) Then iMin = j Next j t= iA(i): iA(i) = iA(iMin) : iA(iMin) = t Next I,數(shù)組中常見錯誤和注意事項,1.靜態(tài)數(shù)組聲明下標(biāo)出現(xiàn)變量 n = InputBox(輸入數(shù)組的上界) Dim a(1 To n) As Int

44、eger 2數(shù)組下標(biāo)越界 引用的下標(biāo)比數(shù)組聲明時的下標(biāo)范圍大或小。 Dim a(1 To 30) As Long, i% a(1) = 1: a(2) = 1 For i = 3 To 30 a(i) = a(i - 2) + a(i - 1) Next I 3數(shù)組維數(shù)錯 數(shù)組聲明時的維數(shù)與引用數(shù)組元素時的維數(shù)不一致。 Dim a(3, 5) As Long a(I)=10 4.獲得數(shù)組的上界、下界 UBound 、Lbound函數(shù),第五章 過程,過程的定義與調(diào)用 子過程的定義與調(diào)用 參數(shù)傳遞 變量、過程的作用域 常用算法(三) 重點和難點,5.1 過程的定義和調(diào)用,除了系統(tǒng)提供的內(nèi)部函數(shù)過程

45、和事件過程外,用戶可自定義過程: “Sub”保留字開始的為子過程 “Function”保留字開始的為函數(shù)過程 引例 已知多邊形的各條邊的長度,要計算多邊形的面積。 計算多邊形面積,可將多邊形分解成若干個三角形。 計算三角形面積的公式如下:,程序如下: 定義函數(shù)過程 Public Function area(x!, y!, z!) As Single Dim c! c = 1 / 2 * (x + y + z) area = Sqr(c * (c - x) * (c - y) * (c - z) End Function,調(diào)用函數(shù)過程: Sub command1_click() 輸入若干個三角形

46、邊長 S=area(a,b,c)+area(c,d,e)+area(e,f,g) Print s End Sub,一、函數(shù)過程的定義 自定義函數(shù)過程有兩種方法: (1)利用“工具”菜單下的“添加過程”命令定義,生成一個函數(shù)的框架 (2)利用代碼窗口直接定義,函數(shù)過程形式: Function 函數(shù)過程名(參數(shù)列表) As 類型 局部變量或常數(shù)定義 語句塊 函數(shù)名 = 返回值 函數(shù)過程體 Exit Function 語句塊 函數(shù)名 = 返回值 End Function 說明: (1)、函數(shù)過程名:命名規(guī)則同變量名 (2)、參數(shù)列表形式: ByVal變量名( )As 類型 稱為形參或啞元,僅表示參數(shù)

47、的個數(shù)、類型,無值。 (3)、函數(shù)名 = 返回值 在函數(shù)體內(nèi)至少對函數(shù)名賦值一次 (4)、Exit Function :表示退出函數(shù)過程 比較:與以前我們學(xué)過的過程有什么不同?如何比較!,二、函數(shù)過程的調(diào)用 函數(shù)過程的調(diào)用同標(biāo)準(zhǔn)函數(shù)調(diào)用,參與表達式運算,形式如下: 函數(shù)過程名(參數(shù)列表) 參數(shù)列表:稱為實參或?qū)嵲?,它必須與形參個數(shù)相同,位置與類型一一對應(yīng) 可以是同類型的常量、變量、表達式,子 過 程 函數(shù)過程的不足: (1)不是為了獲得某個函數(shù)值,而是為了某種功能的處理。 (2) 要獲得多個結(jié)果。 1.引例 編寫一個兩個數(shù)交換的過程供多次調(diào)用。 Swap (x,y)子過程的定義在主程序中調(diào)用S

48、wap子過程 Public Sub Swap(x, y)Private Sub Form_Click() Dim t Dim a, b t = x a = 10 x = y b = 20 y = t Call Swap (a, b) End Sub Print a=;a,,b=; b End Sub,2.子過程定義 Sub 子過程名(參數(shù)列表) 局部變量或常數(shù)定義 語句 Exit Sub 語句 End Sub 3.子過程的調(diào)用 子過程名 參數(shù)列表 或 Call 子過程名(參數(shù)列表) 4.子過程與函數(shù)過程區(qū)別: (1)函數(shù)過程名有值,有類型,在函數(shù)體內(nèi)至少賦值一次; 子過程名無值,無類型,在子過

49、程體內(nèi)不能對子過程名賦值; (2)調(diào)用時,子過程調(diào)用是一句獨立的語句。 函數(shù)過程不能作為單獨的語句加以調(diào)用,必須參與表達式運算。 (3)一般當(dāng)過程有一個函數(shù)值,使用函數(shù)過程較直觀; 反之若過程無返回值,或有多個返回值,使用子過程較直觀。,例:分別編一計算某級數(shù)部分和的子過程和函數(shù)過程,并調(diào)用。 級數(shù)為: 精度為:,程序運行流程: Private Sub Command1_Click() Dim f1#, f2# f1 = jishu1(2#, 0.000001) Call jishu2(f2, 2#, 0.000001) Print f1=; f1, f2 = ; f2 End Sub,Fun

50、ction jishu1(x!, eps#) As Doubl jishu=表達式 End Function,找函數(shù)名調(diào)用jishu1,函數(shù)名帶了值返回,Sub jishu2(s#, x!, eps#) s=表達式 End Sub,找子過程名調(diào)用jishu2,5.2 過程與變量的作用域 作用域:變量、過程隨所處的位置不同,可被訪問的范圍。 1.過程的作用域 窗體/模塊級:加Private關(guān)鍵字的過程,只能被定義的窗體或模塊 中的過程調(diào)用。 全局級:加Public關(guān)鍵字(缺?。┑倪^程,可供該應(yīng)用程序的所有 窗體和所有標(biāo)準(zhǔn)模塊中的過程調(diào)用。,2. 變量的作用域 局部變量:在過程內(nèi)用聲明的變量,只能

51、在本過程中使用。 窗體/模塊級變量:在“通用聲明”段中用Dim語句或用Private語句 聲明的變量,可被本窗體/模塊的任何過程訪問。 全局變量:在 “通用聲明”段中用Public語句聲明的變量,可被本 應(yīng)用程序的任何過程或函數(shù)訪問。,例如在下面一個標(biāo)準(zhǔn)模塊文件中不同級的變量聲明: Public Pa As integer 全局變量 Private Mb As string *10 窗體/模塊級變量 Sub F1( ) Dim Fa As integer 局部變量 End Sub Sub F2( ) Dim Fb As Single 局部變量 End Sub,若在不同級聲明相同的變量名,系統(tǒng)按

52、局部、窗體/模塊、全局次序訪問如: Public Temp As integer 全局變量 Sub Form_Load() Dim Temp As Integer 局部變量 Temp=10 訪問局部變量 Form1.Temp=20 訪問全局變量必須加窗體名 Print Form1.Temp, Temp 顯示 20 10 End Sub,3. 靜態(tài)變量 局部變量聲明: Dim聲明,隨過程的調(diào)用而分配存貯單元,變量的初始化;過程 體結(jié)束,變量的內(nèi)容自動消失,存貯單元釋放。 Static聲明,每次調(diào)用過程,變量保持原來的值。 聲明形式:Static 變量名 AS 類型 Static Function

53、 函數(shù)過程名(參數(shù)列表) As 類型 Static Sub 子過程名(參數(shù)列表) 過程名前加Static,表示該過程內(nèi)的局部變量都是靜態(tài)變量。 Private Sub Form_Click() Dim i% ,isum% For i = 1 To 5 isum = sum(i) Print isum, Next i End Sub,Private Function sum(n As Integer) Dim j As Integer j = j + n sum = j End Function Static j As Integer,結(jié)果?,1,2,3,4,5,5.3 過程的參數(shù) 指主調(diào)過程的

54、實參傳遞給被調(diào)過程的形參。 1. 傳址與傳值 傳址: 形參得到的是實參的地址,當(dāng)形參值的改變同時也改變實參的值。 傳值: 形參得到的是實參的值,形參值的改變不會影響實參的值。 例兩個變量的交換 Sub Swap1(ByVal x%, ByVal y%) t% = x: x = y: y = t End Sub Private Sub Command1_Click() a% = 10: b% = 20: Swap1 a, b 傳值 Print A1=; a, B1=; b a = 10: b = 20: Swap2 a, b 傳地址 Print A2=; a, B2=; b End Sub,Su

55、b Swap2(x%, y%) t% = x: x = y: y = t End Sub,2. 數(shù)組參數(shù)的傳遞 當(dāng)參數(shù)是數(shù)組通過傳址方式進行傳遞。注意: 在實參和形參中寫數(shù)組名,忽略維數(shù)的定義,但圓括號不能省。 被調(diào)過程可通過Lbound和Ubound函數(shù)確定實參數(shù)組的下、上界。 Lbound和Ubound函數(shù)的形式如下: L|Ubound(數(shù)組名,維數(shù)) 其中:維數(shù)指明要測試的是第幾維的下標(biāo)值,缺省是一維數(shù)組。 例 編一函數(shù)tim,求任意一維數(shù)組中各元素之積。 調(diào)用tim,求和 Function tim(a() As Integer) Dim t#, i% t = 1 For i = Lbo

56、und(a) To Ubound(a) t = t * a(i) Next i tim = t End Function,調(diào)用: Sub Command1_Click() Dim a%(1 To 5),b%(3 To 8) t1# = tim(a()t2 #= tim(b()Print t1, t2 End Sub,5.4 事件過程,我們可以為一個事件編寫程序代碼,來使應(yīng)用程序中的對象按程序指定的方式作用。把這些對發(fā)生的事件進行處理的代碼放在過程中,這樣的過程稱為事件過程。事件過程分為窗體過程和控件過程兩種。,(1) 定義事件過程,窗體事件過程的語法如下: Private Sub Form.事

57、件名(參數(shù)列表) 局部變量和常數(shù)聲明 語句塊 End Sub,(2) 定義控件事件過程,控件事件過程語法如下: Private Sub 控件名_事件名(參數(shù)列表) 局部變量和常數(shù)聲明 語句塊 End Sub,(3) 事件過程的調(diào)用,事件過程用一個發(fā)生在VB中的事件來自動調(diào)用或者由同一模塊中的其他過程顯式調(diào)用。 窗體中的過程 格式:call 窗體名.過程名(實參表) 調(diào)用標(biāo)準(zhǔn)模塊中的過程 格式:call 模塊名.過程名(實參表),VB中的某個控件對象的一個事件發(fā)生時,便自動調(diào)用該控件的該事件過程。一個窗體上的控件的事件過程名,由控件的實際名字、下劃線_和事件名組合而成。 例如:一個名為cmdPl

58、ay的命令按鈕被單擊時所調(diào)用的事件過程是:cmdPlay_Click。如果窗體事件名是:詞匯“Form”、下劃線和事件名的組合。那么,窗體單擊時所調(diào)用的事件過程是:Form_Click。,重點和難點,1. 確定自定義的過程是子過程還是函數(shù)過程 函數(shù)過程名有值,子過程名無值。 過程有一個返回值,則使用函數(shù)過程; 若返回多個值或無返回值,一般使用子過程。 2過程中形參的個數(shù)和傳遞方式的確定 過程中參數(shù)的作用是實現(xiàn)過程與調(diào)用者的數(shù)據(jù)通信。 (1)從主調(diào)程序獲得初值,值傳遞。 (2)將結(jié)果返回給主調(diào)程序,地址傳遞。,3. 實參與形參結(jié)合時對應(yīng)問題 個數(shù)、類型、位置、次序一一對應(yīng)。 形參是值傳遞,對應(yīng)實參可以是表達式、常量、數(shù)組元素。 形參是地址傳遞,對應(yīng)實參只能是簡單變量。 數(shù)組、記錄類型、對象只能是地址傳遞。 4. 變量的作用域問題 局部變量、靜態(tài)變量、全局變量特

溫馨提示

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

評論

0/150

提交評論