VB程序設(shè)計教程高等教育出版社第4-6章.ppt
《VB程序設(shè)計教程高等教育出版社第4-6章.ppt》由會員分享,可在線閱讀,更多相關(guān)《VB程序設(shè)計教程高等教育出版社第4-6章.ppt(116頁珍藏版)》請在裝配圖網(wǎng)上搜索。
VisualBasic程序設(shè)計教程 第3版 2 第4章VB控制結(jié)構(gòu) 4 1順序結(jié)構(gòu)4 2選擇結(jié)構(gòu)4 3循環(huán)結(jié)構(gòu)4 4其它輔助控制語句4 5綜合應(yīng)用4 6程序調(diào)試 3 4 1順序結(jié)構(gòu) VB具有結(jié)構(gòu)化程序設(shè)計的三種程序控制結(jié)構(gòu) 順序結(jié)構(gòu) 選擇結(jié)構(gòu) 循環(huán)結(jié)構(gòu) 是程序設(shè)計的基礎(chǔ) 本章目錄 1 順序結(jié)構(gòu)各語句按出現(xiàn)的先后次序執(zhí)行 用傳統(tǒng)流程圖表示為 4 2 選擇結(jié)構(gòu) 根據(jù)條件決定執(zhí)行的語句 5 3 循環(huán)結(jié)構(gòu) I 當(dāng)型循環(huán)結(jié)構(gòu) II 直到型循環(huán)結(jié)構(gòu) 根據(jù)條件重復(fù)執(zhí)行語句 稱為循環(huán)體 6 4 1順序結(jié)構(gòu)一般程序設(shè)計語言中順序結(jié)構(gòu)的語句主要 賦值語句和輸入 輸出語句等 在VB中賦值語句輸入 輸出通過 文本框控件 標(biāo)簽控件 InputBox函數(shù) MsgBox函數(shù)和過程Print方法等來實現(xiàn) 7 4 1 1賦值語句 形式 變量名 表達(dá)式 對象名 屬性名 表達(dá)式功能 計算表達(dá)式的值 再將此值賦給變量或?qū)ο髮傩?給變量賦值和設(shè)定屬性是VB編程中常見的兩個任務(wù) 例如 n n 1 計數(shù)累加Text1 Text 清除文本框的內(nèi)容Text1 Text 歡迎使用VB 文本框顯示字符串 本章目錄 8 賦值語句注意點 符號有兩個意義 賦值號與表示等于的關(guān)系運(yùn)算符都用 表示 系統(tǒng)會根據(jù)所處的位置判斷符號的意義 賦值號左邊只能是變量 不能是常量 常數(shù)符號 表達(dá)式 下面均為錯誤的賦值語句 Now x y 左邊是表達(dá)式 函數(shù) 5 sqr s x y 左邊是常量X y z 左邊是表達(dá)式 本章目錄 9 賦值語句的兩個常見形式 1 累加sum sum x 2 計數(shù)n n 1 10 4 1 2數(shù)據(jù)的輸入和輸出 1 標(biāo)簽和文本框 1 標(biāo)簽利用標(biāo)簽的Caption屬性輸出數(shù)據(jù) 2 文本框利用文本框的Text屬性獲得用戶輸入的數(shù)據(jù)或?qū)⒂嬎愕慕Y(jié)果輸出 例如 r Val Text1 Text 11 2 輸入對話框InputBox函數(shù)其作用是打開一個對話框 等待用戶輸入 返回字符串類型的輸入值 形式 InputBox 提示 標(biāo)題 默認(rèn)值 x坐標(biāo)位置 y坐標(biāo)位置 本章目錄 注意 提示項不能省略 若要多行提示 可在每行行末加回車換行vbCrLf 例4 1利用InputBox輸入基本工資和營業(yè)額 按營業(yè)額的5 提成 計算實發(fā)工資并顯示 12 作用 打開一個消息框 等待用戶選擇一個按鈕 MsgBox函數(shù)返回所選按鈕的值MsgBox過程不返回值MsgBox函數(shù)形式 變量 MsgBox 提示 按鈕 標(biāo)題 MsgBox過程形式 MsgBox提示 按鈕 標(biāo)題 按鈕項是一整型表達(dá)式 決定信息框按鈕的數(shù)目和類型及出現(xiàn)在信息框上的圖標(biāo)形式 3 消息對話框MsgBox函數(shù)和過程 13 MsgBox按鈕設(shè)置 14 MsgBox所選按鈕返回值 例4 2編一賬號和密碼輸入的檢驗程序 當(dāng)輸入不正確 如賬號為非數(shù)字字符 密碼不正確等 顯示有關(guān)信息 再輸入 15 4 Print方法 作用 在對象上輸出信息 形式 對象 Print Spc n Tab n 輸出列表 其中 對象 窗體 圖形框或打印機(jī) 缺省為窗體 Spc n 函數(shù) 從當(dāng)前位置起空n個空格Tab n 函數(shù) 從最左端開始計算的第n列分號 定位在上一個被顯示的字符之后逗號 定位在下一個打印區(qū)開始處 每區(qū)14列 Print語句尾無分號或逗號 輸出后換行例4 3Print方法輸出圖形利用String函數(shù)顯示重復(fù)字符利用循環(huán)結(jié)構(gòu) Spc Tab函數(shù)顯示有規(guī)律圖形 16 5 Format格式輸出函數(shù) 形式 Format 表達(dá)式 格式字符串 常用數(shù)值格式化符及舉例 例4 4利用Format函數(shù)顯示數(shù)值 17 4 2選擇結(jié)構(gòu) 計算機(jī)要處理的問題往往是復(fù)雜多變的 僅采用順序結(jié)構(gòu)是不夠的 必須利用選擇結(jié)構(gòu)等來解決實際應(yīng)用中的各種問題 VB中主要通過If條件語句和Select情況語句來實現(xiàn) 它們都是對條件進(jìn)行判斷 根據(jù)判斷結(jié)果 選擇執(zhí)行不同的分支 本章目錄 18 4 2 1If條件語句 1 If Then語句 單分支結(jié)構(gòu) IfThen語句塊 可以是一句或多句語句 EndIf或IfThen表達(dá)式 關(guān)系表達(dá)式 邏輯表達(dá)式 算術(shù)表達(dá)式 表達(dá)式值按非零為True 零為False進(jìn)行判斷 該語句的作用是當(dāng)表達(dá)式的值為True 執(zhí)行Then后面的語句塊 否則不做任何操作 IF演示 19 單分支結(jié)構(gòu) 例 已知兩個數(shù)x和y 比較它們的大小 使得x大于y Ifx yThent xx yy tEndIf或Ifx yThent x x y y t簡單If形式無EndIf時 只能是一句語句或語句間用冒號分隔 而且必須在一行上書寫 20 雙分支結(jié)構(gòu) 2 If Then Else語句If表達(dá)式Then語句塊1Else語句塊2EndIf或If表達(dá)式Then語句1Else語句2當(dāng)表達(dá)式的值為True時 執(zhí)行Then后面的語句塊1 否則執(zhí)行Else后面的語句塊2 21 雙分支結(jié)構(gòu)例 計算分段函數(shù) 單分支y cos x x 3 3 x結(jié)構(gòu)實現(xiàn)Ifx0Theny sin x sqrt x x 1 Ifx0Then雙分支y sin x sqr x x 1 Else結(jié)構(gòu)實現(xiàn)y cos x x 3 3 xEndIf 22 多分支結(jié)構(gòu) 3 If Then ElseIf語句If表達(dá)式1Then語句塊1ElseIf表達(dá)式2Then語句塊2 Else語句塊n 1 EndIf 作用 根據(jù)不同的表達(dá)式值確定執(zhí)行哪個語句塊 23 例4 7已知變量ch中存放了一個字符 判斷該字符是字母字符 數(shù)字字符還是其他字符 IfUCase ch A AndUCase ch 0 Andch 9 Then 數(shù)字字符MsgBox ch 是數(shù)字字符 Else 除上述字符以外的字符MsgBox ch 是其他字符 EndIf 不管有幾個分支 依次判斷 當(dāng)某條件滿足 執(zhí)行相應(yīng)的語句 其余分支不再執(zhí)行 若條件都不滿足 且有Else子句 則執(zhí)行該語句塊 否則什么也不執(zhí)行 ElseIf不能寫成ElseIf 多分支結(jié)構(gòu)例 24 指If或Else后面的語句塊中又包含If語句 If表達(dá)式1ThenIf表達(dá)式2Then EndIf EndIf Ifx yThent x x y y tIfy zThent y y z z tIfx yThent x x y y tEndIfEndIf If語句的嵌套 例已知x y z三個數(shù) 使得x y z用一個IF語句和一個嵌套的IF語句實現(xiàn) 25 4 2 2SelectCase語句 SelectCase變量或表達(dá)式Case表達(dá)式列表1語句塊1Case表達(dá)式列表2語句塊2 CaseElse語句塊n 1 EndSelect 表達(dá)式列表與變量或表達(dá)式的類型必須相同 是下面4種形式之一 表達(dá)式例 A 一組用逗號分隔的枚舉值2 4 6 8表達(dá)式1To表達(dá)式260To100Is關(guān)系運(yùn)算符表達(dá)式Is 60 26 SelectCase語句例 將例4 7改用SelectCase語句實現(xiàn) SelectCasechCase a To z A To Z MsgBox ch 是字母字符 Case 0 To 9 MsgBox ch 是數(shù)字字符 CaseElseMsgBox ch 是其他字符 EndSelect多分支結(jié)構(gòu) 用SelectCase語句比If Then ElseIf語句直觀 程序可讀性強(qiáng) 但不是所有的多分支結(jié)構(gòu)均可用SelectCase語句代替If Then ElseIf語句 27 SelectCase語句例 例4 9判斷坐標(biāo)點 x y 落在哪個象限 代碼一Ifx 0Andy 0ThenMsgBox 在第一象限 ElseIfx0ThenMsgBox 在第二象限 ElseIfx0Andy 0ThenMsgBox 在第四象限 EndIf 代碼二SelectCasex yCasex 0Andy 0MsgBox 在第一象限 Casex0MsgBox 在第二象限 Casex0Andy 0MsgBox 在第四象限 EndSelect 代碼二錯誤 1 SelectCase后不能出現(xiàn)多個變量2 Case后不能出現(xiàn)變量及有關(guān)運(yùn)算符 28 4 2 3條件函數(shù) 1 IIf函數(shù)IIf 表達(dá)式 表達(dá)式為真時的值 表達(dá)式為假時的值 IIf函數(shù)是If Then Else結(jié)構(gòu)的簡潔表示例如 將x y中大的數(shù) 放入Tmax變量中 Tmax IIf x y x y 該語句與如下語句等價 Ifx yThenTmax xElseTmax y 29 4 2 3條件函數(shù) 2 Choose函數(shù)Choose 整數(shù)表達(dá)式 選項列表 根據(jù)表達(dá)式的值i 返回選項列表中第i個選項 如果整數(shù)表達(dá)式的值越出選項范圍時 返回Null 例根據(jù)Nop的值 得到 中的某運(yùn)算符 Op Choose Nop 例4 10根據(jù)當(dāng)前日期 顯示今日是星期幾 t Choose Weekday Now 星期日 星期一 星期二 星期三 星期四 星期五 星期六 MsgBox 今天是 Now t DimnopAsInteger opAsCharRandomize nop Int Rnd 4 1 op Choose nop MsgBox nop nop op op 30 4 3循環(huán)結(jié)構(gòu) 計算機(jī)最擅長的功能之一就是按規(guī)定的條件 重復(fù)執(zhí)行某些操作 例如 按照人口某增長率 對人口增長統(tǒng)計 根據(jù)各課程的學(xué)分 績點和學(xué)生的成績 統(tǒng)計每個學(xué)生的平均績點等 這類問題都可通過循環(huán)結(jié)構(gòu)來方便地實現(xiàn) VB中提供了主要兩類循環(huán)語句 For循環(huán)語句 一般已知循環(huán)次數(shù) Do條件型循環(huán)語句 一般未知循環(huán)次數(shù) 31 4 3 1For循環(huán)語句 For循環(huán)語句用于控制循環(huán)次數(shù)預(yù)知的循環(huán)結(jié)構(gòu) For循環(huán)變量 初值To終值 Step步長 語句塊 ExitFor 語句塊Next循環(huán)變量循環(huán)變量必須為數(shù)值型 循環(huán)次數(shù) 例4 11計算1 100的奇數(shù)和 Dimi sum Fori 1To100Step2sum sum iNextiMsgBox sum 32 For循環(huán)語句 循環(huán)流程 1 循環(huán)變量被賦初值 它僅被賦值一次 2 判斷循環(huán)變量是否在終值內(nèi) 如果是 執(zhí)行循環(huán)體 如果否 結(jié)束循環(huán) 執(zhí)行Next的下一語句 3 循環(huán)變量加步長 轉(zhuǎn) 2 繼續(xù)循環(huán) 33 4 3 2Do Loop循環(huán)語句 Do循環(huán)用于控制循環(huán)次數(shù)未知的循環(huán)結(jié)構(gòu) 形式1 Do While Until 語句塊 ExitDo語句塊 Loop形式1為先判斷后執(zhí)行 有可能一次也不執(zhí)行 形式2為先執(zhí)行后判斷 至少執(zhí)行一次 形式2 Do語句塊 ExitDo語句塊 Loop While Until 34 Do Loop流程 35 循環(huán)例題 例4 13我國有13億人口 按人口年增長0 8 計算 多少年后我國人口超過26億 解此問題兩種方法 可根據(jù)公式 直接利用標(biāo)準(zhǔn)函數(shù)對數(shù)可求得 但求得的年數(shù)不為整數(shù) 也可利用循環(huán)求得 36 4 3 3循環(huán)的嵌套 在一個循環(huán)體內(nèi)又包含了一個完整的循環(huán)結(jié)構(gòu)稱為循環(huán)的嵌套 循環(huán)嵌套對For循環(huán)語句和Do Loop語句均適用 例4 14打印九九乘法表 思考 打印上三角或下三角程序如何改動 37 4 4其他輔助控制語句 4 4 1GoTo語句無條件地轉(zhuǎn)移到標(biāo)號或行號指定的那行語句 GoTo 標(biāo)號 行號 注意 標(biāo)號是字符序列 首字符必須為字母 標(biāo)號后應(yīng)有冒號 行號是一個數(shù)字序列 例4 15判斷輸入的數(shù)是否為素數(shù)素數(shù)就是除1和本身以外 不能被其他任何整數(shù)整除的數(shù) 根據(jù)此定義 判別某數(shù)m是否為素數(shù)最簡單的方法就是依次用i 2 m 1去除 只要有一個數(shù)能整除m m就不是素數(shù) 否則m是素數(shù) 要求一定范圍內(nèi)的素數(shù) 只要將m作為外循環(huán)體變量 38 4 4 2退出和結(jié)束語句 1 Exit語句VB中有多種形式的Exit語句 用于退出某種控制結(jié)構(gòu)的執(zhí)行 Exit的形式如下 ExitFor ExitDo ExitSub ExitFunction2 End語句獨(dú)立的End語句用于結(jié)束一個程序的運(yùn)行 它可以放在任何事件過程中 39 4 5綜合應(yīng)用 例4 16由計算機(jī)自動產(chǎn)生四則運(yùn)算題 并能判斷答案的正確性 設(shè)計思路 1 為了減少輸入和增加試題內(nèi)容的隨機(jī)性 通過隨機(jī)函數(shù)Rnd產(chǎn)生試題的操作數(shù)和運(yùn)算符 操作數(shù)范圍是1 10 運(yùn)算符 可對應(yīng)編號1 4 產(chǎn)生表達(dá)式通過Form Load事件過程 2 當(dāng)產(chǎn)生表達(dá)式后 學(xué)生在文本框內(nèi)輸入結(jié)果后按回車鍵 在圖形框顯示正確與否的判斷結(jié)果 3 當(dāng)單擊 計分 按鈕時 計算機(jī)顯示得分結(jié)果 本題主要將隨機(jī)函數(shù) If語句 Select語句綜合在一起使用 本章目錄 40 4 5綜合應(yīng)用 級數(shù)求和 例4 18求自然對數(shù)e的近似值 其誤差小于0 00001 近似公式 分析 本例涉及到程序設(shè)計中兩個重要運(yùn)算 累加 連乘i 累加 在原有和的基礎(chǔ)上再加一個數(shù) 連乘 在原有積的基礎(chǔ)上再乘以一個數(shù) 該題先求i 再將1 i 進(jìn)行累加 循環(huán)次數(shù)未知 可先設(shè)置一個次數(shù)很大的值 然后在循環(huán)體內(nèi)判斷是否到達(dá)精度 也可用DoWhile來實現(xiàn) 41 4 6程序調(diào)試 隨著程序的復(fù)雜性提高 程序中的錯誤也伴隨而來 對初學(xué)者 看到出現(xiàn)錯誤不要害怕 關(guān)鍵是如何改正錯誤 失敗是成功之母 上機(jī)的目的 不光是為了驗證你編寫的程序的正確性 還要通過上機(jī)調(diào)試 學(xué)會查找和糾正錯誤的方法和能力 VB為調(diào)試程序提供了一組交互的 有效的調(diào)試工具 42 4 6 1錯誤類型 語法錯誤 運(yùn)行時錯誤和邏輯錯誤三類 1 語法錯誤 43 2 運(yùn)行錯誤 指令代碼執(zhí)行了一非法操作引起的 例如 類型不匹配 試圖打開一個不存在的文件等 程序會自動中斷 并給出有關(guān)的錯誤信息 44 3 邏輯錯誤 程序運(yùn)行后 得不到所期望的結(jié)果 這說明程序存在邏輯錯誤 例如 運(yùn)算符使用不正確 語句的次序不對 循環(huán)語句的起始 終值不正確等 通常 邏輯錯誤不會產(chǎn)生錯誤提示信息 故錯誤較難排除 需要程序員仔細(xì)地閱讀分析程序 并具有調(diào)試程序的經(jīng)驗 45 4 6 2調(diào)試和排錯 VB的三種模式1 設(shè)計模式 設(shè)計 可以進(jìn)行程序的界面設(shè)計 屬性設(shè)置 代碼編寫等 2 運(yùn)行模式 運(yùn)行 執(zhí)行啟動命令進(jìn)入運(yùn)行模式 在此階段 可以查看程序代碼 但不能修改 3 中斷模式 Break 執(zhí)行中斷命令 進(jìn)入中斷模式 在中斷模式下可以查看代碼 修改代碼 檢查數(shù)據(jù) 本章目錄 46 調(diào)試和排錯 插入斷點 鼠標(biāo)指向所關(guān)心的變量 本章目錄 47 本章小節(jié) 結(jié)構(gòu)化程序設(shè)計三種結(jié)構(gòu)順序結(jié)構(gòu) 選擇結(jié)構(gòu) 循環(huán)結(jié)構(gòu)If Then語句 SelectCase語句 For與Do循環(huán)語句賦值語句與復(fù)合賦值語句數(shù)據(jù)輸出和輸入InputBox MsgBox常用算法素數(shù)判定 級數(shù)求和 試湊法 迭代法解方程 48 第5章數(shù)組和自定義類型 5 1數(shù)組的概念5 2數(shù)組的基本操作和排序5 3列表框和組合框控件5 4自定義類型及其數(shù)組5 5綜合應(yīng)用 本章目錄 49 5 1數(shù)組的概念 1 引例例5 1求100個學(xué)生的平均成績 并統(tǒng)計高于平均分的人數(shù) 用簡單變量和循環(huán) 求平均成績程序段如下 aver 0Fori 1To100mark InputBox 輸入學(xué)生成績 aver aver markNextiaver aver 100問題 1 mark只能放一個學(xué)生的成績 無法統(tǒng)計高于平均分的人數(shù) 2 若用簡單變量保存100個學(xué)生的成績 則需定義100個變量和使用100句輸入語句 由此引入了數(shù)組 本章目錄 50 用數(shù)組解決問題的程序如下 Dimmark 99 AsInteger 聲明數(shù)組markDimaver overn i aver 0Fori 0To99 輸入成績 求分?jǐn)?shù)和mark i InputBox 輸入學(xué)生的成績 aver aver mark i Nextiaver aver 100 求100人的平均分overn 0Fori 0To99 統(tǒng)計高于平均分的人數(shù)Ifmark i averThenovern overn 1NextiMsgBox 平均分 aver 高于平均分人數(shù) overn 本章目錄 51 數(shù)組 不是一種數(shù)據(jù)類型 而是一組相同類型的變量的集合 作用 用一個數(shù)組名代表邏輯上相關(guān)的一批數(shù)據(jù) 用下標(biāo)表示該數(shù)組中的各個元素 和循環(huán)語句結(jié)合使用 使得程序書寫簡潔 使用 必須先聲明后使用按聲明時數(shù)組的大小確定與否 分為兩類數(shù)組 靜態(tài) 定長 和動態(tài) 可變長 本章目錄 52 5 1 2定長數(shù)組及聲明 靜態(tài) 定長 數(shù)組 聲明時就確定了大小的數(shù)組 一維數(shù)組Dim數(shù)組名 下標(biāo)下界To 上界 As類型 說明 下標(biāo)下界缺省為0 下標(biāo)上界為常數(shù) 數(shù)組大小為 下標(biāo)上界 下標(biāo)下界 1 作用 聲明了數(shù)組名 類型 維數(shù) 數(shù)組大小在內(nèi)存分配一塊連續(xù)的區(qū)域 本章目錄 53 例 Dimmark 99 AsInteger聲明了一維定長整型數(shù)組mark 共有100個元素 下標(biāo)范圍為0To99 mark數(shù)組的各元素是mark 0 mark 1 mark 99 mark i 表示由下標(biāo)i的值決定是哪一個元素 mark數(shù)組內(nèi)存分配如下 每個數(shù)組元素有一個唯一的順序號 下標(biāo)不能超出數(shù)組聲明時的上 下界范圍 否則會產(chǎn)生 下標(biāo)越界 錯誤 數(shù)組元素的使用規(guī)則與同類型的簡單變量相同 本章目錄 54 多維數(shù)組聲明 Dim數(shù)組名 下標(biāo)1 下標(biāo)2 As類型 下標(biāo)數(shù)決定了數(shù)組的維數(shù) 數(shù)組的大小為每一維大小的乘積 例Dimx 2 4 AsLong聲明了一個長整型的二維數(shù)組x 共占據(jù)3 5個長整型變量的空間 本章目錄 55 注意 1 下界缺省為0 也可在重新定義數(shù)組的下界 例如 OptionBase1 2 錯誤的聲明 下標(biāo)是變量 n Inputbox 輸入n Dimx n AsSingle 56 動態(tài)數(shù)組 聲明時未給出其大小的數(shù)組 當(dāng)需要使用時再用ReDim語句指出數(shù)組大小 優(yōu)點 可根據(jù)用戶需要 有效地利用存儲空間 它是在程序運(yùn)行到ReDim語句時分配空間 而定長數(shù)組是在程序編譯時分配空間 5 1 3動態(tài)數(shù)組及聲明 57 1 用Dim語句聲明數(shù)組 但不能指定數(shù)組大小形式 Dim數(shù)組名 As數(shù)據(jù)類型 2 用ReDim語句動態(tài)地分配元素個數(shù)形式 ReDim數(shù)組名 下標(biāo) 下標(biāo)2 例 Dims AsSingleSubForm Load ReDims 4 8 EndSub 建立動態(tài)數(shù)組要分兩步 58 定義動態(tài)數(shù)組大小注意 Dim是說明語句 可出現(xiàn)在程序的任何地方 而ReDim是執(zhí)行語句 只能在過程中在過程中可多次使用ReDim語句來改變數(shù)組的大小 每次使用ReDim語句都會使原來數(shù)組中的值丟失 可在ReDim后加Preserve參數(shù)用來保留原來的數(shù)據(jù) 若使用Preserve參數(shù)后 只能改變最后一維的大小 例5 2編一個程序 顯示有n個數(shù)的非波那契數(shù)序列 59 數(shù)組定義時用數(shù)組名表示整體 但在具體使用時針對每個數(shù)組元素進(jìn)行 數(shù)組元素的引用形式為 數(shù)組名 下標(biāo) 下標(biāo)2 數(shù)組的賦值A(chǔ)rray函數(shù) 見P103 形式 變量名 Array 常量列表 注意 1 變量名必須聲明為Variant類型 并作為動態(tài)數(shù)組 2 數(shù)組的下界默認(rèn)為0 上界由參數(shù)個數(shù)決定 下界和上界可通過函數(shù)Lbound和Ubound獲得 3 常量列表用逗號分隔 5 2數(shù)組的基本操作 60 2 數(shù)組的輸入通過TextBox控件或InputBox函數(shù)輸入Dims 3 4 ASIntegerFori 0To3Forj 0To4s I j Val InputBox 輸入 i j 元素 NextjNexti說明 對大量數(shù)據(jù)的輸入一般不用InputBox函數(shù) 61 3 數(shù)組的輸出 例5 3形成5 5的方陣 分別輸出方陣中各元素 上三角和下三角元素 方陣規(guī)律 第一行的元素為0 4 以后每一行是前一行對應(yīng)元素增加5上三角規(guī)律 每一行的起始列與行號相同 只要控制內(nèi)循環(huán)的初值用Tab函數(shù)或Space定位控制輸出的空格 62 4 求數(shù)組和 最小值 位置及交換元素 例5 4求一維數(shù)組中各元素之和 最小數(shù)組元素 并將最小值數(shù)組元素與數(shù)組中第一個元素交換求元素和通過循環(huán)將每個元素進(jìn)行累加求數(shù)組中最小元素假設(shè)第一個元素為最小 然后將該數(shù)與其他元素逐一比較 若發(fā)現(xiàn)小于最小值 就用新值替換最小值 同時記錄下標(biāo)值 求最大值的方法與求最小值相似 63 本章目錄 64 5 數(shù)組排序 排序是將一組數(shù)按遞增或遞減的次序排列 例如按學(xué)生的成績 球賽積分等排序 排序的算法有許多 常用的有選擇法 冒泡法 插入法 合并排序等 1 選擇法排序基本思想 每次在若干個無序數(shù)中找最小 大 數(shù) 并放在相應(yīng)的位置 65 例對于有n個數(shù)的數(shù)組 按遞增次序排序的步驟 從n個數(shù)中找出最小數(shù)的下標(biāo) 最小數(shù)與第1個數(shù)交換位置 通過這一輪排序 第1個數(shù)已確定好 2 除已排序的數(shù)外 其余數(shù)再按步驟1 的方法選出最小的數(shù) 與未排序數(shù)中的第1個數(shù)交換位置 3 重復(fù)步驟2 n 1遍 最后構(gòu)成遞增序列 如原始序列 869327第1遍排序后 269387第2遍排序后 239687 66 例5 5對已知存放在數(shù)組中的6個數(shù) 用選擇法按遞增順序排序 選擇法排序過程示意 67 2 冒泡法排序 基本思想是 1 從第一個元素開始 對數(shù)組中兩兩相鄰的元素比較 將值較小的元素放在前面 值較大的元素放在后面 一輪比較比較完畢 一個最大的數(shù)沉底成為數(shù)組中的最后一個元素 一些較小的數(shù)如同氣泡一樣上浮一個位置 2 n個數(shù) 經(jīng)過n 1輪比較后完成排序 68 冒泡法排序 例5 6用冒泡排序法實現(xiàn)例5 5的問題 69 3 插入數(shù)據(jù) 插入數(shù)據(jù)基本思想是 1 首先查找待插入數(shù)據(jù)在數(shù)組中的位置k 2 然后從最后一個元素開始往前直到下標(biāo)為k的元素依次往后移動一個位置 3 第k個元素的位置騰出 將數(shù)據(jù)插入 例5 7在有序數(shù)組a中插入數(shù)值x 本章目錄 70 4 刪除數(shù)據(jù) 刪除操作首先也是要找到欲刪除的元素的位置k 然后從k 1到n個位置開始向前移動 最后將數(shù)組元素減1 例5 8要將值為13的元素刪除 本章目錄 71 5 3列表框和組合框 列表框和組合框?qū)嵸|(zhì)是一維字符串?dāng)?shù)組的使用列表框可顯示多個選項供用戶選擇 不能直接修改其中的內(nèi)容 組合框組合了文本框和列表框的特性而形成的一種控件 72 1 列表框和組合框重要屬性 1 List該屬性是一個字符型數(shù)組 下標(biāo)從0開始 存放列表框的項目 2 ListIndex 表示執(zhí)行時選中的列表項的序號 若未選中任何項 則ListIndex的值為 1 該屬性只能在程序中設(shè)置或引用 3 ListCount 列表框中項目的數(shù)量 4 Sorted 為True時 則項目按字母順序排列顯示 否則 按加入的先后順序顯示 5 Text 被選定的文本內(nèi)容 73 列表框特有的屬性MultiSelect屬性組合框特有的屬性組合框有3種式樣 由Style屬性決定 下拉式組合框 簡單組合框和下拉式列表框 74 List1 ListIndex 2List1 ListCount 6List1 Sorted FalseList1 Text為 C C 程序設(shè)計 List1 List List1 ListIndex 等于List1 Text 本章目錄 75 2 常用方法 AddItem方法把一個項目加入列表對象 AddItem項目字符串 索引值 索引值 決定新增項在列表中的位置 如果省略 則新增項目添加在最后 RemoveItem方法刪除列表中指定項目對象 RemoveItem索引值Clear清除列表中所有項目例如 List1 Clear 全部清除 76 3 重要事件 列表框 Click DblClick組合框 Click例5 9編寫一個能對列表框進(jìn)行項目添加 修改和刪除的應(yīng)用程序 關(guān)鍵 1 獲得選中的下標(biāo)ListIndex2 不能直接修改列表框 先將選項顯示在文本框中 更改文本框中內(nèi)容后 再更新列表框 77 4 應(yīng)用 例5 12使用組合框?qū)κ『椭陛犑忻Q管理 78 5 4自定義類型及數(shù)組 1 概念和定義數(shù)組存放性質(zhì)相同的數(shù)據(jù)集合 若不同類型信息作為一個整體來描述 例如姓名 性別 出生年月等 通過Type語句來實現(xiàn) 79 Type自定義類型名元素名1As數(shù)據(jù)類型名 元素名nAs數(shù)據(jù)類型名EndType其中 元素名 表示一個成員 可以是簡單變量 也可是數(shù)組說明符 數(shù)據(jù)類型名 既可是標(biāo)準(zhǔn)類型 也可是已定義的自定義類型 若為字符串類型 應(yīng)為定長字符串 80 例如 定義一個有關(guān)學(xué)生信息的類型 TypeStudType StudType為自定義類型名NameAsString 5 姓名SexAsString 1 性別TelephoneAsLong 電話SchoolAsString 10 學(xué)校EndType注意 自定義類型不能在過程內(nèi)定義 一般放在標(biāo)準(zhǔn)模塊文件 默認(rèn)為Public 若在窗體模塊的通用聲明段定義 必須加Private 本章目錄 81 2 自定義類型變量的聲明 定義了自定義類型 就可在變量的聲明時使用 形式 Dim變量名As自定義類型名例如 如下語句 DimS1AsStudType S2AsStudType聲明S1 S2為兩個同種類型的變量 82 注意 不要混淆StudType和S1 前者如同Integer等的類型名 后者根據(jù)該類型分配所需的內(nèi)存空間 存儲各成員數(shù)據(jù) 2 類型變量和數(shù)組相同之處它們都是由若干個成員組成 不同之處 前者的成員代表不同性質(zhì) 不同類型的數(shù)據(jù) 以各個不同的成員名表示 而數(shù)組一般存放的是同種性質(zhì) 同種類型的數(shù)據(jù) 以下標(biāo)表示不同的元素 83 3 自定義類型變量成員的引用 引用自定義類型變量中的某個成員 形式如下 自定義類型變量名 成員名例如 S1 Name S1變量中的姓名S1 Sex 性別可利用With語句簡化成員引用 With變量名語句塊EndWith WithS1 Name 張華 Sex 男 School 同濟(jì)大學(xué) EndWith 84 4 自定義類型數(shù)組及應(yīng)用 自定義類型數(shù)組就是數(shù)組中的每個元素是自定義類型例5 13用自定義類型數(shù)組 查詢和顯示學(xué)生信息分析 自定義一個記錄類型 由姓名 性別 電話 學(xué)校組成 聲明一個存放100個記錄的數(shù)組 85 5 5綜合應(yīng)用 大量數(shù)據(jù)輸入和編輯 問題 InputBox一次輸入一個數(shù)據(jù) 而后不能修改一個文本框也只能輸入一項改進(jìn) 可利用文本框 字符串函數(shù)通過編程實現(xiàn) 例5 15在文本框輸入數(shù)據(jù) 并允許修改和自動識別非數(shù)字?jǐn)?shù)據(jù) 輸入結(jié)束將它們按分隔符分離后存放在數(shù)組中 利用Keyascii參數(shù)過濾非法數(shù)據(jù) 文本框本身具有編輯功能 利用Replace函數(shù)去除重復(fù)輸入的分隔符 利用Split函數(shù)將輸入的內(nèi)容分離到數(shù)組中 86 第六章過程 6 1函數(shù)過程的定義與調(diào)用6 2子過程的定義與調(diào)用6 3參數(shù)傳遞6 4遞歸6 5綜合應(yīng)用 87 過程的引入 使同類的操作不重復(fù)編寫 寫一次多次用把一項復(fù)雜的工作分成簡單的功能塊 分而治之過程 完成一段獨(dú)立功能 可供其他過程使用 調(diào)用 調(diào)用過程 調(diào)用其他過程的過程 88 引例6 1已知多邊形各條邊的長度 計算多邊形的面積 計算多邊形面積 可將多邊形分解成若干個三角形 計算三角形面積的公式如下 本章目錄 可將需重復(fù)計算三角形面積的功能自定義為一個過程 供事件過程多次調(diào)用 89 常用過程分類 Sub過程 Function過程 事件過程自定義子過程 內(nèi)部函數(shù) 標(biāo)準(zhǔn)函數(shù) 自定義函數(shù)過程 1 過程是一段程序代碼 是相對獨(dú)立的邏輯模塊 2 一個完整的VB應(yīng)用程序由若干過程和模塊組成 本節(jié)主要介紹用戶自定義的Sub子過程 完成一定的操作和功能 無返回值 Function函數(shù)過程 完成一定的操作和功能 并且可將數(shù)據(jù)處理的結(jié)果返回 90 有兩種方法 1 利用 工具 菜單的 添加過程 命令定義生成一個函數(shù)的框架 2 利用代碼窗口直接定義 函數(shù)過程形式為 Public Private Function函數(shù)過程名 形參列表 As類型 局部變量或常數(shù)定義語句塊1函數(shù)名 表達(dá)式函數(shù)過程體 ExitFunction 語句塊2函數(shù)名 表達(dá)式EndFunction 6 1函數(shù)過程的定義和調(diào)用1 函數(shù)過程的定義 91 其中 a 函數(shù)過程名 與變量命名規(guī)則相同 b As類型 函數(shù)返回值的類型 c 形參列表形式為 ByVal 變量名 As類型 ByVal 變量名 As類型 形參只能是變量或數(shù)組名 ByVal表示當(dāng)過程被調(diào)用時此參數(shù)是值傳遞 否則是地址傳遞 函數(shù)過程無參數(shù)時 過程名后的括號不能省略 d 在函數(shù)體內(nèi)至少對函數(shù)名賦值一次 92 定義函數(shù)過程areaFunctionarea x y z AsSingleDimc c 1 2 x y z area Sqrt c c x c y c z EndFunction 例如 定義計算三角形面積的函數(shù)過程 93 2 函數(shù)過程的調(diào)用函數(shù)過程的調(diào)用與使用標(biāo)準(zhǔn)函數(shù)相同 形式如下 函數(shù)過程名 參數(shù)列表 如 s1 area a b c 見P126 因函數(shù)過程名返回一個值 故函數(shù)過程不能作為單獨(dú)的語句調(diào)用 必須作為表達(dá)式或表達(dá)式的一部分來構(gòu)成語句 94 函數(shù)過程的調(diào)用 例6 3編一函數(shù) 統(tǒng)計字符串中漢字的個數(shù) 分析 在VB中 字符以Unicode碼存放 每個漢字和英文是一個字符 占有兩個字節(jié) 區(qū)別是漢字的機(jī)內(nèi)碼最高位為1 若利用Asc函數(shù)求其碼值為小于0 以補(bǔ)碼表示 而西文字符的最高位為0 Asc函數(shù)求其碼值為大于0 本章目錄 95 6 2子過程的定義與調(diào)用 6 2 1引例以下情況使用函數(shù)過程存在不便 不是為了獲得某個函數(shù)值 而是為了某種功能的處理 要獲得多個結(jié)果 VB中提供了使用更靈活的子過程 例6 4編一過程 對Label1控件進(jìn)行移動 通過參數(shù)Tag的值 1或 1 決定移動方向 該過程不是為了計算獲得某個結(jié)果 而是進(jìn)行對控件移動的處理 本章目錄 96 6 2 2子過程的定義 子過程定義的方法同函數(shù)過程 形式如下 Public Private Sub子過程名 形參列表 局部變量或常數(shù)定義語句 ExitSub 語句EndSub子過程名 形參同函數(shù)過程中對應(yīng)項的規(guī)定 當(dāng)無形參時不要括號 本章目錄 97 子過程與函數(shù)過程的區(qū)別 把某功能定義為函數(shù)過程還是子過程 沒有嚴(yán)格的規(guī)定 一般若程序有一個返回值時 函數(shù)過程直觀 當(dāng)有多個返回值時 習(xí)慣用子過程 函數(shù)過程必須有返回值 函數(shù)名有類型 子過程名沒有值 過程名沒有類型 不能在子過程體內(nèi)對子過程名賦值 本章目錄 98 子過程的調(diào)用是一句獨(dú)立的調(diào)用語句 有兩種形式 Call子過程名 實參列表 子過程名 實參列表 用Call關(guān)鍵字時 若有實參 則實參必須用圓括號括起 無實參圓括號省略 注意 若實參要獲得子過程的返回值 則實參只能是變量 與形參同類型的簡單變量 數(shù)組名 結(jié)構(gòu)類型 不能是常量 表達(dá)式 也不能是控件名 6 2 3子過程調(diào)用 本章目錄 99 例6 5分別編一統(tǒng)計字符串S中定冠詞The出現(xiàn)個數(shù)的子過程和函數(shù)過程 并分別調(diào)用 處理方法 利用InStr函數(shù)反復(fù)在字符串S找The子串 分析 對同一問題定義兩種過程時 只要抓住函數(shù)過程和子過程的區(qū)別 即函數(shù)名有一個值 子過程名無值的特點 當(dāng)定義好函數(shù)過程后 要改為子過程 只要將函數(shù)過程的返回結(jié)果作為子過程的形參 即在子過程中增加一個參數(shù) 反之也然 本章目錄 100 6 3參數(shù)傳遞 6 3 1形參與實參在參數(shù)傳遞中 一般是按位置傳送 按實參的位置次序與形參的位置次序?qū)?yīng)傳送 與參數(shù)名沒有關(guān)系 按位置傳送是最常用的參數(shù)傳遞方法 如在調(diào)用標(biāo)準(zhǔn)函數(shù)時 用戶根本不知道形參名 只要關(guān)心形參的個數(shù) 類型 位置 例如Mid函數(shù)形式 Mid 字符串 起始位 取幾位 調(diào)用語句 s Mid ThisisVB 9 2 則s中的結(jié)果為 VB 本章目錄 101 6 3 2傳址與傳值 實參與形參的結(jié)合有傳址 ByRef 和傳值 ByVal 兩種方法 傳址方式參數(shù)結(jié)合過程當(dāng)調(diào)用一個過程時 它將實參的地址傳遞給形參 因此在被調(diào)過程體中對形參的任何操作都變成了對相應(yīng)實參的操作 實參的值就會隨過程體內(nèi)對形參的改變而改變 傳值方式參數(shù)結(jié)合過程當(dāng)調(diào)用一個過程時 系統(tǒng)將實參的值復(fù)制給形參 實參與形參斷開了聯(lián)系 在過程體內(nèi)對形參的任何操作不會影響到實參 本章目錄 102 例6 6傳址與傳值 本章目錄 形參獲得實參的值 形參獲得實參的地址 103 傳址與傳值 選用傳值還是傳地址一般進(jìn)行如下考慮 要將被調(diào)過程中的結(jié)果返回給主調(diào)程序 則形參必須是傳址方式 這時實參必須是同類型的變量名 包括簡單變量 數(shù)組名 結(jié)構(gòu)類型等 不能是常量 表達(dá)式 不希望過程修改實參的值 則應(yīng)選用傳值方式 減少各過程間的關(guān)聯(lián) 因為在過程體內(nèi)對形參的改變不會影響實參 形參是數(shù)組都是地址傳遞 可表示值傳遞或地址傳遞 本章目錄 104 例6 7如下sum子過程求數(shù)組a各元素和 并改變數(shù)組各元素值 Functionsum ByValx AsInteger Dimi sum 0Fori 0ToUBound x sum x i x i 2 x i NextiEndFunction 6 3 3數(shù)組參數(shù)的傳遞 本章目錄 105 形參是數(shù)組要以數(shù)組名加圓括號表示 不要給出維數(shù)上界 多維數(shù)組 每維以逗號分隔 在過程中通過Ubound函數(shù)確定每維的上界 實參是數(shù)組要給出數(shù)組名 不需要圓括號 當(dāng)數(shù)組作為參數(shù)傳遞時 系統(tǒng)將實參數(shù)組的起始地址傳給過程 使形參數(shù)組也具有與實參數(shù)組相同的起始地址 數(shù)組參數(shù)的傳遞 形參數(shù)組實參數(shù)組 本章目錄 106 6 3 4變量的作用域 過程級變量在一個過程內(nèi)用Dim或Static語句聲明的變量 只能在本過程中使用模塊級變量在模塊內(nèi) 任何過程外用Dim Private語句聲明的變量 可被本模塊的任何過程訪問全局變量在模塊級用Public語句聲明的變量 可被應(yīng)用程序的任何過程或函數(shù)訪問 本章目錄 107 變量的作用域 例如在下面一個標(biāo)準(zhǔn)模塊文件中不同級的變量聲明 PublicPaAsinteger 全局變量PrivateMbAsstring 10 窗體 模塊級變量SubF1 DimFaAsinteger 過程級變量 EndSubSubF2 DimFbAsSingle 過程級變量EndSub 本章目錄 108 6 3 5靜態(tài)變量 靜態(tài)變量程序運(yùn)行過程中可保留變量的值聲明形式 Static變量名 AS類型 用Dim聲明的變量 每次調(diào)用過程時重新初始化例6 12比較Dim和Static兩者的區(qū)別 編一程序 利用局部變量Count統(tǒng)計單擊窗體的次數(shù) 本章目錄 109 遞歸過程在自身定義的內(nèi)部調(diào)用自己 例6 12編fac n n 的遞歸函數(shù)Functionfac nAsInteger AsIntegerIfn 1Thenfac 1Elsefac n fac n 1 EndIfEndFunction 6 4遞歸 用自身的結(jié)構(gòu)來描述自身就稱為遞歸 最典型的例子是階乘運(yùn)算 作如下的定義 本章目錄 110 遞推過程 每調(diào)用自身 當(dāng)前參數(shù)壓棧 直到達(dá)到遞歸結(jié)束條件 回歸過程 不斷從棧中彈出當(dāng)前的參數(shù) 直到???遞歸算法設(shè)計簡單 但消耗的機(jī)時和占據(jù)的內(nèi)存空間比非遞歸大由此可見構(gòu)成遞歸的結(jié)構(gòu)如下 遞歸結(jié)束條件及結(jié)束時的值 能用遞歸形式表示 并且遞歸向終止條件發(fā)展 fac 2 2 fac 1 fac 1 1 fac 4 4 6 fac 3 3 2 fac 2 2 1 fac 3 3 fac 2 fac 4 4 fac 3 本章目錄 遞歸結(jié)構(gòu) 111 6 5綜合應(yīng)用 1數(shù)制轉(zhuǎn)換不同進(jìn)制數(shù)之間的轉(zhuǎn)換 可通過編程來實現(xiàn) 也可通過VB提供的內(nèi)部函數(shù) 十進(jìn)制轉(zhuǎn)換為八進(jìn)制函數(shù) Oct 轉(zhuǎn)換為十六進(jìn)制函數(shù) Hex 來實現(xiàn) 例6 13編一函數(shù) 實現(xiàn)一個十進(jìn)制整數(shù)轉(zhuǎn)換成二至十六任意進(jìn)制的字符 分析 十進(jìn)制正整數(shù)m轉(zhuǎn)換成r進(jìn)制數(shù) 將m不斷除r取余數(shù) 若余數(shù)超過9 還要進(jìn)行相應(yīng)的轉(zhuǎn)換 例如10變成A 11變成B等 直到商為零 以反序得到結(jié)果 即最后得到的余數(shù)在最高位 本章目錄 動畫演示 112 綜合應(yīng)用 加密 2 加密和解密信息加密是信息安全性的措施之一 信息加密有各種方法 最簡單的加密方法是將每個字母平移一個位置 稱為密鑰 例如 后移5個位置 這時 A F B G Y D Z E a f 解密是加密的逆操作 例6 14編一加密和解密的程序 即將輸入的一行字符串中的所有字母加密 加密后還可再進(jìn)行解密 本章目錄 113 Welcomestud W C 87 IAsc Asc C 92 5 IAsc 90IAsc IAsc 26 B 對取得的一個字符 放入變量 中 加密的過程如左 C Chr IAsc 114 綜合應(yīng)用 查找 3 查找什么是查找 查找是在線性表 在此為數(shù)組 中 根據(jù)指定的關(guān)鍵值 找出與其值相同的元素 查找方法 一般有順序查找和二分法查找 順序查找根據(jù)查找的關(guān)鍵值與數(shù)組的元素逐一比較 若相同 查找成功 若找不到 則查找失敗 例6 15實現(xiàn)順序查找 115 綜合應(yīng)用 字符處理 4 字符處理應(yīng)用例6 16編寫一個英文打字訓(xùn)練的程序 要求如下 1 在標(biāo)簽框內(nèi)隨機(jī)產(chǎn)生30個字母的范文 2 當(dāng)焦點進(jìn)入輸入文本框時開始計時 并顯示當(dāng)時的時間 3 當(dāng)輸入了30個字母時結(jié)束計時 禁止向文本框輸入內(nèi)容 顯示打字的速度和正確率 此題關(guān)鍵是 對輸入的字符串與隨機(jī)產(chǎn)生的字符串 一一對應(yīng)比較 判斷輸入正確與否 本章目錄 116 思考題 1 為什么是要使用過程 2 簡述子過程和函數(shù)過程的異同點 3 什么是形參 什么是實參 實參與形參之間怎樣傳值 4 按變量聲明的位置可分為哪幾種變量 5 什么是靜態(tài)變量 如何聲明靜態(tài)變量 本章目錄- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- VB 程序設(shè)計 教程 高等教育出版社
鏈接地址:http://www.3dchina-expo.com/p-8303153.html