




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第四章三種基本結構程序設計本章內容及要求:1.了解算法概念及算法的表示,掌握用N—S流程序表示算法2.熟練掌握賦值語句、End語句和注釋語句等語句及輸入/輸出消息框函數的使用;3.熟練掌握行if語句、塊if結構、SelectCase情況選擇結構有使用,掌握選擇的嵌套結構;4.熟練掌握實現循環結構的For/Next循環結構及ExitFor語句、Do/Loop循環結構的使用,掌握多重循環。重點:選擇結構及循環結構的實現及其應用難點:選擇的嵌套及多重循環結構4.1算法及算法的表示4.1.1算法概述什么是算法:廣義地講:算法是為完成一項任務所應當遵循的一步一步的規則的、精確的、無歧義的描述,它的總步數是有限的。狹義地講:算法是解決一個問題采取的方法和步驟的描述。下面通過兩個簡單的例子加以說明:例4.1輸入三個數,然后輸出其中最大的數。將三個數依次輸入到變量A、B、C中,設變量MAX存放最大數。其算法如下:
例4.2輸入10個數,打印輸出其中最大的數。算法設計如下:(1)輸入1個數,存入變量A中,將記錄數據個數的變量N賦值為1,即N=1(2)將A存入表示最大值的變量Max中,即Max=A(3)再輸入一個值給A,如果A>Max則Max=A,否則Max不變(4)讓記錄數據個數的變量增加1,即N=N+1(5)判斷N是否小于10,若成立則轉到第(3)步執行,否則轉到第(6)步。(6)打印輸出max1)輸入A、B、C。2)A與B中大的一個放入MAX中。3)把C與MAX中大的一個放入MAX中。4)輸出MAX,MAX即為最大數。4.1.2算法的特性有窮性確定性有0個或多個輸入有一個或多個輸出有效性4.1.3算法的表示一、自然語言與偽代碼表示算法自然語言:就是指人們日常使用的語言,可以是漢語、英語或其它語言。偽代碼:是用介于自然語言和計算機語言之間的文字和符號(包括數學符號)來描述算法。例如:例4.1可用如下的偽代碼表示Begin(算法開始)
輸入A,B,CIFA>B則A→Max
否則B→MaxIFC>Max則C→MaxPrintMaxEnd(算法結束)二用傳統流程圖表示算法處理框起止框I/O框判斷框流程線連接點1、傳統流程圖中的基本符號2、三種基本結構的表示(1)順序結構條件語句1語句2YN語句1語句2(2)選擇結構條件(a)條件語句組(3)循環結構a)當型循環b)直到循環YNYN(b)語句組三種基本結構的特點:(1)只有一個入口(2)只有一個出口(3)不存在死語句(4)不存在死循環例:例4.2輸入10個數,打印輸出其中的最大的數的流程圖從10個數中選出最大的數的流程圖N<10Max=AN=1A>MaxMax=A輸入A開始再輸入給AN=N+1打印Max結束YNNY4.1.4用N—S流程圖表示算法將全部算法寫在一個矩形框內,在矩形內還可包含其它從屬于它的框三種基本結構的N—S圖表示:語句A語句B語句A語句B條件YN1、順序結構2、選擇結構語句組(3)循環結構a)當型循環b)直到循環當條件成立語句組直到當條件成立例:畫出從10個數中選出最大的數的N—S流程圖(a)(b)傳統流程圖N<10Max=AN=1A>MaxMax=A輸入A開始再輸入給AN=N+1打印Max結束YNNY輸入A當N<=10Max=AN=N+1打印Max輸入AN—S流程圖A>=MaxYNPrivateSubForm_Click()Dima%,max%,i%max=aFori=1To10a=Val(InputBox("A=?"))Ifa>maxThenmax=aNextiPrint"Max=";maxEndSub最后需要說明的是:上面介紹的算法表示是給人看的,即是為幫助程序開發人員閱讀、編寫程序而設計的一種輔助工具,程序則必須符一計算機語言的語法規則。下面是例4.2的計算機程序,即為用計算機語言表示算法:4.1.6結構化程序設計方法(補充)(一)、用計算機解決問題的過程提出、分析問題確定算法模型設計算法編寫程序調試程序分析輸出結果正確合理結束不正確(二)、結構化程序設計思想自頂向下、逐步細化、模塊化自頂向下:先從全局、整體設計逐步細化:將一個問題分解成幾個較小的問題解決模塊化:將一個大任務分解成若干個較小的部分,每個部分承擔一定功能,稱為“功能模塊”例:給100個整數,打印輸出其中的素數S1N—S流程圖輸入100個數存入X1,x2,……x100打印x1…..x100中不等于0的數讓x1,x2,……x100中的非素變為0S3S2輸入xi當i<=100i=i+1i=1S1細化xi≠0當i<=100i=i+1i=1YN打印xiS3細化S1N—S流程圖輸入100個數存入X1,x2,……x100打印x1…..x100中不等于0的數讓x1,……x100中的非素變為0S3S2S2細化判斷xi是否是素數,若不是則將xi=0當i<=100i=i+1i=1S21r=0r<=將x1除j的余j=j+1j=2YNxi=0直到j>xi/2S21細化輸入100個數存入X1,x2,……x100打印x1…..x100中不等于0的數讓x1,……x100中的非素變為0細化后的流程圖輸入xi當i<=100i=i+1i=1當i<=100i=1r=0r=xi%jj=j+1j=2YNxi=0直到j>xi/2i=i+1xi≠0當i<=100i=1YN打印xii=i+14.2順序結構4.2.1賦值語句
形式:變量名=表達式對象.屬性=表達式
功能:將表達式的值賦值給變量名或指定對象的屬性。一般用于給變量賦值或對控件設定屬性值.例:sRate!=0.1Text1.Text="歡迎使用VisualBasic6.0”說明:1執行過程:先求表達式的值,然后將值賦值給左邊的變量。2右邊的表達式可以是變量、常量、函數調用等特殊的表達式。3不要將“=”理解為數學上的等號:A=A+1是表示將A單元的值加1后以放回到A單元。執行過程如右圖4.賦值符號“=”左邊一定只能是變量名或對象的屬性引用,不能是常量、符號常量、表達式。下面的賦值語句都是錯的:5=X'左邊是常量。Abs(X)=20'左邊是函數調用,即是表達式。5.賦值符號“=”兩邊的數據類型一般要求應一致。4.2.2數據的輸出——Print方法Print方法的一般格式:[對象名.]Print[<表達式表>][{,|;}]說明:[對象名.]可以是窗體名、圖片框名,也可是立即窗口“Debug”。若省略對象,則表示在當前窗體上輸出。在2.3節窗體對象的方法中對Print方法做了詳細的介紹。用Print方法在圖片框和立即窗口對象中輸出與在窗體對象中輸出完全相同。缺省值標題題提示4.2.3用戶交互函數和過程
1.InputBox函數變量名=InputBox[$](<提示信息>[,<標題>][,<缺省>][,<x坐標>][,<y坐標>])
其中:提示提示信息,標題標題區顯示,缺省輸入區缺省值有$返回字符類型,否則為數值類型.例如,要在屏幕上顯示如下的對話框:例如:有下列語句如下:
DimstrNameAsString*40,strS1AsString*40strS1=“請輸入你的姓名”+Chr(13)+Chr(10)+“然后單擊確定”strName=InputBox$(strS1,“輸入框”,,100,100)
當鍵盤輸入“王曉明”后,變量strName獲得鍵盤輸入的值.缺省值標題題提示2.MsgBox函數和MsgBox過程
函數形式:變量[%]=MsgBox(提示[,按鈕[+圖標]+[缺省按鈕]+[模式]][,標題])過程形式:MsgBox提示[,按鈕[+圖標]+[缺省按鈕]+[模式]][,標題]圖標標題提示信息命令按鈕說明:1“標題”和“提示”與InputBox函數中對應的參數相同;2“按鈕+圖標+缺省按鈕+模式”是整型表達式,決定信息框按鈕數目、出現在信息框上的圖標類型及操作模式(見表4.1)3若程序中需要返回值,則使用函數,否則可調用過程。按鈕及圖標值如下:根據用戶所選按鈕,函數返回1—7的整數值,其含義如下表:(表4.2)4.2.4注釋語句其語法格式為:Rem<注釋內容>或'<注釋內容>說明:1.<注釋內容>指要包括的任何注釋文本。在Rem關鍵字和注釋內容之間要加一個空格。可以用一個英文單引號“'”來代替Rem關鍵字。2.如果在其他語句行后面使用Rem關鍵字,必需用冒號(:)與語句隔開。若用英文單引號“'”,則在其他語句行后面不必加冒號(:)。例如:ConstPI=3.1415925'符號常量PIS=PI*r*r :Rem計算圓的面積4.3選擇結構
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=t2.If…Then…Else語句(雙分支結構)
If<表達式>Then<語句塊1>Else<語句塊2>EndIf
If<表達式>Then<語句1>Else<語句2>
例如:輸出x,y兩個中值較大的一個值。IFX>YThenPrintXElsePrintYEndIf也可以寫成如下的單行形式:IFX>YThenPrintXElsePrintY雙分支選擇結構執行過程例4.1設計一個求解一元二次方程的程序3.If…Then…ElseIf語句(多分支結構)
形式:
If<表達式1>Then <語句塊1> ElseIf<表達式2>Then <語句塊2> … [Else 語句塊n+1] EndIf
例:輸入一學生成績,評定其等級。方法是:90~100分為“優秀”,80~89分為“良好”,70~79分為“中等”,60~69分為“及格”,60分以為“不合格”執行過程使用IF語句實現的程序段如下:Ifx>=90thenPrint"優秀"ElseIfx>=80ThenPrint"良好"ElseIfx>=70ThenPrint"中等"ElseIfx>=60ThenPrint"及格"ElsePrint"不及格"EndIf4.3.2SelectCase語句(情況語句)形式:
SelectCase變量或表達式 Case表達式列表1 語句塊1 Case表達式列表2 語句塊2 … [CaseElse 語句塊n+1] EndSelect<表達式列表>:與<變量或表達式>同類型的下面四種形式之一:表達式例:A+5
一組枚舉表達式(用逗號分隔)
2,4,6,8
表達式1To表達式2
60to100 Is關系運算符表達式
Is<60數值型或字符串表達式例如:將例4.3使用selectcase…..語句來實現的程序段如下:SelectCasexCase90to100Print"優秀"Case80to89Print"良好"Case70to79Print"中等"Case60to69Print"及格"CaseElsePrint"不及格"EndSelect補充例題:設計一個由計算機來當小學低年級學生算術老師的VB應用程序,要求給出一系列的兩個1~10數的四則運算的算術題,學生輸入該題的答案,計算機根據學生的答案判斷正確與否,并給出成績,單擊結束命令按鈕,退出應用程序。分析:產生1~10操作數,可通過Int(10*Rnd+1)實現
4.3.3選擇結構的嵌套在IF語句的Then分支和Else分支中可以完整地嵌套另一IF語句或SelectCase語句,同樣SelectCase語句每一個Case分支中都可嵌套另一IF語句或另一SelectCase語句。下面是兩種正確的嵌套形式:(1)IF<條件1>Then…..Then<條件2>Then……Else…..EndIf….Else….IF<條件3>Then…..Else…..EndIf…..EndIF(2)IF<條件1>Then…..SelectCase…Case……IF<條件1>Then……Else…..EndIf……Case….…..EndSelect….EndIF注意:只要在一個分支內嵌套,不出現交叉,滿足結構規則,其嵌套的形式將有很多種,嵌套層次也可以任意多。對于多層IF嵌套結構中,要特別注意IF與Else的配對關系,一個Else必須與IF配結,配對的原則是:在寫含有多層嵌套的程序時,建議使用縮進對齊方式,這樣容易閱讀和維護。例4.4設計一個用戶身份驗證程序,運行界面如下圖所示。4.4循環結構1.For循環語句(一般用于循環次數已知)形式
For循環變量=初值to終值[Step步長] 語句塊 [ExitFor] 語句塊Next循環變量循環體>0初值<終值=1時,可省略<0初值>終值=0死循環步長循環次數例:ForI=2To13Step3PrintI,NextIPrint“I=“,I循環執行次數輸出I的值分別為:25811出了循環輸出為:I=14例4.5編程計算:S=1+2+3+…+100DimS%,I%S=0'累加前變量S為0ForI=1to100S=S+INextIPrint"S=",S當N<=100N=N+1打印SS=0,N=1S=S+N例4-5的算法流程圖形式1:(當型循環)
Do{While|Until}<條件>語句塊[ExitDo]語句塊Loop4.4.2Do…Loop循環語句形式2:(直到循環)
Do 語句塊 [ExitDo] 語句塊 Loop{While|Until}<條件>條件語句塊語句塊TFExitDo條件語句塊語句塊TFExitDoDoUntil…Loop執行過程Do…LoopUntil執行過程說明:(1)當使用While<條件>構成循環時,當條件為“真”,則反復執行循環體,當條件為“假”,則退出循環。(2)當使用Until<條件>構成循環時,當條件為“假”,則反復執行循環體,直到條件成立,即為“真”時,則退出循環。(3)在循環體內一般應有一個專門用來改變條件表達式中變量的語句,以使隨著循環的執行,條件趨于不成立(或成立),最后達到退出循環。(4)語句ExitDo的作用是退出它所在的循環結構,它只能用在DO/Loop結構中,并且常常是同選擇結構一起出現在循環結構中,用來實現當滿足某一條件時提前退出循環。4.4.3While…Wend語句使用格式如下:While<條件><循環塊>Wend
說明:該語句的功能與DoWhile<條件>….Loop實現的循環完全相同。例:用do…Loop語句改寫前面的例題4.5例4.7求兩個整數的最大公約數、最小公倍數Dimn%,m%,nm%,r%m=Val(InputBox("m="))n=Val(InputBox("n="))nm=n*mIfm<nThent=m:m=n:n=tr=mmodnDoWhile(r<>0)m=nn=rr=mmodnLoopPrint"最大公約數=",nPrint"最小公倍數=",nm/n算法使用轉碾除法,流程圖如右,實現的程序代碼如下:
4.4.4循環的嵌套——多重循環結構
如果在一個循環內完整地包含另一個循環結構,則稱為多重循環,或循環嵌套,嵌套的層數可以根據需要而定,嵌套一層稱為二重循環,嵌套二層稱為三重循環。上面介紹的幾種循環控制結構可以相互嵌套,下面是幾種常見的二重嵌套形式:(1)ForI=….…..ForJ=….….NextJ…..NextI(2)ForI=….…..DoWhile/Until….….Loop…..NextI(3)DoWhile….…..ForJ=….….NextJ…..Loop(4)DoWhile/Until….…..DoWhile/Until….….Loop…..Loop例如:打印九九乘法表.
Fori=1To9Forj=1To9se=i&"×"&j&"="&i*jPicture1.PrintTab((j-1)*9+1);se;NextjPicture1.PrintNexti對于循環的嵌套,要注意以下事項:(1)內循環變量與外循環變量不能同名;(2)外循環必須完全包含內循環,不能交叉;(3)不能從循環體外轉向循環體內,也不能從外循環轉向內循環.
正確
錯誤
Forii=1To10Forjj=1To20… Nextii NextjjForii=1To10Forii=1To20… Nextii NextiiForii=1To10Forjj=1To20… NextjjNextiiForii=1To10…NextiiForii=1To10…Nextii4.4.5幾種循環語句比較4.4.6循環結構與選擇結構的嵌套在循環結構中可以完整嵌套選擇結構即整個選擇結構都屬于循環體。在選擇結構中嵌套循環結構時,則要求整個循環結構必須完整地嵌套在一個分支內,一個循環結構不允許出現在兩個或兩個以上的分支內。(1)ForI=…………IF…Then……EndIF……NextI(6)IF…Then……ForI=…………EndIF……NextI(5)SelectCase……ForI=…………Case…………Case…………NextI………EndSelect(3)ForI=…………IF…Then……NextI……EndIF(2)IF…Then……ForI=…………NextI……EndIF(4)ForI=…………SelectCase…Case…………Case…………EndSelect……NextI×××4.5其它控制語句
4.5.1Goto語句形式:GoTo{標號|行號}作用是無條件地轉移到標號或行號指定的那行語句.標號是一個字符序列,行號是一個數字序列。
例3.8
求100以內的素數判別某數m是否為素數最簡單的方法是:對于m從i=2,3,…,m-1判別m能否被i整除,只要有一個能整除,m不是素數,否則m是素數。Form=2To100Fori=2Tom-1If(mModi)=0ThenGoToNotNextMNextiPrintmNotNextM:Nextm4.5.2Exit語句
Exit語句用于退出Do...Loop、For...Next、Function或Sub代碼塊。對應的使用格式為:ExitDo、ExitFor、ExitFunction、ExitSub。分別表示退出DO循環、For循環、函數過程、子過程。例如:下面的例子是使用Exit語句退出For...Next循環、Do...Loop循環及子過程。PrivateSubForm_Click()DimI%,Num%Do'建立無窮循環。ForI=1To100'循環100次。Num=Int(Rnd*100)'生成一個0~99的隨機數。SelectCaseNumCase10:ExitFor'退出For...Next循環。Case50:ExitDo'退出Do...Loop循環。Case64:ExitSub'退出子過程。EndSelectNextILoopEndSub4.5.3End語句
形式:End
功能:結束一個程序的運行。在VisualBasic中還有多種形式的End語句,用于結束一個程序塊或過程。其形式有:EndIfEndSelectEndTypeEndWithEndSubEndFunction等它們與對應的語句配對使用。
4.5.4暫停語句
Stop語句用來暫停程序的執行,相當于在事件代碼中設置斷點。語法格式為:Stop說明:1.Stop語句的主要作用是把解釋程序置為中斷(Break)模式,以便對程序進行檢查和調試。可以在程序的任何地方放置Stop語句,當執行Stop語句時,系統將自動打開立即窗口。2.與End語句不同。4.5.5With...EndWith語句形式:With對象名語句塊EndWith
說明:With語句可以對某個對象執行一系列的語句,而不用重復指出對象的名稱。例如,要改變一個對象的多個屬性,可以在With控制結構中加上屬性的賦值語句,這時候只是引用對象一次而不是在每個屬性賦值時都要引用它。下面的例子顯示了如何使用With語句來給同一個對象的幾個屬性賦值。例如,需要對同一對象設置幾個屬性。途徑之一是使用多條語句。PrivateSubForm_Load()Command1.Caption="退出(E&xit)"Command1.Top=500Command1.Left=4500Command1.Enabled=TrueEndSub使用With...EndWith語句,上面程序的代碼如下。PrivateSubForm_Load()WithCommand1.Caption="OK".Top=500.Left=4500.Enabled=TrueEndWithEndSub4.6應用程序舉例4.6.1素數與哥德巴赫猜想例4.9判斷一個給定的整數是否為素數。算法思路:素數指除了能被1和自身外,不能被其他整數整除的自然數。判斷整數N是不是素數的基本方法是:將N分別除以2,3,…,N-1,若都不能整除,則N為素數。因為N=Sqr(N)*Sqr(N),所以,當N能被大于等于Sqr(N)的整數整除時,一定存在一個小于等于Sqr(N)的整數,使N能被它整除,因此只要判斷N能否被2,3,…,Sqr(N)整除即可。算法流程圖如下:DimN%,I%,K%N=Val(InputBox("N=?"))K=Int(Sqr(N))ForI=2ToKIfNModI=0ThenExitForNextIIfI>KThenPrintN;"是素數"ElsePrintN;"不是素數"EndIf例4.10編一程序驗證哥德巴赫猜想:一個大于等于6的偶數可以表示為兩個素數之和。例如:6=3+38=3+510=3+7
算法設計:設N為大于等于6的任一偶數,將其分解為N1和N2兩個數,使用N1+N2=N,分別判斷N1和N2是否為素數,若都是,則為一組解。若N1不是素數,就不必再檢查N2是否素數。先從N1=3開始,直到N1=N/2為止。算法流程圖如圖4-29所示。將程序代
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 逐步提升Web考試應試技巧
- 2024年汽車車速傳感器項目資金需求報告代可行性研究報告
- 計算機四級信息安全真題
- 2024年高性能單鏡頭反光照相機資金申請報告代可行性研究報告
- 攀枝花鹽邊縣2025年八年級《語文》上學期期末試題與參考答案
- 腦機接口技術在軍事訓練中的臨床試驗協議
- 微信小程序電商代運營及客戶體驗優化合同
- 時尚網紅奶茶連鎖品牌區域代理權授予及運營輔導協議
- 網絡工程師考試亮點與問題
- 教育機構品牌授權合作協議
- 心理健康教育特色學校建設路徑
- 2025年全國保密教育線上培訓考試試題庫【完整版】附帶答案詳解
- (二模)2025年5月濟南市高三高考針對性訓練英語試卷(含答案解析)
- 修腳師勞動合同(新標準版)6篇
- TCHSA-012-2023-兒童口腔疾病治療中靜脈鎮靜技術規范
- 三方合伙開店協議合同
- 2025年新疆中考第一次模擬化學試題(含答案)
- 2025年危險品水路運輸從業資格考試復習題庫-上(單選題)
- 2025年-河北建筑安全員B證考試題庫附答案
- 《2024年版煤礦安全生產化標準化管理體系基本要求及評分方法》
- 2025-2030中國床墊行業市場深度調研及投資前與投資策略景研究報告
評論
0/150
提交評論