三種基本結(jié)構(gòu)程序設(shè)計_第1頁
已閱讀1頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第四章 三種基本結(jié)構(gòu)程序設(shè)計,本章內(nèi)容及要求: 1.了解算法概念及算法的表示,掌握用流程圖表示算法 2. 熟練掌握賦值語句、End語句和注釋語句等語句及輸入/輸出消息框函數(shù)的使用; 3. 熟練掌握行if語句、塊if結(jié)構(gòu)、Select Case情況選擇結(jié)構(gòu)的使用,掌握選擇的嵌套結(jié)構(gòu); 4. 熟練掌握實現(xiàn)循環(huán)結(jié)構(gòu)的For/Next循環(huán)結(jié)構(gòu)及Exit For語句、Do/Loop循環(huán)

2、結(jié)構(gòu)的使用,掌握多重循環(huán)。,重點:選擇結(jié)構(gòu)及循環(huán)結(jié)構(gòu)的實現(xiàn)及其應(yīng)用,難點:選擇的嵌套及多重循環(huán)結(jié)構(gòu),,,,4.1 算法及算法的表示,4. 1.1 算法概述 什么是算法: 廣義地講:算法是為完成一項任務(wù)所應(yīng)當遵循的一步一步的規(guī)則的、精確的、無歧義的描述,它的總步數(shù)是有限的。 狹義地講:算法是解決一個問題采取的方法和步驟的描述。下面通過兩個簡單的例子加以說明:,例4.1 輸入三個數(shù),然后輸出其中最大

3、的數(shù)。 將三個數(shù)依次輸入到變量A、B、C中,設(shè)變量MAX存放最大數(shù)。其算法如下:,,,,例4.2 輸入10個數(shù),打印輸出其中最大的數(shù)。算法設(shè)計如下:(1)輸入1個數(shù),存入變量A中,將記錄數(shù)據(jù)個數(shù)的變量N賦值為1,即N=1(2)將A存入表示最大值的變量Max中,即Max=A(3)再輸入一個值給A,如果A>Max 則 Max=A, 否則Max不變(4)讓記錄數(shù)據(jù)個數(shù)的變量增加1,即N=N+1(5)判斷N是

4、否小于10,若成立則轉(zhuǎn)到第(3)步執(zhí)行,否則轉(zhuǎn)到第(6)步。(6)打印輸出max,1) 輸入A、B、C。2) A與B中大的一個放入MAX中。3) 把C與MAX中大的一個放入MAX中。4) 輸出MAX,MAX即為最大數(shù)。,,,,4.1.2 算法的特性,有窮性 一個算法必須經(jīng)過有限步驟之后就能解決某個問題。事實上,一般的有限性限制在實際中是不夠的,因為盡管解決某個特定問題的執(zhí)行步驟量是有限的,但可能對實際計算來說仍太

5、大。一個有用的算法不僅要求步驟有限,同時也要求步驟量合理。 確定性 一個算法的每一步必須是無歧義的和精確定義的。在各種情況下動作的執(zhí)行必須嚴密地確定。 3 有0個或多個輸入且有一個或多個輸出 輸入可定義為算法執(zhí)行前初始化時給定的一些量,輸出指與輸入有某種特定關(guān)系的,在算法執(zhí)行完成時產(chǎn)生的一些量。 4 通用性 一個算法最好是適用于某類問題而不只是適用于某一個問題。這種通用性,盡管不是必

6、要的,但肯定是一有用算法要求的特性,,,,4.1.3 算法的表示 一、自然語言與偽代碼表示算法自然語言:就是指人們?nèi)粘J褂玫恼Z言,可以是漢語、英語或其它語言。偽代碼:是用介于自然語言和計算機語言之間的文字和符號(包括數(shù)學(xué)符號)來描述算法。 例如:例4.1可用如下的偽代碼表示Begin(算法開始) 輸入 A,B,C IF A>B 則 A→Max 否則 B→Max IF C>Max

7、則 C→MaxPrint MaxEnd (算法結(jié)束),,,,二、 用傳統(tǒng)流程圖表示算法,,,,,,,,處理框,起止框,I/O框,判斷框,流程線,連接點,1、傳統(tǒng)流程圖中的基本符號,,,,2、三種基本結(jié)構(gòu)的傳統(tǒng)表示(1)順序結(jié)構(gòu),,,條件,,,語句1,語句2,,,,,,,,,,Y,N,,,,,,語句1,語句2,(2)選擇結(jié)構(gòu),,,,,,條件,,( a ),,,,,,,,,,,,條件,,語句組,,,,,,(3)循環(huán)結(jié)構(gòu),a) 當型

8、循環(huán),b) 直到循環(huán),Y,N,Y,N,( b ),語句組,,,,例4.2輸入10個數(shù),打印輸出其中的最大的數(shù)的流程圖,,,,Private Sub Form_Click() Dim a%, max%, i% a = Val(InputBox("A=?")) max = a For i = 2 To 10 a = Val(InputBox("A=?"

9、)) If a > max Then max = a Next i MsgBox( "Max=“ & Str(max))End Sub,最后需要說明的是:上面介紹的算法表示是給人看的,即是為幫助程序開發(fā)人員閱讀、編寫程序而設(shè)計的一種輔助工具,程序則必須符合計算機語言的語法規(guī)則。 下面是例4.2的計算機 程序,即為用計算機語言表示算法:,,,,,,,4.2 順序結(jié)

10、構(gòu),4.2.1 賦值語句 形式: 變量名=表達式 對象.屬性=表達式 功能: 將表達式的值賦值給變量名或指定對象的屬性。 一般用于給變量賦值或?qū)丶O(shè)定屬性值. 例: sRate!=0.1 Text1.Text = "歡迎使用Visual Basic.net”說明: 1. 執(zhí)行過

11、程:先求表達式的值,然后將值賦值給左邊的變量。 2. 右邊表達式可以是變量、常量、函數(shù)調(diào)用等特殊的表達式。 3. 不要將“=”理解為數(shù)學(xué)上的等號: A=A+1 是表示將A單元的值加1后以放回到A單元。,,執(zhí)行過程如右圖,4.賦值符號“=”左邊一定只能是變量名或?qū)ο蟮膶傩砸茫荒苁浅A?、符號常量、表達式。 下面的賦值語句都是錯的:5=X '

12、; 左邊是常量。Abs(X)=20 ' 左邊是函數(shù)調(diào)用,即是表達式。,5. 賦值符號“=”兩邊的數(shù)據(jù)類型一般要求應(yīng)一致。,,,,4.2.2 用戶交互函數(shù) 1. InputBox函數(shù)變量名=InputBox[$]([,][,] [,][,] ) 其中:提示 提示信息,標題 標題區(qū)顯示,缺省輸入?yún)^(qū)缺省值 有$ 返回

13、字符類型,否則為數(shù)值類型. 例如,要在屏幕上顯示如下的對話框:,例如:有下列語句如下: Dim strName As String * 40, strS1 As String * 40 strS1 = “請輸入你的姓名” + Chr(13) + Chr(10) + “然后單擊確定” strName= InputBox$(strS1, “輸入框”, , 100,100) 當鍵盤輸入“

14、王曉明” 后,變量strName獲得鍵盤輸入的值.,2. MsgBox函數(shù) 函數(shù)形式:變量[%] = MsgBox(提示[,按鈕[+圖標]+ [缺省按鈕]+[模式]][,標題]),,,,說明: 1 “標題”和“提示”與InputBox函數(shù)中對應(yīng)的參數(shù)相同; 2 “按鈕+圖標 +缺省按鈕+模式”是整型表達式,決定信息框按鈕數(shù)目、出現(xiàn)在

15、信息框上的圖標類型及操作模式(見表4.1) 3 若程序中需要返回值,則使用函數(shù),否則可調(diào)用過程。,,,,按鈕及圖標值如下:,,,,例4.1 編一帳號和密碼檢驗程序。要求: 帳號不超過6位數(shù)字,有錯,清除原內(nèi)容再輸入. 密碼輸入時在屏幕上以 “*”代替; 若密碼錯,顯示有關(guān)信息,選擇“重試”按鈕,清除原內(nèi)容再輸入,選擇“取消”按鈕,停止運行。分析: 帳號6位,MaxLength為6 ,

16、密碼PassWordChar為“*”,MsgBox函數(shù)設(shè)置密碼錯對話框.,4.3 選擇結(jié)構(gòu) 1. If…Then語句(單分支結(jié)構(gòu)) If Then 語句塊 End If 或 If Then ,例:已知兩個數(shù)x和y,比較它們的大小, 使得x大于y. If x<y Then t=x : x=y: y=t

17、End If 或 If x<y Then t=x: x=y: y=t,2. If…Then…Else語句(雙分支結(jié)構(gòu)) If Then Else End If If Then Else ,例如:輸出x,y兩個中值較大的一個值。IF X>Y Then Print XElse Print YEnd If也可以寫成如下的單行形式

18、: IF X>Y Then Print X Else Print Y,,雙分支選擇結(jié)構(gòu)執(zhí)行過程,3. If…Then…ElseIf語句(多分支結(jié)構(gòu)) 形式: If Then ElseIf Then … [Else 語句塊 n+1 ] End If,例:輸入一學(xué)生成績,評定其等級。方法是:90~

19、100分為“優(yōu)秀”,80~89分為“良好”,70~79分為“中等”,60~69分為“及格”,60分以為“不合格”,,,,,執(zhí)行過程,請問以下哪些正確,哪些錯誤?,IIf 函數(shù),語法:IIf(expr, truepart, falsepart),例如:CheckIt = IIf(TestMe > 1000, "Large", "Small"),相當于:If TestMe > 1000

20、 Then testIt = "Large" Else testIt = "Small" End If,4.3.2 Select Case語句(情況語句)形式:Select Case 變量或表達式Case 表達式列表1語句塊1Case 表達式列表2語句塊2…[Case Else語句塊n

21、+1]End Select:與同類型的下面四種形式之一: 表達式 A +5 一組枚舉表達式(用逗號分隔) 2, 4, 6, 8 表達式1 To 表達式2 60 to 100 Is 關(guān)系運算符表達式

22、 Is < 60,數(shù)值型或字符串表達式,,,,,例 輸入百分制成績mark,顯示對應(yīng)的五級制成績,哪些能實現(xiàn),哪些不能實現(xiàn)?,4.3.3 選擇結(jié)構(gòu)的嵌套 在IF語句的Then分支和Else分支中可以完整地嵌套另一IF語句或Select Case語句,同樣Select Case語句每一個Case分支中都可嵌套另一IF語句或另一Select Case語句。下面是兩種正確的嵌套形式:(1)IF

23、Then ….. if Then …… Else ….. End If …. Else …. IF Then …..

24、 Else ….. End If ….. End IF,(2)IF Then ….. Select Case … Case …… IF Then …… Else

25、 ….. End If …… Case…. ….. End Select ….End IF,注意: 只要在一個分支內(nèi)嵌套,不出現(xiàn)交叉,滿足結(jié)構(gòu)規(guī)則,其嵌套的形式將有很多種,嵌套層次也可以任意多。 對于多層IF嵌套結(jié)構(gòu)中,要特別注意IF與Else的配對關(guān)系,一個Else必須與IF配結(jié),配對的原則是:在寫含有多

26、層嵌套的程序時,Vb.net會自動縮進對齊方式,這樣容易閱讀和維護。,,,,,4.3.4常見錯誤1.在選擇結(jié)構(gòu)中缺少配對的結(jié)束語句對多行式的If塊語句中,應(yīng)有配對的 End If語句結(jié)束。2. 多邊選擇ElseIf關(guān)鍵字的書寫和條件表達式的表示 ElseIf 不要寫成Else If; 多個條件表達式次序問題3. Select Case語句的使用 Select Case 后不能出現(xiàn)多個變量;Case子句后不用條件

27、變量進行邏輯運算,4.4 循環(huán)結(jié)構(gòu)1. For循環(huán)語句 (一般用于循環(huán)次數(shù)已知)形式 For 循環(huán)變量=初值 to 終值 [Step 步長] 語句塊[Exit For] 語句塊 Next 循環(huán)變量,循環(huán)次數(shù),例: For I=2 To 13 Step 3 Label1.Text= Label1.Text & Str(I) & Chr

28、(13) &Chr(10) Next I Label1.Text= Label1.Text & “I=”& Str(I),,,,循環(huán)執(zhí)行次數(shù) 輸出I的值分別為: 2 5

29、 8 11 出了循環(huán)輸出為: I=14,例4.5 編程計算:S=1+2+3+…+100,Dim S%, I%S=0 ' 累加前變量S為0For I=1 to 100 S=S+INext IMsgBox( " S=“ & S),,,,當N<=100,,,N=N+1,打印S,,S=0,N=1,S=S+N,例4-5的算法流程圖,形式1:(當型循環(huán))

30、 Do While 語句塊 [Exit Do] 語句塊 Loop Do 語句塊 [Exit Do] 語句塊 Loop While,4.4.2 Do…Loop循環(huán)語句,,,,,,,形式2:(直到循環(huán))

31、 Do Until 語句塊 [Exit Do] 語句塊LoopDo 語句塊 [Exit Do] 語句塊Loop Until ,Do Until…Loop執(zhí)行過程 Do…Loop Until執(zhí)行過程,說明:(1)當使用While構(gòu)

32、成循環(huán)時,當條件為“真” 則反復(fù)執(zhí)行循環(huán)體,當條件為“假”,則退出循環(huán)。(2)當使用Until 構(gòu)成循環(huán)時,當條件為“假”,則反復(fù)執(zhí)行循環(huán)體,直到條件成立,即為“真”時, 則退出循環(huán)。,,,,(3)在循環(huán)體內(nèi)一般應(yīng)有一個專門用來改變條件表達式中 變量的語句,以使隨著循環(huán)的執(zhí)行,條件趨于不成立 (或成立),最后達到退出循環(huán)。(4)語句Exit Do的作用是退出它所在的循

33、環(huán)結(jié)構(gòu),它只能 用在DO/Loop結(jié)構(gòu)中,并且常常是同選擇結(jié)構(gòu)一起出現(xiàn)在循環(huán)結(jié)構(gòu)中,用來實現(xiàn)當滿足某一條件時提前退出循環(huán)。,例4.7 求兩個整數(shù)的最大公約數(shù)、最小公倍數(shù),,Dim n%,m%,nm%,r%m=Val(InputBox("m="))n=Val(InputBox("n="))nm=n*mIf m 0)

34、 m=n n=r r= m mod n LoopPrint "最大公約數(shù)=", n Print "最小公倍數(shù)=", nm/n,分析:求最大公約數(shù)的算法思想:(最小公倍數(shù)=兩個整數(shù)之積/最大公約數(shù))(1) 對于已知兩數(shù)m,n,使得m>n;(2) m除以n得余數(shù)

35、r;(3) 若r=0,則n為求得的最大公約數(shù),算法結(jié)束;否則執(zhí)行(4);(4) m←n,n←r,再重復(fù)執(zhí)行(2)。,4.4.4 循環(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)。 上面介紹的幾種循環(huán)控制結(jié)構(gòu)可以相互嵌套,下面是幾種常見的二重嵌套形式:,,,,(1)For

36、 I=…. ….. For J=…. …. Next J ….. Next I,(2)For I=…. ….. Do While/Until …. …. Loop …..

37、 Next I,(3)Do While…. ….. For J=…. …. Next J ….. Loop,(4)Do While/Until…. ….. Do While/Until …. …

38、. Loop ….. Loop,,,,,對于循環(huán)的嵌套,要注意以下事項:(1) 內(nèi)循環(huán)變量與外循環(huán)變量不能同名;(2) 外循環(huán)必須完全包含內(nèi)循環(huán),不能交叉; (3) 不能從循環(huán)體外轉(zhuǎn)向循環(huán)體內(nèi),也不能從外循環(huán)轉(zhuǎn)向內(nèi)循環(huán). 正 確錯 誤,For ii =1 To 10

39、 For jj=1 To 20 … Next ii Next jj,For ii =1 To 10 For ii=1 To 20 …

40、 Next ii Next ii,For ii =1 To 10 For jj=1 To 20 … Next jj Next ii,For ii =1 To 10 …

41、 Next ii For ii =1 To 10 … Next ii,,,,,,,,,,,,,,,,,,,,,,4.4.5 幾種循環(huán)語句比較,,,,4.4.6 循環(huán)結(jié)構(gòu)與選擇結(jié)構(gòu)的嵌套,在循環(huán)結(jié)構(gòu)中可以完整嵌套選擇結(jié)構(gòu)即整個選擇結(jié)構(gòu)都屬于循環(huán)體。在選擇結(jié)構(gòu)中嵌套循環(huán)結(jié)

42、構(gòu)時,則要求整個循環(huán)結(jié)構(gòu)必須完整地嵌套在一個分支內(nèi),一個循環(huán)結(jié)構(gòu)不允許出現(xiàn)在兩個或兩個以上的分支內(nèi)。,(1)For I=…… …… IF … Then …… End IF …… Next I,(6) IF … Then …… For I=…… …… End IF …… Next I,(5)Sel

43、ect Case …… For I=…… …… Case …… …… Case …… …… Next I ……… End Select,(3)For I=…… …… IF … Then …… Next I …… End IF,(2)IF … Then

44、 …… For I=…… …… Next I …… End IF0,(4)For I=…… …… Select Case … Case …… …… Case …… …… End Select …… Next I,×,×,×,,,,,4

45、.5 其它輔助控制語句 4.5.1 Goto 語句 形式: Go To {標號|行號} 作用是無條件地轉(zhuǎn)移到標號或行號指定的那行語句. 標號是一個字符序列,行號是一個數(shù)字序列。 例 求100以內(nèi)的素數(shù) 判別某數(shù)m是否為素數(shù)最簡單的方法是: 對于m 從i=2,3,…,m-1判別m能否被i整除,只要有一個能整除 ,m不是素數(shù),否則m是素數(shù)

46、。 For m = 2 To 100 For i = 2 To m - 1 If (m Mod i) = 0 Then GoTo NotNextM Next i Print m NotNextM: Next m,,,,4.5.2 Exit 語句,Exit 語句用于退出 Do...Loop、For...Next、Funct

47、ion或Sub代碼塊。 對應(yīng)的使用格式為:Exit Do、Exit For、Exit Function、Exit Sub。分別表示退出DO循環(huán)、For循環(huán)、函數(shù)過程、子過程。,例如: 下面的例子是使用 Exit 語句退出 For...Next 循環(huán)、Do...Loop 循環(huán)及子過程。,Private Sub Form_Click() Dim I%, Num% Do

48、 ' 建立無窮循環(huán)。 For I = 1 To 100 ' 循環(huán) 100 次。 Num = Int(Rnd * 100) ' 生成一個0~99的隨機數(shù)。 Select Case Num Case 10: Exit For '退出 For...Next 循環(huán)。 Case 50: Exit Do &#

49、39;退出 Do...Loop 循環(huán)。 Case 64: Exit Sub ' 退出子過程。 End Select Next I LoopEnd Sub,4.5.3 End 語句 形式: End 功能:結(jié)束一個程序的運行。 在Visual Basic中還有多種形式的End語句,用于結(jié)束一個程序塊或過程。

50、 其形式有: End If End Select End With End Sub End Function等它們與對應(yīng)的語句配對使用。,4.5.4 暫停語句 Stop語句用來暫停程序的執(zhí)行,相當于在事件代碼中設(shè)置斷點。語法格式為: Stop說明:1. Stop語句的主要作用是把

51、解釋程序置為中斷(Break)模式,以便對程序進行檢查和調(diào)試??梢栽诔绦虻娜魏蔚胤椒胖肧top語句,當執(zhí)行Stop語句時,系統(tǒng)將自動打開立即窗口。2. 與End語句不同。,4.5.5 With...End With 語句 形式: With 對象名 語句塊 End With 說明:With 語句可

52、以對某個對象執(zhí)行一系列的語句,而不用重復(fù)指出對象的名稱。 例如,要改變一個對象的多個屬性,可以在 With 控制結(jié)構(gòu)中加上屬性的賦值語句,這時候只是引用對象一次而不是在每個屬性賦值時都要引用它。,4.6 常用算法,1.累加、連乘,例:1~100的5或7的倍數(shù)的和 Sum = 0 For i = 1 To 100 If i Mod 5 = 0 Or i Mod 7 = 0 Then

53、 Sum = Sum + i End If Next i Print Sum,例: 3~10的乘積 t = 1 For i =3 To 10 t = t * i Next i Print t,思考:若把循環(huán)體前面置各變量初值的語句放在循環(huán)體內(nèi),程序運行時會產(chǎn)生什么情況?,例4.14求自然對數(shù)e的近似值,要求其誤差小于0.00001,近似公式為:

54、 該例題涉及兩個問題: (1)用循環(huán)結(jié)構(gòu)求級數(shù)和的問題。本例根據(jù)某項值的精度來控制循環(huán)的結(jié)束與否。 (2)累加:e=e+t 循環(huán)體外對累加和的變量清零 e=0 連乘:n=n*i 循環(huán)體外對連乘積變量置1 n=1 Private Sub Form_Click() Dim i%,n&, t!, e! e = 0 : n = 1 ‘ e存放累加和、n存放階

55、乘 i = 0 : t = 1 ‘ i計數(shù)器、t第i項的值 Do While t > 0.00001 e = e + t : i = i + 1 ‘ 累加、連乘 n = n * i : t = 1 / n Loop MsgBox( "計算了 “ & Chr(i) & " 項的和是 " & Chr(e))End Sub,2.最

56、小、最大值在若干個數(shù)中求最大值,一般先假設(shè)一個較小的數(shù)為最大值的初值,若無法估計較小的值,則取第一個數(shù)為最大值的初值;然后將每一個數(shù)與最大值比較,若該數(shù)大于最大值,將該數(shù)替換為最大值;依次逐一比較。例隨機產(chǎn)生10個100~200之間的整數(shù),求最大值。,Private Sub Button1_Click() Dim i As Integer Dim x, Max As Integer Max = 1

57、00 For i = 1 To 10 x = Int(Rnd() * 101 + 100) Label1.Text = Label1.Text & Str(x) & " " If x > Max Then Max = x Next i Label1.Text = Label

58、1.Text & Chr(13) & Chr(10) ' 換行 Label1.Text = Label1.Text & "最大值=" & Str(Max)End Sub,4.7 常見錯誤1. 不循環(huán)或死循環(huán)的問題 主要是循環(huán)條件、循環(huán)初值、循環(huán)終值、循環(huán)步長的設(shè)置有問題。2.循環(huán)結(jié)構(gòu)中缺少配對的結(jié)束語句 For 少 配對的Next 3.循環(huán)嵌

溫馨提示

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

評論

0/150

提交評論