四章控制結構教學文稿_第1頁
四章控制結構教學文稿_第2頁
四章控制結構教學文稿_第3頁
四章控制結構教學文稿_第4頁
四章控制結構教學文稿_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四章

控制結構

4.1順序控制結構順序結構就是各語句按出現(xiàn)的先后次序執(zhí)行。一般的程序設計語言中,順序結構的語句主要是賦值語句、輸入/輸出語句等。在VB中也有賦值語句,而輸入/輸出可以通過文本框、print方法等實現(xiàn),也可以通過系統(tǒng)提供的函數(shù)和過程來實現(xiàn)。4.1.1賦值語句賦值語句的一般形式如下:

變量名=表達式

對象.屬性=表達式程序執(zhí)行時,先計算右邊表達式的值,然后將值賦給左邊的變量或?qū)傩浴?/p>

例如:X=100

‘把數(shù)值賦給變量X;Text1.Text="VB歡迎你"

‘把字符串賦給Text1的Text屬性Label1.Caption=Date()

‘把Date函數(shù)的結果賦給Label1的Caption屬性Label1.Top=Label1.Top-100

‘把表達式的值賦給Label1的Top屬性

在賦值語句中,賦值運算符“=”代表賦值操作,而不代表等量關系。

注意:當表達式的類型與變量的類型不一致時,強制轉(zhuǎn)換成左邊的精度變量名=表達式表達式可以是任何類型的表達式,一般與左邊的變量類型一致例如:DimiasIntegeri=3+2如果右邊表達式類型與左邊變量類型不同,則:1)表達式均為數(shù)值型,但精度不同時,表達式結果自動轉(zhuǎn)換成左邊的精度在賦值給變量。如:i%=3.56i=42)變量為數(shù)值型,表達式為字符串時,若表達式為數(shù)字型字符串,則自動轉(zhuǎn)換為數(shù)值型在賦值給變量。x%=“123”x=123x%=“abc”出錯x!=“”出錯3)變量為數(shù)值型,表達式為邏輯型時,true轉(zhuǎn)換成-1,false轉(zhuǎn)換成0后賦值給變量x%=truex-1使用賦值語句時應注意:以下的賦值語句均是錯誤的:5=x+y常量在左邊x+y=5表達式在左邊Sin(x)=x+y不能在一句賦值語句中為多個變量賦值:正確x=1y=1z=1錯誤:x=y=z=14.1.2人機交互函數(shù)和過程Vb程序與用戶之間的直接交互可以通過InputBox()函數(shù)、MsgBox()函數(shù)和Msg過程進行。1.InputBox()函數(shù)InputBox()函數(shù)可以產(chǎn)生一個對話框,這個對話框作為輸入數(shù)據(jù)的界面,等待用戶輸入數(shù)據(jù),當用戶單擊“確定“按鈕或回車時,函數(shù)返回輸入的值,類型為字符型。函數(shù)格式如下:

變量$=InputBox(Prompt[,Title][,Default][,XPos][,YPose])例4-1應用InputBox函數(shù)進行患者信息的輸入,運行界面如圖

程序代碼如下:PrivateSubForm_Click()Dimcl$,msg1$,msg2$,msg3$,msg$,I$cl=Chr(13)+Chr(10)‘回車、換行msg1="請輸入患者姓名"msg2="輸入后單擊確定按鈕"msg3="或按回車鍵"msg=msg1+cl+msg2+cl+msg3I=InputBox(msg,"患者信息輸入框","張三",400,400)EndSub注意各項參數(shù)次序必須一一對應,Prompt項不可省略,其他項可以省略,但處于中間的默認參數(shù)要用逗號占位符跳過該函數(shù)返回的值為字符型,如果需要輸入數(shù)值并參加運算時,在運算前運用Val(c)函數(shù)將其類型轉(zhuǎn)換為數(shù)值類型例:inputBox.vbp2.MsgBox()函數(shù)和MsgBox過程MsgBox()函數(shù)可以產(chǎn)生一個消息框,等待用戶選擇按鈕,當用戶單擊某個按鈕時,函數(shù)返回按鈕的值,類型為整型。函數(shù)格式如下:變量%=MsgBox(Prompt[,Type][,Title])Promp:字符串表達式,用于提示信息Type:消息框類型Title:字符串表達式,在標題欄中顯示4.1.2人機交互函數(shù)和過程分組內(nèi)部常數(shù)按鈕值描述按鈕數(shù)目VBOkOnlyVBOkCancelVBAboutRetryignreVBYesNoCancelVBYesNoVBRetryCancel012345只顯示“確定”按鈕顯示“確定”“取消”按鈕顯示“終止”“重試”“忽略”按鈕顯示“是”“否”“取消”按鈕顯示“是”“否”按鈕顯示“重試”“取消”按鈕圖標類型VBCriticalVBQusetionVBExclsmationVBinformation16324864關鍵信息圖標紅色STOP標志詢問信息圖標?警告信息圖標!信息圖標i默認按鈕VBDefaultButton1VBDefaultButton2VBDefaultButton30256512第1個按鈕為默認第2個按鈕為默認第3個按鈕為默認模式VBApplicationModelVBSystemModel04096應用模式系統(tǒng)模式其中Type為整型表達式,用來控制在消息框中顯示的按鈕、圖標的種類、數(shù)量。其按鈕、圖表設置值及意義如下表所示:變量%=MsgBox(Prompt[,Type][,Title])例如:要顯示“重試”、“取消按鈕”、關鍵信息圖標紅色stop圖標,第一個按鈕為默認、系統(tǒng)模式type值為5+16+0+4096,或VBRetryCancel+VBCritical+VBDefualtButton+VBSystomModelt=vbRetryCancel+vbCritical+VBDefualtButton+VBSystomModelret=MsgBox("消息框示例",t,"消息框")例msgBox.vbp

MsgBox函數(shù)返回所選按鈕整數(shù)值的意義如下表所示:

內(nèi)部常數(shù)返回值被單擊的按鈕VBOkVBCancelVBAboutVBRetryVBIgnreVBYesVBNo1234567確定取消終止重試忽略是否若只需給出prompt參數(shù),可以這樣使用Ret=msgBox“prompt”4.2選擇結構4.2.1IF條件語句1.IF……Then語句(單分支結構)語句形式:(1)IF<表達式>Then語句塊EndIF(2)IF<表達式>Then語句塊表達式語句塊FT單分支結構流程示意圖其中:表達式一般為關系表達式、邏輯表達式,也可以為算術表達式。表達式的值按非零為True,零為False進行處理。語句塊:可以是一條或多條語句。如果采用形式(2)表示則語句之間要用冒號分隔,并且一定寫在同一行上。If和endif要成對出現(xiàn)例4-3已知兩個變量x和y,比較它們的大小,使x中的值大于y。(要實現(xiàn)兩個變量中的數(shù)互相交換通常以使用第三變量為過渡,在此為t)語句如下:IFx<yThent=x‘將變量x中的值暫時存放于變量t中x=y‘用變量y中的值替代變量x中的值y=t‘再將原變量x中的值替代變量y中的值EndIF或者IFx<yThent=x:x=y:y=t2.IF……..Then……Else(雙分支結構)語句形式:IF<表達式>Then<語句塊1>Else<語句塊2>EndIF或者:IF<表達式>Then<語句塊1>Else<語句塊2>如果表達式的值為非零或True執(zhí)行語句塊1,否則執(zhí)行語句塊2。表達式語句塊1語句塊2FT雙分支結構流程示意圖例4-2編寫一醫(yī)生工作站的登錄檢驗程序,運行界面如圖4-3。對登錄名(醫(yī)生工號)和密碼的規(guī)定如下:(1)醫(yī)生工號不超過6位數(shù)字,密碼為6位字符,密碼輸入時顯示為“*”。本題假設密碼為“cljuan”。(2)當醫(yī)生工號輸入非數(shù)字字符,密碼不正確時,顯示相關信息。(3)若單擊“重試”按鈕,則清除原來輸入的內(nèi)容,焦點定位在原輸入文本框,等待用戶輸入。若單擊取消按鈕,程序停止運行。

本程序運行結果如圖所示,程序代碼見后頁。例4-2程序代碼如下:PrivateSubCommand1_Click()DimIAsIntegerIFNotText2="cljuan"ThenI=MsgBox("密碼錯誤",5+64+0+VBSystemModel,"登錄密碼")IFI=2ThenEndElseText2=""‘用戶單擊“取消”按鈕返回按鈕值text2=“”‘用戶單擊”重試”按鈕文本框置空,等待用戶重新輸入Text2.SetFocus‘將焦點設置在文本框2上,方便用戶輸入EndIFEndSubPrivateSubText1_LostFocus()‘焦點離開文本框1時觸發(fā)LostFocus事件IFNotIsNumeric(Text1)Then‘利用IsNumeric()函數(shù)判斷文本框中輸入的是否為數(shù)字字符MsgBox"醫(yī)生工號必須是數(shù)字字符"Text1=""Text1.SetFocusEndIFEndSub3.IF……Then……ElseIF(多分支結構)語句形式:

IF<表達式1>Then<語句塊1>ElseIF<表達式2>Then<語句塊2>

[Else<語句塊n+1>]EndIFTTTTTT表達式1表達式2表達式n語句塊1語句塊2語句塊n語句塊n+1FFF多分支結構流程示意圖……不管有幾個分支,依次判斷,當某條件滿足,執(zhí)行相應的語句,其余分支不再執(zhí)行;若條件都不滿足,且有Else子句,則執(zhí)行該語句塊,否則什么也不執(zhí)行。.

ElseIf不能寫成

ElseIf。PrivateSubCommand1_Click() Dimx,y Picture1.Cls x=Val(Text1.Text)‘將文本轉(zhuǎn)換為數(shù)值型后賦值給變量x,y y=Val(Text2.Text) IFx<90Andy<60Then Picture1.Print"血壓偏低" ElseIFx<=140Andy<=90Then Picture1.Print"血壓正常" ElseIFx<160Andy<95Then Picture1.Print"臨界高血壓" Else Picture1.Print"高血壓" EndIFEndSubPrivateSubCommand2_Click() EndEndSub例4-5按照世界衛(wèi)生組織(WHo)建議使用的血壓標準是:凡正常成人收縮壓應小于或等于140MmHg,舒張壓小于或等于90MmHg。如果成人收縮壓大于或等于160MmHg,舒張壓大于或等于95MmHg為高血壓;血壓值在上述兩者之間,亦即收縮壓在141—159MmHg之間,舒張壓在91-94MmHg之間,為臨界高血壓。低血壓通常指血壓低于90/60MmHg。運行界面與程序代碼如下:例已知百分制成績mark,顯示對應的五級制成績哪些正確,哪些錯誤?返回724.2.2SelectCase語句SelectCase語句是多分支結構的又一種表示形式,又稱情況語句。語句形式:

SelectCase變量或表達式Case表達式列表1<語句塊1>Case表達式列表2<語句塊2>……[CaseElse<語句塊n+1>]EndSelectF表達式列表1語句塊1表達式列表2語句塊2表達式列表n語句塊n…..語句塊n+1TTTSelect語句流程示意圖FF…..PrivateSubCommand1_Click()DimcodeAsStringcode=Trim(Text2.Text)SelectCasecodeCase"+"Text4.Text=Val(Text1)+Val(Text3)Case"-"Text4.Text=Val(Text1)-Val(Text3)Case"*"Text4.Text=Val(Text1)*Val(Text3Case"/"IFVal(Text3)=0ThenMsgBox("除數(shù)不能為0,請重新輸入")Text3="“Text4.Text=""Text3.SetFocusElseText4=Val(Text1)/Val(Text3EndIFEndSelectEndSubPrivateSubCommand2_Click() EndEndSubPrivateSubCommand3_Click() Text1="" Text2="" Text3="" Text4="" Text1.SetFocusEndSub例4-7編寫一個簡便四則運算器,應用SelectCase判斷運算符。運行界面如圖【程序代碼】<表達式列表>:與<變量或表達式>同類型的下面四種形式之一:表達式例:case"A"一組枚舉表達式(用逗號分隔)case2,4,6,8

表達式1To表達式2 case60To100

Is關系運算符表達式 caseIs<605.IF語句的嵌套語句形式:

IF<表達式1>Then

語句塊1IF<表達式2>Then

語句塊2…EndIF

語句塊3…EndIF例4-6輸入3個整數(shù),按從小到大的順序輸出。程序運行界面如圖程序代碼如下:PrivateSubCommand1_Click()Dimx%,y%,z%,t%Form1.Clsx=Val(InputBox("請輸入1個整數(shù)"))y=Val(InputBox("請輸入1個整數(shù)"))z=Val(InputBox("請輸入1個整數(shù)"))Print"您輸入三個的數(shù)是:";x;Spc(1);y;Spc(1);zIFx>yThen‘如果x>y則x,y交換t=x:x=y:y=tEndIFIFy>zThent=y:y=z:z=tIFx>yThent=x:x=y:y=tEndIFEndIFPrint"從小到大的順序是:";x;Spc(1);y;Spc(1);zEndSubPrivateSubCommand2_Click()EndEndSub例2-7在文本框中輸入1-1000之間的數(shù)字,如果輸入非數(shù)值,或數(shù)值超出范圍,給予提示,并重新輸入。運行效果及程序代碼如下:PrivateSubForm_Load()Text1.Text=""Text2.Text=""EndSubPrivateSubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13Then'回車鍵的ASCII碼值為13IfIsNumeric(Text1.Text)Then'判斷是否是數(shù)值x=Val(Text1.Text)Ifx<0Orx>1000ThenText1.Text=""Text1.SetFocus'焦點回到文本框Text2.Text="數(shù)值超出范圍,再輸入!"'文本框中顯示提示信息ElseText2.Text="輸入正確!"EndIfElseText1.SetFocusText2.Text="請輸入數(shù)字!"EndIfEndIfEndSub4.2.3條件函數(shù)VB中提供的條件函數(shù):IIF()函數(shù)和Choose()函數(shù),適用于簡單的判斷場合。前者代替IF語句,后者可代替SelectCase語句,IIF()函數(shù)函數(shù)形式:IFF(表達式,條件為True時的值,條件為False時的值)例如:求x,y中大的數(shù),放入變量T中,可以應用語句T=IFF(x>y,x,y)Choose()函數(shù)函數(shù)形式:

Choose(整型表達式,選項列表)其中整型表達式的值決定函數(shù)返回選項列表中的哪個值。如果整型表達式為1,則函數(shù)返回選項列表中的第一項的值,若整型表達式為2,則函數(shù)返回選項列表中的第2項的值,…依次類推。如果整型表達式的值小于1或大于列出的選項數(shù)目時,函數(shù)返回Null。如果整型表達式的值為非整型時,系統(tǒng)自動取其整數(shù)進行判斷。例如,根據(jù)x是1~4的值,轉(zhuǎn)換成“內(nèi)科”、“外科”、“婦科”、“兒科”的語句可以寫成:kb=Choose(x,“內(nèi)科”,“外科”,“婦科”,“兒科”)4.3循環(huán)結構4.3.1For循環(huán)語句For循環(huán)語句是計數(shù)型循環(huán)語句,用于控制循環(huán)次數(shù)預知的循環(huán)結構。語句形式:For循環(huán)變量=初值To終值[Step步長]

Next循環(huán)變量說明:循環(huán)變量必須是數(shù)值型步長:一般為正數(shù),初值小于終值;若為負數(shù),初值大于終值;Step缺省時默認為1。語句塊:重復執(zhí)行的部分,構成循環(huán)體,可以是一句或多句。ExitFor:退出循環(huán),執(zhí)行Next后的下一條語句。循環(huán)次數(shù):n=Int(+1)<語句塊>[ExitFor]<語句塊>循環(huán)體終值-初值

步長TF循環(huán)變量=初值循環(huán)變量≤終值語句塊有ExitFor語句塊循環(huán)變量=循環(huán)變量+步長FT步長>0時For循環(huán)語句流程示意圖例4-8求100以內(nèi)所有數(shù)的和。程序塊如下:Sum=0‘sum為累加和變量,設初值為0Fori=1To100Sum=Sum+iNexti又如:求10的階乘。T=1‘T為連乘積的變量,設初值為1Fori=1To10T=T*iNexti退出循環(huán)時,i的值是多少呢?4.3.2Do…Loop循環(huán)語句Do循環(huán)用于控制循環(huán)次數(shù)未知的循環(huán)結構。語句形式:(1)Do[{While|Until}<條件>]<語句塊>[ExitDo]<語句塊>Loop(2)Do<語句塊>[ExitDo]<語句塊>Loop[{While|Until}<條件>

]TFF表達式列表語句塊有ExitDo語句塊DoWhile…Loop循環(huán)流程圖TDo…LoopWhile流程示意圖FT表達式列表語句塊ExitDo語句塊T例4-9利用DoWhile循環(huán)編寫一個將十進制數(shù)轉(zhuǎn)換成二進制數(shù)的程序。程序運行界面如圖:程序代碼如下:PrivateSubCommand1_Click()Dimx$,n%,a%,n=InputBox("請輸入1個整數(shù)")Print"十進制數(shù)為:";nx=""DoWhilen<>0a=nMod2n=n\2x=Chr(48+a)&xLoopPrint"二進制數(shù)為:";xPrintEndSub例

我國有13億人口,按人口年增長0.8%計算,多少年后我國人口超過26億。分析:解此問題兩種方法,可根據(jù)公式:26=13*(1+0.008)n

直接利用標準對數(shù)函數(shù)求得;也可利用循環(huán)求得,程序如下:PrivateSubCommand1_Click()x=13n=0DoWhilex<26x=x*1.008n=n+1LoopPrintn,xEndSub例4-10求100以內(nèi)的素數(shù)

素數(shù)素數(shù)也成質(zhì)數(shù),就是大于2且只能被1和本身整除的整數(shù)。

我們從素數(shù)的定義來求解:從i=2,3,4,…,m-1依次判斷m能否被i整除,只要有一個能整除m就不是素數(shù),否則m為素數(shù)。運行結果如圖PrivateSubCommand1_Click()DimiAsInteger,mAsInteger,FlagAsBoolean,nAsIntegerPrint"100以內(nèi)的素數(shù)有"Form=3To100Flag=TrueFori=2Tom-1IF(mModi)=0ThenFlag=FalseNextiIFFlag=TrueThenn=n+1PrintSpc(3-Len(Str(m)));m;IFnMod10=0ThenPrintEndIFNextmEndSub4.3.3循環(huán)的嵌套例4-11利用隨機函數(shù)產(chǎn)生20個50~100范圍內(nèi)的隨機數(shù),顯示最大值和最小值。運行界面如圖

[程序代碼]PrivateSubCommand1_Click() DimmaxaAsInteger,minaAsInteger,xAsInteger,iAsInteger Form1.Cls‘每單擊一次清除原來內(nèi)容 maxa=50‘假設較小的數(shù)為最大 mina=100‘假設較大的數(shù)為最小 Randomize Fori=1To20 x=Int(Rnd*51+50) Printx; IFiMod10=0ThenPrint IFx>maxaThenmaxa=x IFx<minaThenmina=x Nexti Print Print"最大值為";maxa Print"最小值為";minaEndSub

一個循環(huán)體內(nèi)又包含了一個完整的循環(huán)結構稱為循環(huán)的嵌套.

例打印九九乘法表.

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… NextjjNextii

Forii=1To10…NextiiForii=1To10…Nextii對于循環(huán)的嵌套,要注意以下事項:內(nèi)循環(huán)變量與外循環(huán)變量不能同名;外循環(huán)必須完全包含內(nèi)循環(huán),不能交叉;不能從循環(huán)體外轉(zhuǎn)向循環(huán)體內(nèi),反之則可以。正確 錯誤對于循環(huán)的嵌套,需要注意以下事項:

內(nèi)循環(huán)變量與外循環(huán)變量不能同名。

外循環(huán)必須完全包含內(nèi)循環(huán),不能交叉。

以下程序段是錯誤的:(1)內(nèi)外循環(huán)變量同名錯誤:Fori=1To10Fori=1To20….NextiNexti(2)內(nèi)外循環(huán)交叉Fori=1To10Forj=1To10…NextiNextj4.4其他輔助控制語句

1.GoTo語句形式:GoTo{標號|行號}作用:無條件地轉(zhuǎn)移到標號或行號指定的那行語句.標號是一個字符序列,行號是一個數(shù)字序列.2.Exit語句多種形式:ExitFor、ExitDo、ExitSub、ExitFunction等。作用:退出某種控制結構的執(zhí)行。3.End語句多種形式:End、EndIf、EndSelect、EndWith、EndType、 EndSub、EndFunction、

作用:End結束一個程序的運行;其余表示某個結構的結束,與對應的結構語句配對出現(xiàn)。4.5常用算法(一)算法是對某個問題求解過程的描述

1.累加、連乘

1~100的5或7的倍數(shù)的和

Sum=0Fori=1To100IfiMod5=0OriMod7=0Then

Sum=Sum+iEndIfNextiPrintSum3~10的乘積

t=1Fori=3To10

t=t*iNextiPrintt思考:若把循環(huán)體前面置各變量初值的語句放在循環(huán)體內(nèi),程序運行時會產(chǎn)生什么情況?2.窮舉法

“窮舉法”也稱為“枚舉法”或“試湊法”,即將可能出現(xiàn)的各種情況一一測試,判斷是否滿足條件,一般采用循環(huán)來實現(xiàn)。例

百元買百雞問題。假定小雞每只5角,公雞每只2元,母雞每只3元?,F(xiàn)在有100元錢要求買100只雞,編程列出所有可能的購雞方案。設母雞、公雞、小雞各為x、y、z只,根據(jù)題目要求,列出方程為:x+y+y=1003x+2y+0.5z=100三個未知數(shù),兩個方程,此題有若干個解。解決此類問題采用“試湊法”,把每一種情況都考慮到。方法一:最簡單三個未知數(shù)利用三重循環(huán)來實現(xiàn)。方法二:從三個未知數(shù)的關系,利用兩重循環(huán)來實現(xiàn)。Forx=0to100Fo

溫馨提示

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

最新文檔

評論

0/150

提交評論