VB程序設(shè)計-第4章VisualBasic語言程序結(jié)構(gòu).ppt
VB程序設(shè)計,第四章VisualBasic語言程序結(jié)構(gòu),第四章VisualBasic語言程序結(jié)構(gòu),本章知識點:順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu),常用算法的應(yīng)用等。,第四章VisualBasic語言程序結(jié)構(gòu),4.1順序結(jié)構(gòu)程序設(shè)計4.2選擇結(jié)構(gòu)程序設(shè)計4.3循環(huán)結(jié)構(gòu)程序設(shè)計4.4常用算法舉例,第四章VisualBasic語言程序結(jié)構(gòu),4.1順序結(jié)構(gòu)程序設(shè)計4.1.1賦值語句賦值語句一般形式如下:變量名=表達式對象.屬性=表達式功能:完成表達式的計算,將計算結(jié)果賦值給等號左側(cè)的變量或?qū)ο蟮膶傩浴@纾簒=1把1賦給變量xText1.text="hello!"把字符串"hello!"賦給文本框Text1的text屬性,第四章VisualBasic語言程序結(jié)構(gòu),4.1順序結(jié)構(gòu)程序設(shè)計4.1.2數(shù)據(jù)輸入用戶主要通過三種方式實現(xiàn)數(shù)據(jù)輸入:使用文本框控件,使用系統(tǒng)提供的InputBox函數(shù),使用磁盤數(shù)據(jù)文件。本節(jié)主要介紹InputBox函數(shù)。函數(shù)格式如下:變量名$=InputBox(提示信息,對話框標題,缺省值)功能:彈出輸入對話框,供用戶輸入一個數(shù)據(jù)。其中:提示信息:是一個字符串表達式,最大長度不超過1024個字符,要來提示用戶輸入相關(guān)內(nèi)容,可使用chr(13)+chr(10)實現(xiàn)換行。對話框標題:是字符串表達式,可省略,默認為應(yīng)用程序名。缺省值:是顯示在對話框輸入?yún)^(qū)的默認值。,例如,Dimx%x=Val(InputBox("請輸入一個數(shù)","輸入框","100")在屏幕上顯示如圖4.2所示的對話框:,圖4.2InputBox對話框,第四章VisualBasic語言程序結(jié)構(gòu),4.1順序結(jié)構(gòu)程序設(shè)計4.1.3數(shù)據(jù)輸出1)Print方法Print方法的一般格式如下:對象名.PrintSpc(n)|Tab(n),|;例如:PrintFormat(1234.5,"00000.00")PrintFormat(3.14159,"#.#")PrintFormat(3.14159,"#%")PrintFormat(3.14159,"$(#.#)")PrintFormat(12345.6,"#.#E+")PrintFormat(0.123,"#.#e-")PrintFormat(date,"mm-dd-yy")PrintFormat(date,"yy年mm月dd"),圖43例4.2執(zhí)行結(jié)果,2.MsgBox函數(shù)和MsgBox方法函數(shù)形式:變量%=MsgBox(提示信息,對話框類型,標題)(1)“標題”和“提示信息”與InputBox函數(shù)中對應(yīng)的參數(shù)相同;(2)對話框類型由“按鈕圖標+缺省按鈕+模式”4項組成,是整型表達式,決定信息框按鈕數(shù)目、出現(xiàn)在信息框上的圖標類型及操作模式如表4.1所示。,表4.1,例如:i=Msgbox(“注意:你輸入的數(shù)據(jù)不正確”,2+48+0+0,“錯誤提示”),結(jié)果如圖4.4所示。,第四章VisualBasic語言程序結(jié)構(gòu),4.2選擇結(jié)構(gòu)程序設(shè)計4.2.1IF語句1)IfThen語句(單分支結(jié)構(gòu))IfThen語句塊EndIf或:IfThen,圖4.5選擇結(jié)構(gòu)流程圖,例4.4設(shè)密碼。用IF語句來判定輸入密碼的正確性。PrivateSubCommand1_Click()DimaAsString,bAsStringa="111111"b=InputBox("請輸入密碼:","密碼對話框")Ifa=bThenMsgBox("密碼正確")EndIfEndSub,2)IfThenElse語句(雙分支結(jié)構(gòu))格式1:IfThenElseEndIf格式2:IfThenElse,例4.5計算下列分段函數(shù)的值分析:對于此分段函數(shù),由于包含X>=0和X=0Theny=(1-x)2Elsey=x2-1EndIfPrint"y="yEndSub,3)IfThenElseIf語句(多分支結(jié)構(gòu))使用形式:IfThenElseIfThenElse語句塊n+1EndIf,例4.6輸入一學(xué)生成績,評定其等級。方法是:90100分為“優(yōu)秀”,8089分為“良好”,7079分為“中等”,6069分為“及格”,60分以下以為“不合格”。PrivateSubForm_Click()DimxAsIntegerx=Val(InputBox("請輸入成績:")Ifx>=90ThenPrint"優(yōu)秀"ElseIfx>=80ThenPrint"良好"ElseIfx>=70ThenPrint"中等"ElseIfx>=60ThenPrint"及格"ElsePrint"不及格"EndIfEndSub,第四章VisualBasic語言程序結(jié)構(gòu),4.2選擇結(jié)構(gòu)程序設(shè)計4.2.2SelectCase語句SelectCase條件表達式Case表達式列表1語句塊1Case表達式列表2語句塊2CaseElse語句塊n+1EndSelect說明:與是同類型的,為下面3種形式之一:(1)一組枚舉表達式(用逗號分隔):例如,2,4,6,8。(2)表達式1To表達式2:例如,60to100。(3)Is關(guān)系運算符表達式:例如,Is=0,x,-x)y是x的絕對值。,第四章VisualBasic語言程序結(jié)構(gòu),4.2選擇結(jié)構(gòu)程序設(shè)計4.2.4條件函數(shù)2)Choose函數(shù)語法格式:Choose(,.,)功能:根據(jù)的值來確定返回值列表中某個值。的值為1,返回,如果的值為2,返回,以此類推。例如:x=Val(InputBox("請輸入1-6之間整數(shù)")PrintChoose(x,"red","yellow","blue","green","black","white")用數(shù)字表示顏色。,第四章VisualBasic語言程序結(jié)構(gòu),4.3循環(huán)結(jié)構(gòu)程序設(shè)計4.3.1Doloop循環(huán)1)形式1:(當型循環(huán))DoWhile|Until語句塊ExitDo語句塊Loop2)形式2:(直到循環(huán))Do語句塊ExitDo語句塊LoopWhile|Until,例4.8用輾轉(zhuǎn)相除法求兩個自然數(shù)的最大公約數(shù)(gcd)和最小公倍數(shù)(lcm)。PrivateSubForm_Click()Dimn%,m%,nm%,r%m=Val(InputBox("m=")n=Val(InputBox("n=")nm=n*mIfm0)m=nn=rr=mModnLoopPrint"最大公約數(shù)=",nPrint"最小公倍數(shù)=",nm/nEndSub,用DoUntilLoop循環(huán)來實現(xiàn)例4.8,程序代碼如下:PrivateSubForm_Click()Dimn%,m%,nm%,r%m=Val(InputBox("m=")n=Val(InputBox("n=")nm=n*mIfm0時,初值終值;步長=0時,死循環(huán),循環(huán)次數(shù)計算公式為:Exitfor:退出循環(huán),執(zhí)行next后的下一條語句,例4.9編程計算:S=1+2+3+100PrivateSubForm_Click()DimS%,I%S=0累加前變量S為0ForI=1To100S=S+INextIPrint"S="Format(S,"0000")EndSub,第四章VisualBasic語言程序結(jié)構(gòu),4.3循環(huán)結(jié)構(gòu)程序設(shè)計4.3.3WhileWend循環(huán)使用格式如下:WhileWend說明:該語句的功能與DoWhileLoop實現(xiàn)的循環(huán)完全相同。,例4.11從鍵盤輸入一些字符數(shù)據(jù),對輸入的字符數(shù)據(jù)進行計數(shù)。當輸入的字符為“#”,停止計數(shù)并輸出結(jié)果。分析:因為輸入次數(shù)不定,故不使用for循環(huán)。代碼如下:PrivateSubForm_click()DimcAsString,nAsIntegern=0c=InputBox("輸入字符:")WhileNot(c="#")n=n+1c=InputBox("輸入字符:")WendPrint"字符數(shù)是:"n;"個"EndSub,第四章VisualBasic語言程序結(jié)構(gòu),4.3循環(huán)結(jié)構(gòu)程序設(shè)計4.3.4ForEachNext循環(huán)語法格式:ForEach成員In數(shù)組語句塊ExitForNext成員具體使用將在“數(shù)組”章節(jié)講解,第四章VisualBasic語言程序結(jié)構(gòu),4.3循環(huán)結(jié)構(gòu)程序設(shè)計4.3.5循環(huán)嵌套多重循環(huán)結(jié)構(gòu)如果在一個循環(huán)內(nèi)完整地包含另一個循環(huán)結(jié)構(gòu),則稱為多重循環(huán),或循環(huán)嵌套,嵌套的層數(shù)可以根據(jù)需要而定,嵌套一層稱為二重循環(huán),嵌套二層稱為三重循環(huán)。,例4.12打印九九乘法表。程序代碼如下:PrivateSubForm_Click()Dimi%,j%,jj$Fori=1To9Forj=1To9jj=iNextjPicture1.PrintNextiEndSub,例4.13使用循環(huán)語句在窗體上輸出有*組成的簡單圖形PrivateSubForm_Click()DimnAsInteger,i%,j%Cls清屏n=Val(Text1.Text)輸入組成圖形的行數(shù)Fori=1TonPrintTab(20);Forj=1ToiPrint"*"NextjPrintNextiEndSub,圖4.14例4.13運行結(jié)果,第四章VisualBasic語言程序結(jié)構(gòu),4.3循環(huán)結(jié)構(gòu)程序設(shè)計4.3.6循環(huán)的退出語句格式:ExitFor強制退出ForNext循環(huán)ExitDo強制退出DoLoop循環(huán)例4.15用ForNext循環(huán)結(jié)構(gòu)計算1100之和,當和大于等于2000時終止循環(huán),并輸出實際循環(huán)的次數(shù)。,PrivateSubCommand1_Click()Dims%,i%s=0累加前變量S為0Fori=1To100s=s+iIfs>=2000ThenExitForNextiLabel2.Caption=sLabel4.Caption=iEndSub,圖4.16例4.15運行結(jié)果,第四章VisualBasic語言程序結(jié)構(gòu),4.3循環(huán)結(jié)構(gòu)程序設(shè)計4.3.7幾種循環(huán)語句比較,第四章VisualBasic語言程序結(jié)構(gòu),4.4常用算法舉例4.4.1找最大值、最小值例4.17隨機產(chǎn)生10個100-200之間整數(shù),求最大值。程序運行結(jié)果如圖4.17所示。分析:先產(chǎn)生一個隨機數(shù)假設(shè)這一個數(shù)是最大數(shù)(變量取名max),然后再產(chǎn)生一個隨機數(shù),與max比較,大者存入max,反復(fù)(循環(huán))操作產(chǎn)生隨機數(shù)、比較,這樣比較完每個數(shù)后,max中就放的是最大數(shù)了。,PrivateSubForm_Click()DimIAsInteger,xAsInteger,maxAsIntegerRandomize初始化隨機數(shù)的種子數(shù)x=Int(Rnd*100+100)max=xForI=2To10Printx;x=Int(Rnd*100+100)Ifx>maxThenmax=xNextIPrintPrint"max="maxEndSub,第四章VisualBasic語言程序結(jié)構(gòu),4.4常用算法舉例4.4.2素數(shù)問題例4.18求200以內(nèi)的素數(shù)。分析:判定某個數(shù)是否素數(shù),然后是對于找某范圍內(nèi)的數(shù)據(jù)的判定,用2重循環(huán)來實現(xiàn):內(nèi)循環(huán)是判定某數(shù)是否素數(shù),外循環(huán)一次列舉該范圍內(nèi)的每個數(shù)。判定素數(shù)方法是:利用素數(shù)定義,從2到n-1之間整數(shù)一次去除n,如果都不能整除,n是素數(shù),反之,有一個除盡,n就不是素數(shù)。,PrivateSubForm_Click()Dimi%,j%,n%Form1.Caption="求200以內(nèi)的素數(shù)"Print2,2是特例輸出n=1記素數(shù)的個數(shù)Fori=3To200Step2Forj=2Toi-1IfiModj=0ThenExitForEndIfNextjIfj=iThen這個條件表示i一次也沒被除盡,是素數(shù)Printi,n=n+1IfnMod5=0ThenPrintEndIfNextiEndSub,第四章VisualBasic語言程序結(jié)構(gòu),4.4常用算法舉例4.4.3窮舉法窮舉方法的實現(xiàn)主要依賴于以下兩個基本要點:搜尋可能值的范圍如何確定。被搜尋可能值的判定方法。,例4.19“百雞百錢”問題?!半u翁一,值錢五,雞母一,值錢三,雞雛三,值錢一;百錢買百雞,問雞翁、雞母、雞雛各幾何?”編寫程序,給出結(jié)果。分析:設(shè)x、y、z分別表示雞翁、雞母、雞雛的數(shù)目,根據(jù)題意,100錢最多買雞翁20只、買雞母33只,雞雛數(shù)為100-雞翁數(shù)-雞母數(shù),搜尋值得判定式為:5*x+3*y+(z/3)=100。,程序代碼如下:PrivateSubform_Click()Dimx,y,zAsIntegerForx=1To20Fory=1To33z=100-x-yIf5*x+3*y+(z/3)=100ThenPrint"公雞,母雞,小雞的數(shù)目分別為:"Printx,y,zEndIfNextyNextxEndSub,第四章VisualBasic語言程序結(jié)構(gòu),4.4常用算法舉例4.4.4迭代法一個不斷地由變量的舊值按照一定的規(guī)律推出變量的新值的過程,迭代亦稱為遞推。迭代一般與三個因素有關(guān),它們是:初始值,迭代公式,迭代結(jié)束條件(迭代次數(shù))。例4.21求菲波拉契(Fibonacci)數(shù)列。已知一對小兔出生一個月后變成一對成兔,兩個月后這對成兔就會生出一對小兔,三個月后這對成兔將生出第二對小兔,而第一對小兔又長大變成一對成兔,即一月成熟,二月生育,如此類推。請編程求解一對小兔經(jīng)n月后將繁衍成多少對兔子?,分析:設(shè)f1、f2和f3表示相鄰的3個裴波那契數(shù)據(jù)項,根據(jù)題意有f1、f2的初始值為1,即迭代的初始條件為:f1=f2=1;迭代的公式為:f3=f1+f2。程序代碼如下:PrivateSubForm_Click()Dimf1,f2,f3,i,nAsIntegerf1=1:f2=1n=Text1.TextFori=3Tonf3=f1+f2f1=f2f2=f3圖4.22例4.22運行結(jié)果NextiPrintPrintTab(5);"經(jīng)過"f3aFormat(x,"#.#")EndSub,本章結(jié)束,謝謝!,