版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VisualBasic程式設計簡明教程
第一章
VisualBasic程式設計概述
1.1引例
1.2VB主要功能和特點
1.3VB集成開發環境1.1引例1.1
一行內容在窗體左、右移動;
移動兩種方法:手動和自動,當自動時,文字閃爍顯示;當內容超出窗體,進行反彈。
1.1引例2.1
對輸入的字元進行轉換的程式。轉換規則:大寫字母轉換成小寫字母,小寫字母轉換成大寫字母空格不轉換其餘轉換成“*”。要求:每輸入一個字元,馬上就進行判斷和轉換。通過上述兩例說明VB面向對象、可視化、事件驅動的特點。1.2VB主要功能和特點1.具有面向對象的可視化設計工具;2.事件驅動的編程機制;3.提供了易學易用的應用程式集成開發環境;4.結構化的程式設計語言;5.支持多種資料庫系統的訪問;6.Active技術;7.VB6.0在開發環境上、網路功能等的增強;8.完備的help聯機幫助功能。1.3VB集成開發環境1.主窗口應用程式窗口,由標題欄、菜單欄和工具欄組成。2.窗體(form)窗口設計VB程式的介面。3.代碼(code)窗口編輯窗體、標準模組中的代碼。4.屬性(properties)窗口所有窗體或控件的屬性設置。5.工程資源管理器(projectexpror)窗口保存一個應用程式所有的檔。6.工具箱(toolbox)窗口顯示各種控件的製作工具,供用戶在窗體上設計。第二章VB簡單的程式設計(3學時)
2.1程式設計方法的發展
2.2VB中的有關概念
2.3建立簡單的應用程式
2.4基本控件和屬性
2.5工程的管理及環境的設置
2.6生成可執行檔和製作安裝盤
2.7程式調試
2.8常見錯誤2.1程式設計方法的發展1.初期的程式設計
高運行效率、少佔用記憶體為目標。2.結構化程式設計
程式的可讀性、可維護性為目標。程式=演算法+數據結構的面向過程的程式設計。3.面向對象的程式設計
降低程式的複雜性、提高軟體的開法效率和改善工作介面為目標。程式=對象+消息的面向對象的程式設計。2.2對象的有關概念1.類類是創建對象實例的範本,包含了創建對象的屬性描述和行為特徵的定義。2.對象是類的一個實例,繼承了類的屬性、方法。
VB中常用的對象有:窗體、控件等。3.對象的建立和命名4.對象的三要素(1)屬性
對象的性質,即用來描述和反映對象特徵的參數。(2)方法
對象的行為,即將一些通用的過程編寫好並封裝起來,作為方法供用戶直接調用。
(3)事件回應對象的動作稱為事件,它發生在用戶與應用程式交互時。如單擊控件、滑鼠移動、鍵盤按下等。事件過程指附在該對象上的用戶編寫的程式代碼,是事件的處理程式。事件驅動過程是圖形用戶介面的本質,由用戶控制而代碼作出回應。5.VB程式的執行步驟如下:1)啟動應用程式,裝載和顯示窗體;2)窗體(或窗體上的控件)等待事件的發生;3)事件發生時,執行對應的事件過程;4)重複執行步驟(2)和(3);5)直到遇到END結束語句結束程式的運行;或按“結束”強行停止程式的運行。2.3建立簡單的應用程式以例2.1為例:1.建立用戶介面的對象;2.對象屬性的設置;3.對象事件過程及編程;4.程式運行和調試;5.保存檔。2.4基本控件和窗體一、常用屬性
1.Name名稱屬性創建的對象名稱,有默認的名。在程式中,控件名是作為對象的標識而引用,不會顯示在窗體上。
2.Caption標題屬性 該屬性決定了控件上顯示的內容。
3.Height、width、top和left屬性4.Enabled屬性控件是否可操作。當設置為false時,呈暗淡色,禁止用戶進行操作。5.Visible屬性控件是否可見。當設置為false時,用戶看不到,但控件本身存在。6.Font屬性
Fontname:字體;Fontsize:字體大小;Fontbold:是否是粗體;
Fontitalic:是否斜體;Fontstrikethru:是否加一刪除線。
Fontunderline:是否帶下劃線。
例2.2在窗體是建立兩個命令按鈕
Command1和Command2,Command2
的Font通過屬性窗口設置,其餘屬性通過代碼實現。7.
Forecolor前景顏色屬性設置控件的前景顏色(即正文顏色).。其值是一個十六進制常數,用戶可以在調色板中直接選擇所需顏色。8.Backcolor背景顏色屬性9.Backstyle背景風格屬性
0-transparent:透明顯示,即控件背景顏色顯示不出來。10.
BorderStyle邊框風格屬性
0-None:控件周圍沒有邊框。
1-FixedSingle:控件帶有單邊框。11.Alignment屬性控件上正文水準對齊方式
0:正文左對齊;1:右對齊;2:居中。12.
AutoSize屬性控件是否根據正文自動調整大小,
False13.WordWarp屬性
AutoSizeTrue時,WordWarp才有效。按正文字體大小在垂直方向上改變顯示區域的大小。14.TabIndex屬性決定了按Tab鍵時,焦點在各個控件移動的順序。各個控件默認
TabIndex值就是以控件建立時的順序,第一個為0。15.控件默認屬性
反映該控件最重要的屬性,使用時可省略屬性名。注意:Command的默認屬性為Default,當該屬性為True,當按Enter鍵,該控件起作用。例2.3
控件設置效果二.窗體1.屬性
Caption標題
MaxButton、MinButton
Icon、ControlBox
Picture、AutoRedrawBorderStyle
(012345)
WindowsState
(0-正常、1-最小化、2-最大化)2.事件
Click、DblClick和Load
Load當裝入窗體時激發,通常用於對屬性和變數初始化3.方法
Print、Cls和Move等
例2.4上述屬性、Click、DblClick和Load
事件演示。三、標籤Label
用於顯示文本(輸出)資訊,不能作為輸入資訊的介面。
例2.5
顯示浮雕效果的文字,實現方法:字顏色、標籤位置四、文本框TextBox
是一個文本編輯區域,可在該區域輸入,編輯和顯示正文內容。
1.其他屬性
Text:正文內容;
Maxlength:設置正文的最多字元個數,0任意長度值;
MultiLine:是否為多行,默認為一行,False;
ScrollBars:MultiLine為True時,該屬性才有效,表示滾動條的形式
0-None、1-Horizontal、2-Vertical、3-Both;
Locked:是否可被編輯屬性,False,表示為可編輯。PassWord:口令字元;Text屬性返回輸入的數據,螢幕顯示該字元;
SelStart、SelLength、SelText:選中文本的起始、長度、內容。
例2.6複製選中的文本2.常用事件
Change:當改變文本框的Text屬性時會引發該事件。
KeyPress(KeyAsciiAsInteger):同上,並可返回一個KeyAscii參數
KeyAscii
為13,按回車鍵;為0去除剛輸入的字元。
LostFocus:當控件失去焦點時發生。
GotFocus:當控件獲得焦點時發生。3.常用方法
[對象.]SetFocus:是把游標移到指定的文本框對象中。4.文本框的應用數據過濾例2.7要求輸入合法的數字數據。當輸入結束時(按Tab鍵),對於輸入正確的數據,顯示正確資訊;對輸入的非數字數據,則響鈴(Beep)、顯示錯誤資訊、清除文本框中的內容,並使焦點重新回到文本框。
Text2_LostFocus
當輸入結束按Tab鍵時,該事件激發。
IsNumeric(Text2):判斷是否輸入非數字數據。
Text2.SetFocus:使焦點重新回到文本框。
五、命令按鈕CommandButton
接受用戶輸入的命令。輸入命令可以有三種方式:滑鼠單擊、Tab鍵焦點到該按鈕、快捷鍵。
1.其他屬性Caption:命令按鈕顯示的內容,可設置快捷鍵,例&Ok,顯示
Ok。Value:檢查該按鈕是否按下。該屬性在設計時無效。Picture:按鈕可顯示圖片檔(.bmp和.Ico),當Style為1時有效。Style:確定顯示的形式,0只能顯示文字,1文字、圖形均可。ToolTipText:設置工具提示,和Picture結合使用。
2.事件
Click3.例2.8
建立一個允許剪切、複製和粘貼的簡單便箋板程式。可增加內容:利用MouseMove事件決定命令按鈕的有效性,即當選中內容,“剪切”、“複製”按鈕有效,否則無效。六、常用方法方法是面向對象的,故使用的形式為:[對象.]方法
1.Print方法
形式:[對象.]Print[{Spc(n)|Tab(n)}][運算式列表][;|,]
作用:在對象上輸出資訊對象:窗體、圖形框或印表機(Printer),省略對象在窗體上輸出。Spc(n)函數:插入n個空格,允許重複使用。Tab(n)函數:左端開始右移動n列,允許重複使用。;(分號):游標定位上一個顯示的字元後。,(逗號):游標定位在下一個列印區的開始位置處。無;,時換行。開始列印的位置是由對象的CurrentX和CurrentX屬性決定,缺省為列印對象的左上角0,0。
注意:Print方法在Form_Load事件過程中起作用,必須設置窗體的
AutoRedraw為True。例2.9顯示圖形
PrivateSubForm_Click()Fori=1To5PrintTab(i);String(6-I,"▼");Spc(6);String(I,"▲")NextiEndSub注意:String(number,character)返回指定長度重複字元的字串。考慮:若把Spc(6)換成Tab(6),效果如何?2.Cls方法
形式:[對象.]Cls
作用:清除運行時在窗體或圖形框中顯示的文本或圖形。注意:不清除在設計時的文本和圖形。3.Move方法形式:[對象.]Move左邊距離[,上邊距離[,寬度[,高度]]]
作用:移動窗體或控件,並可改變其大小。
對象:可以是窗體及除時鐘、菜單外的所有控件
例2.10圖形移到窗體的中心。七、應用舉例
例2-11編一計算月支付貸款的程式。現要求根據房產商提供的資訊,買房者選擇房型、面積、單價、按揭期等資訊,計算每月支付代款的程式。窗體1:列表框選擇數據、標籤顯示數據、文本框輸入數據;窗體2:圖形框顯示房屋的平面圖。Pmt函數計算月支付貸款。2.5工程的管理及環境的設置一、工程的組成工程檔包含了一個應用程式的所有檔:窗體檔(.frm):控件及屬性、事件過程和自定義過程;
窗體的二進位數據檔(.frx),自動產生同名.frx檔;標準模組檔(.bas);類模組的檔(.cls); 資源檔(.res); ActiveX控件的檔(.ocx).二、創建、打開和保存工程三、添加、刪除和保存檔1.窗體名和窗體檔案名概念
窗體名:窗體的Name屬性,在代碼中用來引用该窗体,同一工程不能有相同的窗體名;
窗體檔案名:窗體存放在磁片上的檔案名,該檔包含了該窗體的所有控件屬性和代碼,同一檔夾不能有相同的檔案名。2.在工程中添加現存的窗體時,只是對該窗體檔的引用納入工程。因此,如果更改窗體並保存它,會影響包含此窗体文件的任何工程。3.在工程中刪除窗體時,僅將此窗體從工程裏刪除掉,但是窗體檔仍存在於磁片上。但是,如果在VB之外刪除一個窗體檔,VB不能更新此工程檔,當打開此工程時,將顯示一個檔丟失的錯誤資訊。4.對窗體檔改名方法1)打開工程“另存為…Form”實現檔的複製——保存工程檔。2)利用編輯程式打開工程檔,修改FORM=XXX的檔案名。窗體檔案名窗體名2.6生成可執行檔和製作安裝盤
以工程檔例2.11為例。1.生成可執行檔檔/生成V6B2-11.exe檔,然後關閉VisualBasic6.0。2.製作安裝盤在嚮導的指導下運行VB6.0中文版工具“Package&Deployment”;“打包”:把工程中用到的各種類型的檔進行打包壓縮後,存放到特定的目錄下。“展開”:再把這些打包的檔展開到用戶可以攜帶的安裝介質軟碟、光碟等。3.檢測安裝程式
在沒有VB6.0系統的環境下,執行安裝盤中的Setup.exe檔,將發行盤進行安裝。2.7程序調試一、錯誤類型
(1)編輯錯誤在編輯代碼時,VB會對鍵入的代碼直接進行語法檢查。當發現代碼存在打字錯誤,遺漏關鍵字或標點符等語法錯誤,VB在Form窗口中彈出一個子窗口,提示出錯資訊,出錯的那一行變成紅色。這時,用戶必須單擊“確定”按鈕,關閉出錯提示窗,然後對出錯行進行修改。(2)編譯錯誤
編譯錯誤指按了“啟動”按鈕,VB開始運行程式前,先編譯執行的程式段時,產生的錯誤。此類錯誤由於用戶未定義變數、遺漏關鍵字等原因產生。這時,VisualBasic也彈出一個子窗口,提示出錯資訊,出錯的那一行被高亮度顯示。(3)運行錯誤運行時錯誤指VB在編譯通過後,運行代碼時發生的錯誤。這類錯誤往往是指令代碼執行了一非法操作引起的。例如類型不匹配、試圖打開一個不存在的檔等。(4)邏輯錯誤程式運行後,得不到所期望的結果,這說明程式存在邏輯錯誤。這類錯誤往往是程式存在邏輯上的缺陷所引起。例如,運算符使用不正確、語句的次序不對、迴圈語句的起始、終值不正確等。通常,邏輯錯誤不會產生錯誤提示資訊,故錯誤較難排除,需要程式員仔細地閱讀分析程式以及調試。二、調試錯誤
(1)VB的三種模式設計模式[設計]
進行程式的介面設計、屬性設置、代碼編寫等。運行模式[運行]
執行“運行/啟動”命令,可以查看程式代碼,但不能修改。中斷模式[中斷]
當在運行模式,按了“中斷”命令或當程式出現運行時錯誤時進入中斷模式。可以查看代碼、修改代碼、檢查數據。
(2)調試窗口有三個調試窗口,它們是:“立即”窗口、“監視”窗口、和“本地”窗口。可單擊視圖菜單中的對應命令打開這些窗口。(3)設置中斷點和逐語句跟蹤
中斷點是告訴VB掛起程序執行的一個標記,當程式執行到中斷點處即暫停程式的運行,進入中斷模式。設置或刪除中斷點的步驟:中斷模式下,直接查看某個變數的值,只要把滑鼠指向所關心的變數處,稍停一下,就在滑鼠下方顯示該變數的值。中斷點標記當前行2.8常見錯誤1.使用中文標點符號
系統產生“無效字元”,以紅色顯示。2.字母和數字形狀相似小寫字母“l”和數字“1”形式相同、小寫字母“o”與數字“0”。3.對象名稱(Name)屬性寫錯
Text1、Text2、Command1
txtInput、txtOutput、cmdOk4.對象的屬性名、方法名、標準函數名寫錯儘量使用自動列出成員功能。正確的系統按規定的大小寫表示。5.無意形成控件數組
建立控件時小心使用“複製”、“粘貼”按鈕。6.打開工程時找不到對應的檔
保存檔時先保存窗體.frm檔、再保存.vbp檔,注意路徑。第三章VB語言基礎
(2學時)
3.1編碼規則
3.2數據類型
3.3變數與常量
3.4運算符和運算式
3.5常用函數
3.6常見錯誤
3.1
編碼基礎1.VB代碼不區分字母的大小寫
系統保留字自動轉換每個單詞的首字母大寫;用戶自定義行以第一次為准。2.語句書寫自由
一行可書寫幾句語句,之間用冒號分隔;一句語句可分若干行書寫,用續行符_連接一行<=255個字元。3.注釋有利於程式的維護和調試
Rem開始或單撇號
'4.保留行號與標號3.2
數據類型
標準數據類型3.3變數與常量一、變數和常量的命名規則變數:在程式運行中其存儲的值可以改變。常量:在程式運行中其值不可以改變。
命名規則:1.以字母或漢字開頭,後可跟漢字、字母、數字或下劃線組成,長度小於等於255個字元;2.不要使用VB中的關鍵字;3.VB中不區分變數名的大小寫;4.為了增加程式的可讀性,可在變數名前加一個縮寫的首碼來表明該變數的數據類型。二、變數聲明1.用Dim語句顯式聲明變數
形式:Dim變數名[AS類型]
Dim變數名類型符例DimiCountAsinteger,sAllsumAssingle
等價於
DimiCount%,sAllsum!2.隱式聲明
未進行上述的聲明而直接使用,其類型為Variant類型。建議不使用。注意:
在通用聲明處加OptionExplicit語句可強制顯式聲明變數。三、常量1.用戶聲明常量形式:
Const常量名[AS類型]=運算式省略[AS類型],常量的類型由運算式值的類型決定。 為使與變數名區分,一般常量名使用大寫字母。例ConstMAX=1002.系統提供的常量
系統定義常量位於對象庫中,可通過“對象流覽器”查看。例:vbNormalvbMinimized、vbbCrLf等3.4運算符和運算式一、運算符
1.算術運算符
例:5+10mod10\9/3+2^2結果:10
2.字串運算符
&、+
字串連接
"123"+"456"結果"123456""123"&"456"結果"123456"
區別:+
兩邊必須是字串,&不一定例如:
"abcdef"&12345'結果為"abcdef12345""abcdef"+12345'出錯
"123"&456'結果為"123456"“123”+456
'
結果為
579注意:
"123"+True'結果為
122True轉換為數值-1,False轉換為數值0
3.關係運算符
將兩個運算元進行大小比較,結果為邏輯量。字串比較,則按字元的ASCII碼值從左到右一一比較,直到出現不同的字元為止.。例:"ABCDE">"ABRA" 結果為False
"男字">"女字"按漢字的拼音字母比較4.邏輯運算符
將運算元進行邏輯運算,結果是邏輯值:條件運算式1And條件運算式2條件運算式均為T,結果為T;
條件運算式1Or條件運算式2條件運算式有一個為T結果為T。二、運算式
1.組成
變數、常量、函數、運算符和圓括號。
2.書寫規則
(1)運算符不能相鄰。例a+-b是錯誤的。
(2)乘號不能省略。例x乘以y應寫成:x*y。
(3)括弧必須成對出現,均使用圓括號。
(4)運算式從左到右在同一基準上書寫,無高低、大小。
3.不同數據類型的轉換運算結果的數據類型向精度高的數據類型靠。
Integer<Long<Single<Double<Currency4.優先順序算術運算符>=字元運算符>關係運算符>邏輯運算運算式書寫舉例
sin(45*3.14/180)+(exp(10)+log(10))/sqr(x+y+1)a*b*c*d/e/f/g
或a*b*c*d/(e*f*g)例:用人單位招聘秘書:年齡小於40歲的女性,學歷專科或本科,年齡<40,性別=“女”,(學歷=“專科”,學歷=“本科”)
And
And
Or比a小,比b大用Ora小數b大數a小數b大數比a大,比b小用And例:表示算術運算式:正確的VB運算式:3〈=xAndx<=7
錯誤的VB運算式:3<=x<=7或3<=xOrx<=7考慮:若分別寫成:年齡<40And性別="女"And(學歷="專科"And學歷="本科")
年齡<40Or性別="女"Or(學歷="專科"Or學歷="本科")3.5常用內部函數1.數學函數
Rnd函數返回0和1(包括0但不包括1)之間的雙精度亂數。每次運行時,要產生不同序列的亂數,執行Randomize語句。例產生1~100的亂數:Int(Rnd*100)+12.轉換函數
Chr(66)"B" Asc("B")
66
Asc(Chr(99))99Chr(Asc("K"))
"K"
Ucase$("abcdefg")
"ABCDEFG"3.日期函數Time返回系統時間、Date返回系統日期、Now返回系統日期和時間
DateAdd(要增減日期形式,增減量,要增減的日期變數)DateDiff(要間隔日期形式,日期1,日期2)例如求離你畢業還有多少天:
DateDiff("d",date,#2006/07/01#)假定2006年畢業4.字串編碼和函數
(1)字串編碼
Windows系統對字元採用了DBCS編碼,中文2位元組,西文1位元組
VB中字元Unicode編碼,任何字元2位元組。
Len(“中國good”)為6;LenB(“中國good”)為12。
StrConv()進行DBCS與Unicode之間轉換。
(2)字串函數
Mid$("ABCDEFG",2,3)"BCD"InStr(2,"ABCDEFG","EF") 5
S=Split("123,56,ab",",") Join(S,"")"12356ab" Replace("ABCDABCD","CD","123") “AB123AB123”S(0)="123”,S(1)="56”,S(2)="ab"5.格式輸出函數例3.1利用Format函數顯示有關的日期和時間。PrivateSubForm_Click()
FontSize=12MyTime=#9:21:30PM#MyDate=#7/21/1997#PrintTab(2);Format(MyDate,"m/d/yy")PrintTab(2);Format(MyDate,"mmmm-yy")PrintTab(2);Format(MyTime,"h-m-sAM/PM")PrintTab(2);Format(MyTime,"hh:mm:ssA/P")PrintTab(2);Format(Date,"dddd,mmmm,dd,yyyy")PrintTab(2);Format(Now,"yyyy年m月dd日hh:mm")PrintFormatDateTime(Now)'VB6.0新提供的函數EndSub6.Shell函數
Shell函數負責執行一個可執行檔,返回一個Variant,如果成功,代表這個程式的進程ID,若不成功,則會返回0。
形式:Shell(命令字符串,窗口類型)
窗口類型值為1表示正常窗口,缺省窗口最小化為圖示。
i=Shell("c:\windows\calc.exe")
j=Shell("c:\",1)
提示:如果不知道應用程式的路徑名,可用Start命令啟動程式
i=Shell(start&"calc.exe");i=Shell(start&"vb6.exe")3.6常見錯誤1.邏輯運算式書寫錯,在VB沒有造成語法錯而形成邏輯錯
例如,數學運算式3≤x<10
VB運算式寫為
3<=x<10。
問題在於VB中的邏輯量與數值量可相互轉換。2.同時給多個變數賦值,在VB沒有造成語法錯而形成邏輯錯例如:Dimx%,y%,z%
x=y=z=13.標準函數名寫錯
4.變數名寫錯檢查方法:在通用聲明段加OptionExplicit5.語句書寫位置錯
在通用聲明段只能有Dim語句,不能有賦值等其他語句第四章基本的控制結構
(8學時)
4.1順序結構
4.2選擇結構
4.3迴圈結構
4.4其他輔助控制語句
4.5常用演算法(一)
4.6常見錯誤
(順序、條件、迴圈)4.1順序結構一、賦值語句
形式:[LET]變數名=運算式
作用:將運算式的值賦值給變數名。一般用於給變數賦值或對控件設定屬性值。例:
sRate!=0.1Text1.Text="歡迎使用VisualBasic6.0"
當運算式的類型與變數的類型不一致時,強制轉換成左邊的精度,如
iA%=10/3iA中的結果為3
注意:雖然賦值號與關係運算符等於號都用“=”表示,VB系統會根據所處的位置自動判斷是何種意義的符號。
二、與用戶交互函數和過程
1.InputBox函數
InputBox(提示[,標題][,缺省][,x座標位置][,y座標位置])
其中:提示:提示資訊;標題:對話框標題;缺省:輸入區缺省值函數返回字元類型。例要在螢幕上顯示圖示的對話框:相應的語句如下:DimstrNameAsString*40strName=InputBox("請輸入你的姓名"+vbCrLf+"然後單擊確定","輸入框")也可以使用如下語句:DimstrNameAsString*40,strS1AsString*40strS1="請輸入你的姓名"
+Chr(13)+Chr(10)+"然後單擊確定"
strName=InputBox(strS1,"輸入框"
,,100,100)當鍵盤輸入“王曉明”後,變數strName獲得鍵盤輸入的值。2.
MsgBox函數和MsgBox過程
函數形式:變數[%]=MsgBox(提示[,按鈕][,標題])
過程形式:MsgBox
提示[,按鈕][,標題]
按鈕值如下:函數返回所選按鈕整數值:例4.1
編一帳號和密碼檢驗程式。要求:帳號不超過6位數字,有錯,清除原內容再輸入。密碼輸入時在螢幕上以“*”代替;若密碼錯,顯示有關資訊,選擇“重試”按鈕,清除原內容再輸入,選擇“取消”按鈕,停止運行。分析:帳號6位,MaxLength為6,LostFocus判斷數字IsNumeric函數密碼PassWordChar為“*”,MsgBox函數設置密碼錯對話框。常見錯誤數據合法性檢查中引起程式的死迴圈PrivateSubText1_LostFocus()IfNotIsNumeric(Text1)ThenText1=""Text1.SetFocus
EndIfEndSubPrivateSubText2_LostFocus()IfNotIsNumeric(Text2)ThenText2=""Text1.SetFocus
EndIfEndSubIfText2<>""AndNotIsNumeric(Text2)Text2Text1確定
4.2選擇結構
1.If…Then語句(單分支結構)
If<運算式>Then
語句塊
EndIf
或
If<運算式>Then<語句>
例:已知兩個數x和y,比較它們的大小,使得x大於y.
Ifx<yThent=x
x=y
y=tEndIf
或
Ifx<yThent=x:x=y:y=t重要的是學會兩個數的交換,若上述語句次序變一下,結果如何?2.If…Then…Else語句(雙分支結構)
If<運算式>Then<語句塊1>
Else<語句塊2>
EndIf
If<運算式>Then<語句1>Else<語句2>
計算分段函數:單分支結構實現:y=cos(x)-x^3+3*x
Ifx<>0Theny=sin(x)+sqr(x*x+1)
雙分支結構實現:
Ifx<>0Then
y=sin(x)+sqr(x*x+1)Elsey=cos(x)-x^3+3*x
EndIf3.If…Then…ElseIf語句(多分支結構)
形式:
If<運算式1>Then <語句塊1>
ElseIf<運算式2>Then <語句塊2> …
[Else
語句塊n+1]EndIf例4.2已知變數strC中存放了一個字元,判斷該字元是字母字元、數字字元還是其他字元。用多分支結構實現:
IfUcase(strC)>="A"AndUcase(strC)<="Z"Then
PrintstrC+"是字母字元"
ElseIfstrC>="0"AndstrC<="9"Then
PrintstrC+"是數字字元"Else PrintstrC+"其他字元"EndIf不管有幾個分支,依次判斷,當某條件滿足,執行相應的語句,其餘分支不再執行;若條件都不滿足,且有Else子句,則執行該語句塊,否則什麼也不執行。.
ElseIf不能寫成
ElseIf。例4.2a根據邊長判斷三角形類型例4.3已知百分制成績mark,顯示對應的五級製成績哪些正確,哪些錯誤?返回724.If語句的嵌套
If語句的嵌套是指If或Else後面的語句塊中又包含If語句。形式如下:
If<運算式1>Then
If<運算式11>Then
…EndIf
…EndIf
例4.4已知x,y,z三個數,使得x>y>z用一個IF語句和一個嵌套的IF語句實現Ifx<yThent=x:x=y:y=t
Ify<zThent=y:y=z:z=t
Ifx<yThent=x:x=y:y=tEndIf
EndIfIf語句的嵌套注意事項:書寫鋸齒型;If與EndIf配對。<運算式列表>:與<變數或運算式>同類型的下麵四種形式之一:運算式例:"A"
一組枚舉運算式(用逗號分隔)2,4,6,8
運算式1To運算式2 60To100
Is關係運算符運算式 Is<605.SelectCase語句(情況語句)形式:
SelectCase變數或運算式
Case運算式列表1
語句塊1
Case運算式列表2
語句塊2 … [CaseElse
語句塊n+1] EndSelect數值型或字串運算式例4.5變數strC中存放了一個字元,判斷該字元類型。在例4.2中用多分支結構實現:
IfUcase(strC)>="A"AndUcase(strC)<="Z"Then PrintstrC+"是字母字元"
ElseIfstrC>="0"AndstrC<="9"Then PrintstrC+"是數字字元"Else PrintstrC+"其他字元"EndIf用SelectCase語句實現:
SelectCasestrC
Case"a"To"z","A"To"Z" PrintstrC+"是字母字元" Case"0"To"9" PrintstrC+"是數字字元" CaseElse PrintstrC+"其他字元"EndSelect例4.6
已知座標點(x,y),判斷其落在哪個象限。
哪個能實現,哪個不能實現?方法一
Ifx>0Andy>0ThenPrint"在第一象限"
ElseIfx<0Andy>0ThenPrint"在第二象限"
ElseIfx<0Andy<0ThenPrint"在第三象限"
ElseIfx>0Andy<0ThenPrint"在第四象限"
EndIf
方法二SelectCasex,yCasex>0Andy>0 Print"在第一象限"Casex<0Andy>0 Print"在第二象限"Casex<0Andy<0 Print"在第三象限"Casex>0Andy<0 Print"在第四象限"EndSelect方法二代碼錯誤:1.SelectCase後不能出現多個變數;2.Case後不能出現變數及有關運算符。返回72例4.7由電腦來當一年級的算術老師,要求給出一系列的1~10的運算元和運算符,學生輸入該題的答案,電腦根據學生的答案判斷正確與否,當結束時給出成績。分析:產生1~10運算元,可通過Int(10*Rnd+1)實現
設置的控件名
Label1 Text1
Picture1 Command16.條件函數(1)IIf函數形式是:
IIf(運算式,當運算式為True時的值,當運算式為False時的值)例如,求x,y中大的數,放入Tmax變數中,語句如下:
Tmax=IIf(x>y,x,y)(2)Choose函數形式是:
Choose(數字類型變數,值為1的返回值,值為2的返回值……)例如,Nop是1-4的值,轉換成+、-、×、÷運算符的語句如下:
Op=Choose(Nop,"+","-","×","÷")
當值為1,返回字串“+”,然後放入Op變數中,值為2,返回字串“-”,依次類推;當Nop是1-4的非整數,系統自動取Nop的整數辦法在判斷;若Nop不在1~4之間,函數返回Null值。(3)Switch函數形式是:
Switch(條件運算式1,條件運算式1為True時的值[,條件運算式2,條件運算式2為True時的值……])常見錯誤1.在選擇結構中缺少配對的結束語句對多行式的If塊語句中,應有配對的EndIf語句結束。2.多邊選擇ElseIf關鍵字的書寫和條件運算式的表示
ElseIf不要寫成ElseIf;多個條件運算式次序問題,見例4.3。3.SelectCase語句的使用
SelectCase後不能出現多個變數;Case子句後不能出現變數,見例4.6。4.3循環結構1.For迴圈語句(一般用於迴圈次數已知)形式
For迴圈變數=初值to終值[Step步長]
語句塊
[ExitFor]
語句塊
Next迴圈變數
迴圈變數<=終值
語句塊
ExitFor
語句塊
迴圈變數加步長
T
F
迴圈變數得初值
循環體例4.8
計算1~100的奇數和,程式段如下:
Dimi%,s%
等價於:Dimi%,s%s=0 s=0:i=1Fori=1To100step2
re:Ifi<=100Thens=s+i s=s+iNexti
i=i+2 GoTore EndIf>0初值<終值=1時,可省略<0初值>終值=0死迴圈迴圈次數要注意:出了迴圈,迴圈控制變數值的問題。例程式段:
Fori=2To13Step3迴圈執行次數
Printi,輸出i的值分別為:
Nexti25811
Print:Print“I=“,i出了迴圈輸出為:I=14
在循環體內對迴圈控制變數可多次引用;但最好不要對其賦值,否則影響原來的迴圈控制規律。步長例4.9改變迴圈控制變數對迴圈的影響。PrivateSubCommand1_Click()j=0Fori=1To20Step2
i=i+3
j=j+1Print"第";j;"次迴圈i=";iNextiPrint"退出迴圈後i=";iEndSub正常情況:i=1,3,5,7,9,11,13,15,17,19現在:i=4,9,14,19例4.10輸出可列印的ASCII碼字元與它的編碼值。
2.Do…Loop迴圈語句(用於控制迴圈次數未知)形式1:
Do{While|Until}<條件>
語句塊
[ExitDo
語句塊]Loop形式2:
Do
語句塊
[ExitDo
語句塊] Loop{While|Until}<條件>例4.11
我國有13億人口,按人口年增長0.8%計算,多少年後我國人口超過26億。分析:解此問題兩種方法,可根據公式:26=13*(1+0.008)n
直接利用標準對數函數求得;也可利用迴圈求得,程式如下:PrivateSubCommand1_Click()x=13n=0DoWhilex<26x=x*1.008n=n+1LoopPrintn,xEndSub例4.12用輾轉相除法求兩自然數m,n的最大公約數和最小公倍數。分析:求最大公約數的演算法思想:
(1)對於已知兩數m,n,使得m>n;
(2)m除以n得餘數r;
(3)若r=0,則n為最大公約數結束;否則執行(4);
(4)m
n,n
r,再重複執行(2)。例求m=14,n=6
的最大公約數.
Ifm<nThent=m:m=n:n=tr=mmodnDoWhile(r<>0)m=nn=rr=mmodnLoopPrint"最大公約數=",n
mnr1462
620輾轉相減法
m=m-nm>nn=n-mn>m
m、n為公約數m=nDoWhilem<>nmn
Ifm>nThen146m=m–n
86Else
26
n=n–m
24EndIf22Loop3.迴圈的嵌套
一個循環體內又包含了一個完整的迴圈結構稱為迴圈的嵌套.
例4.13列印九九乘法表.
Fori=1To9Forj=1To9se=i&"×"&j&"="&i*jPicture1.PrintTab((j-1)*9+1);se;NextjPicture1.PrintNexti思考:列印上三角或下三角程式如何改動?要列印下三角?Forj=1Toi
Forii=1To10Forjj=1To20
…
Nextii Nextjj
Forii=1To10Forii=1To20
…
Nextii Nextii
Forii=1To10Forjj=1To20
…
Nextjj
Nextii
Forii=1To10
…NextiiForii=1To10
…Nextii對於迴圈的嵌套,要注意以下事項:內迴圈變數與外迴圈變數不能同名;外迴圈必須完全包含內迴圈,不能交叉;不能從循環體外轉向循環體內,反之則可以。正確 錯誤4.4其他輔助控制語句
1.GoTo語句形式:GoTo{標號|行號}
作用:無條件地轉移到標號或行號指定的那行語句.
標號是一個字元序列,行號是一個數字序列.2.Exit語句多種形式:ExitFor、ExitDo、ExitSub、ExitFunction等。作用:退出某種控制結構的執行。
3.End語句多種形式:End、EndIf、EndSelect、EndWith、EndType、 EndSub、EndFunction、
作用:End結束一個程式的運行;其餘表示某個結構的結束,與對應的結構語句配對出現。4.With語句形式如下:With對象 語句塊
EndWith
作用:對某個對象執行一系列的操作,而不用重複指出對象的名稱。
WithLabel1
.Height=2000
.Width=2000
.FontSize=22
.Caption="MyLabel"EndWith
Label1.Height=2000Label1.Width=2000Label1.FontSize=22Label1.Caption="MyLabel"
等價4.5常用演算法(一)演算法是對某個問題求解過程的描述
1.累加、連乘
1~100的5或7的倍數的和
Sum=0Fori=1To100IfiMod5=0OriMod7=0Then
Sum=Sum+iEndIfNextiPrintSum3~10的乘積
t=1Fori=3To10
t=t*iNextiPrintt思考:若把循環體前面置各變數初值的語句放在循環體內,程式運行時會產生什麼情況?例4.14求自然對數e的近似值,要求其誤差小於0.00001,近似公式為:
該例題涉及兩個問題:
(1)用迴圈結構求級數和的問題。本例根據某項值的精度來控制迴圈的結束與否。(2)累加:e=e+t循環體外對累加和的變數清零e=0
連乘:n=n*i循環體外對連乘積變數置1n=1
PrivateSubForm_Click()Dimi%,n&,t!,e!e=0:n=1‘e存放累加和、n存放階乘
i=0:t=1‘i計數器、t第i項的值
DoWhilet>0.00001e=e+t:i=i+1‘累加、連乘
n=n*i:t=1/nLoopPrint"計算了";i;"項的和是";eEndSub2.求素數素數是一個大於2,且不能被1和本身以外的整數整除的整數。
判別某數m是否為素數最簡單的方法是:對於m從i=2,3,…,m-1判別m能否被i整除,只要有一個能整除,m不是素數,否則m是素數。例4.15求100以內素數的代碼:
Form=2To100Fori=2Tom-1
If(mModi)=0ThenGoToNotNextM
NextiPrintmNotNextM:Nextmm是否為素數求100以內的素數思考:此例用GoTo語句對非素數不作判斷,若不用GoTo語句,如何修改程式?3.窮舉法
“窮舉法”也稱為“枚舉法”或“試湊法”,即將可能出現的各種情況一一測試,判斷是否滿足條件,一般採用迴圈來實現。例4.16
百元買百雞問題。假定小雞每只5角,公雞每只2元,母雞每只3元。現在有100元錢要求買100只雞,編程列出所有可能的購雞方案。設母雞、公雞、小雞各為x、y、z只,根據題目要求,列出方程為:
x+y+y=1003x+2y+0.5z=100三個未知數,兩個方程,此題有若干個解。解決此類問題採用“試湊法”,把每一種情況都考慮到。方法一:最簡單三個未知數利用三重迴圈來實現。方法二:從三個未知數的關係,利用兩重迴圈來實現。4.遞推法
“遞推法”又稱為“迭代法”,其基本思想是把一個複雜的計算過程轉化為簡單過程的多次重複。每次重複都從舊值的基礎上遞推出新值,並由新值代替舊值。
例4.17
猴子吃桃子。小猴在某天摘桃若干個,當天吃掉一半多一個;第二天吃了剩下的桃子的一半多一個;以後每天都吃尚存桃子的一半多一個,到第7天要吃時只剩下一個,問小猴共摘下了多少個桃子?分析:這是一個“遞推”問題,先從最後一天推出倒數第二天的桃子,再從倒數第二天的桃子推出倒數第三天的桃子……。設第n天的桃子為xn,那麼它是前一天的桃子數的xn-1
的一半減1,即xn
=(xn-1+1)×25.最小、最大值在若干個數中求最大值,一般先假設一個較小的數為最大值的初值,若無法估計較小的值,則取第一個數為最大值的初值;然後將每一個數與最大值比較,若該數大於最大值,將該數替換為最大值;依次逐一比較。例隨機產生10個100~200之間的數,求最大值。PrivateSubCommand1_Click()
Max=100Fori=1To10x=Int(Rnd*101+100)Printx;
Ifx>MaxThenMax=xNextiPrintPrint"最大值=";MaxEndSub例4.18實際應用,求最短殘料。有一根長度為321米的鋼材料,要將它截取成兩種規格a、b的長度分別為17米和27米的短料,每種至少1段,問分隔成a,b各多少段後,剩餘的殘料r最少?分析,該題利用“試湊法”通過二重迴圈求殘料r的最小值正數,殘料不可能是負數。程式如下:PrivateSubCommand1_Click()Dima%,b%,r!,ia%,ib%r=321
‘最小值初值取鋼材料的長度
Forb=1To321\27
‘b最多的段數
Fora=1To321\17-b ‘a最多的段數
t=321-b*27-a*17 ‘當前的殘料
Ift>0Andt<rThen r=t ‘求最短的殘料
ia=a ‘最短殘料時a的段數
ib=b ‘最短殘料時b的段數
EndIfNextaNextbPrintia,ib,rEndSub4.6常見錯誤1.不迴圈或死迴圈的問題
主要是迴圈條件、迴圈初值、迴圈終值、迴圈步長的設置有問題。2.迴圈結構中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版房屋买卖合同中的房屋抵押及解押约定3篇
- 二零二五河南事业单位100人招聘项目合同执行标准3篇
- 二零二五版建筑工程项目现场勘察与监测服务合同3篇
- 二零二五版混凝土结构防雷接地施工合同2篇
- 二零二五年度草场承包管理与开发合同范本3篇
- 二零二五版国际贸易实务实验报告与国际贸易实务实训合同3篇
- 二零二五年度虚拟现实(VR)技术研发合同3篇
- 二零二五年度特种货物安全运输服务合同范本2篇
- 二零二五年度体育设施建设与运营管理复杂多条款合同3篇
- 二零二五年度电梯门套安装与安全性能检测合同3篇
- 人教版八年级下册第一单元英语Unit1 单元设计
- PEP小学六年级英语上册选词填空专题训练
- 古建筑修缮项目施工规程(试行)
- GA 844-2018防砸透明材料
- 化学元素周期表记忆与读音 元素周期表口诀顺口溜
- 非人力资源经理的人力资源管理培训(新版)课件
- MSDS物质安全技术资料-201胶水
- 钼氧化物还原过程中的物相转变规律及其动力学机理研究
- (完整word)2019注册消防工程师继续教育三科试习题及答案
- 《调试件现场管理制度》
- 社区治理现代化课件
评论
0/150
提交评论