任務(wù)四應(yīng)用過程數(shù)組循環(huán)拓展功能.ppt_第1頁
任務(wù)四應(yīng)用過程數(shù)組循環(huán)拓展功能.ppt_第2頁
任務(wù)四應(yīng)用過程數(shù)組循環(huán)拓展功能.ppt_第3頁
任務(wù)四應(yīng)用過程數(shù)組循環(huán)拓展功能.ppt_第4頁
任務(wù)四應(yīng)用過程數(shù)組循環(huán)拓展功能.ppt_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

VB.NET程序設(shè)計,任務(wù)四 應(yīng)用過程、數(shù)組、循環(huán)拓展功能,學(xué)習(xí)目標(biāo),1、掌握循環(huán)結(jié)構(gòu)的使用 2、掌握數(shù)組定義和應(yīng)用 3、掌握過程定義和調(diào)用 4、了解過程調(diào)用中的參數(shù)傳遞,循環(huán)語句,程序的另一種結(jié)構(gòu)是循環(huán)結(jié)構(gòu) 循環(huán)結(jié)構(gòu)作用是重復(fù)執(zhí)行一段程序 循環(huán)是有條件的、次數(shù)是有限的 VB的循環(huán)語句:ForNext、Do WhileLoop For EachNext,循環(huán)語句ForNext循環(huán),ForNext循環(huán)一般應(yīng)用于循環(huán)次數(shù)已知的場合 For = 初值 To 終值 Step 步長 語句塊(循環(huán)體) Next 循環(huán)變量 工作原理,Step缺省為 1,循環(huán)語句ForNext循環(huán),例 求1+3+5+7+99 Dim Sum As Integer, I As Integer Sum = 0 保存累加和,先清零 For I = 1 To 99 Step 2 Sum = Sum + I Next I Msgbox(“1+3+5+99=“ & Sum),本例的特點是數(shù)據(jù)項之間相差2, 即Step的值為2,思考: 例中當(dāng)輸出出現(xiàn)時,I 的值是多少? 如果省略Step 2,程序的結(jié)果如何? For語句能不能改寫成For I=99 To 1 Step -2 ? Msgbox()的作用?,循環(huán)語句ForNext循環(huán),例 求斐波那契級數(shù)的前20項 Dim A, B, I, T As Integer A = 1 : B = 1 生成級數(shù)第一、二項 Debug.write (A & “ ”) Debug.write (B & “ ”) For I = 3 To 20 T = A + B 產(chǎn)生級數(shù)新的一項 A = B 讓B成為下一組的A B = T 原來A+B的值成為下一組的B Debug.write (B & “ ”) If I Mod 6 = 0 Then Debug.writeline(“”) Next I,每6個數(shù)一行,斐波那契級數(shù): 第一、二項為1 第三項開始,每一項 的值是前兩項值之和,循環(huán)語句DoLoop循環(huán),1. 當(dāng)型循環(huán),先判斷后執(zhí)行,先執(zhí)行后判斷,特點:條件表達式成立執(zhí)行循環(huán)體內(nèi)容,循環(huán)語句DoLoop循環(huán),例 Sum=1+2+3+N 求Sum不超過10000的最大整數(shù)值和數(shù)據(jù)項數(shù)N Dim Sum, N As Integer N = 0 開始時項數(shù)為0 Sum = 0 保存累加值的變量Sum清零 Do While Sum = 10000 N = N + 1 Sum = Sum + N Loop Sum = Sum - N N = N - 1 Msgbox( “Sum=“ & Sum & “N=“ & N),當(dāng)Sum的值超出10000時循環(huán)才終止。因此Sum值要減去多加的一個N;而在循環(huán)過程中,N也被多加了一個1,需要減去。,循環(huán)語句DoLoop循環(huán),2. 直到型循環(huán),特點:條件表達式不成立執(zhí)行循環(huán)體內(nèi)容,循環(huán)語句DoLoop循環(huán),例 Sum=1+2+3+N 求Sum不超過10000的最大整數(shù)值和數(shù)據(jù)項數(shù)N Dim Sum, N As Integer N = 0 開始時項數(shù)為0 Sum = 0 保存累加值的變量Sum清零 Do While Sum = 10000 N = N + 1 Sum = Sum + N Loop Sum = Sum - N N = N - 1 Msgbox( “Sum=“ & Sum & “N=“ & N),當(dāng)Sum的值超出10000時循環(huán)才終止。因此Sum值要減去多加的一個N;而在循環(huán)過程中,N也被多加了一個1,需要減去。,實訓(xùn),求:1+2+3+100的值,循環(huán)語句兩重循環(huán),例 輸出乘法口訣表 Dim I As Integer, J As Integer, M As Integer For I = 1 To 9 For J = 1 To I M = I * J Debug.write (J & “*“ & I & “=“ & M & “ “) Next J Debug.writeline(“”) 打印換行 Next I,循環(huán)語句兩重循環(huán),例 計算 Dim I As Integer, J As Integer Dim F As Long 階乘值用長整型保存 Dim r As Double For I = 0 To 10 F = 1 每個階乘值先置1以便累乘 For J = 1 To I F = F * J Next J r = r + 1 / F Next I Msgbox( “r(e)=“ & r),本循環(huán)計算F= I!,循環(huán)語句多重循環(huán),多重循環(huán):循環(huán)次數(shù)在兩重以上的循環(huán)結(jié)構(gòu) 例 計算將1角錢兌換成零錢有多少種方案 Dim I, J, K, S As Integer S = 0 統(tǒng)計兌換1角錢的方案數(shù) For I = 0 To 10 1分錢個數(shù) For J = 0 To 5 2分錢個數(shù) For K = 0 To 2 5分錢個數(shù) If 1*I +2*J +5*K = 10 Then S = S + 1 Next K Next J Next I Msgbox( “1角錢兌換成零錢的方案有“ & S & “種”),1角錢以下的硬幣有1分、2分和5分種 1角錢全換成1分需10個 1角錢全換成2分需5個 1角錢全換成5分需2個,數(shù)組數(shù)組的概念,數(shù)組用于保存大量的、邏輯上有聯(lián)系的數(shù)據(jù) 數(shù)組的特點: 數(shù)據(jù)中的元素在類型上是一致的 數(shù)組元素在內(nèi)存空間上是連續(xù)存放的 數(shù)組元素的引用可通過下標(biāo)進行 數(shù)組在使用前必須要定義(聲明),數(shù)組一維數(shù)組的定義和使用,1. 數(shù)組的定義(聲明) Dim 數(shù)組名(下標(biāo)) As 數(shù)據(jù)類型 或 Dim 數(shù)組名() As 數(shù)據(jù)類型 = 值 例如: Dim Data(40) As Integer Dim Data() As Integer = 1,2,3,4 定義數(shù)組可以使用類型符 例, Dim Data%(40) 數(shù)組的下標(biāo)全部從 0 開始 例,Dim Salary(1000) As Decimal 通過數(shù)組名和下標(biāo)可引用數(shù)組中的元素 例, Data(25)=95 Debug.write ( Data(25),數(shù)組一維數(shù)組的定義和使用,說明-1: 數(shù)組定義后的初值:數(shù)值型數(shù)組各元素為0,邏輯型數(shù)組各元素為False,字符串?dāng)?shù)組各元素為空串(“)。 可同時聲明幾個數(shù)組,用逗號分隔,例如 Dim A%(100), B(800) As Long 定義數(shù)組時,下標(biāo)的上界值只能是常數(shù)或常數(shù)表達式。下例的定義是錯誤的 N=100 : Dim Data(N) As Integer 定義時,數(shù)組的上界值不得超出長整型范圍。,數(shù)組一維數(shù)組的定義和使用,說明-2: 數(shù)組的元素個數(shù)稱為數(shù)組長度。 GetUpperBound是數(shù)組的一個方法,它可返回數(shù)組某個維的上界值. 例如 Dim Matrix1(,) As Integer = 1, 2, 3, 4, 2, 3, 4, 5, 3, 4, 5, 6 Dim Matrix2(3, 2) As Integer Dim Matrix3(,) As Integer,數(shù)組一維數(shù)組的定義和使用,2. 數(shù)組元素的使用 通過數(shù)組名和下標(biāo) 例 Dim Data(5) As Integer Dim Sum, I As Integer For I = 1 To 5 Data(I) = InputBox(“輸入第“ & I & “個數(shù)據(jù)“) Sum = Sum + Data(I) Next I Debug.writeline( Sum),Inputbox函數(shù)運行的窗口,數(shù)組一維數(shù)組的定義和使用,說明: 數(shù)組實際上是用一個變量名字代表一組數(shù),這組數(shù)是連續(xù)排列的,用順序號作為下標(biāo)區(qū)分各個數(shù)。 數(shù)組下標(biāo)是一個整型量。 數(shù)組常見的錯誤: 下標(biāo)出界,Dim Test(3) As Integer Test(1)=4 Test(2)=3 Test(3)=2 Test(4)超出定義,數(shù)組一維數(shù)組應(yīng)用例題,例 輸出斐波那契級數(shù)的前20項 Dim F(20) As Integer, I As Integer F(1) = 1 : F(2) = 1 第一、第二項為1 For I = 3 To 20 第三項起每項為前二項之和 F(I) = F(I - 2) + F(I - 1) Next I For I = 1 To 20 在窗體上輸出 Debug.write (F(I) & ” , ”) If I Mod 5 = 0 Then Debug.writeline(“”) Next I,數(shù)組一維數(shù)組應(yīng)用例題,例 產(chǎn)生100個不重復(fù)的3位隨機整數(shù), 并按每行7列的格式輸出 Dim Data(100) As Integer, I%, J% Randomize() 設(shè)置隨機化種子,保證每組數(shù)據(jù)不重復(fù) For I = 1 To 100 循環(huán)產(chǎn)生100個數(shù)據(jù) Data(I) = New System.Random().Next(100,1000) For J = 1 To I - 1 與已經(jīng)產(chǎn)生的數(shù)據(jù)比較 If Data(I) = Data(J) Then 數(shù)據(jù)已存在則舍棄,重新產(chǎn)生 I = I - 1 Exit For 提前退出數(shù)據(jù)比較的循環(huán) End If Next J Next I,轉(zhuǎn) 下 頁,數(shù)組一維數(shù)組應(yīng)用例題,I = 1 : J = 1 Do While I 100 Then Exit For Debug.write (Data(I) & “ “) I = I + 1 Next J Debug.Writeline(“”) 打印換行 Loop,接 上 頁,For I = 1 To 100 Debug.write (Data(I) & “ “) If I Mod 7 = 0 Then Debug.writeline(“”) End If Next I,數(shù)組一維數(shù)組應(yīng)用例題,例 統(tǒng)計成績分布 Dim N(10) As Integer, I As Integer, X As Integer Const m = 10 For I = 1 To m X = InputBox(“請輸入“ + Str(I) + “個學(xué)生的成績“) X = Int(X / 10) 也可寫成X=X10 N(X) = N(X) + 1 Next I Debug.writeline (100 & “-“ & 100 & N(10) For I = 9 To 0 Step -1 Debug.writeline( 10 * I & “-“ & (10 * I + 9) & N(I) Next I,用For EachNext循環(huán)遍歷數(shù)組,例1 使用For語句遍歷數(shù)組 Dim pins As Integer() = 9,3,7,2 For index As Integer = 0 To pins.Length 1 Dim pin As integer =pins(index) Debug.writeline(pin) Next 例2 使用For Each語句遍歷數(shù)組 Dim pins As Integer() = 9,3,7,2 For Each pin As Integer In pins Debug.writeline(pin) Next 解讀: For Each語句聲明了一個循環(huán)變量pin,它自動依次獲得數(shù)組中每個元素的值(In是一個關(guān)鍵字)。使用For Each語句來遍歷數(shù)組更能高效處理數(shù)組。,數(shù)組排序問題(選學(xué)),1. 選擇法排序(N個數(shù)據(jù)升序) 先假設(shè)第1個數(shù)據(jù)最小,依次同第2、第3、第N個數(shù)據(jù)進行比較,一旦第1個數(shù)據(jù)大于其它值則交換。這樣,第1輪比較完畢,找出了最小數(shù)據(jù)作為第1個數(shù)據(jù)。 以第2個數(shù)據(jù)為最小數(shù)據(jù),依次同第3、第4、第N個數(shù)據(jù)進行比較,若第2個數(shù)據(jù)大于其它值則交換。這樣,第2輪交換完畢,則找出第二小的數(shù)據(jù)作為第2個數(shù)據(jù)。 依此類推,第N-1輪比較將找出第N-1小的數(shù)據(jù),剩下的一個數(shù)據(jù)就是最大數(shù),排列在最后。以6個數(shù)據(jù)為例:,原始序列:30, 20, 10, 90, 50, 60 第1輪比較結(jié)果:10 | 30, 20, 90, 50, 60 第2輪比較結(jié)果:10, 20 | 30, 90, 50, 60 第3輪比較結(jié)果:10, 20, 30 | 90, 50, 60 第4輪比較結(jié)果:10, 20, 30, 50 | 90, 60 第5輪比較結(jié)果:10, 20, 30, 50, 60 | 90,數(shù)組排序問題 (選學(xué)),例 用選擇法完成10個隨機數(shù)據(jù)的升序排序。 Const N = 10 : Dim D(N) As Integer, I%, J%, T% Randomize() For I = 1 To N D(I) = Rnd * 100: Debug.write (D(I) & “,”)排序前的數(shù)據(jù)序列 Next I Debug.writeline(“”) For I = 1 To N - 1 挑出前N-1個小的數(shù) For J = I + 1 To N If D(I) D(J) Then 數(shù)據(jù)元素交換 T = D(I) : D(I) = D(J) : D(J) = T End If Next J Next I For I = 1 To N 輸出排序結(jié)果 Debug.write (D(I) & “,”) Next I,找最小數(shù)據(jù)作為第1個數(shù)據(jù): I = 1 For J = 2 To N 這里2等價I+1 If D(1) D(J) Then T = D(1): D(1) = D(J): D(J) = T End If Next J,數(shù)組排序問題 (選學(xué)),2. 冒泡法排序(N個數(shù)據(jù)升序) 第1輪比較:從第1個元素開始,兩兩相鄰比較到N-1,值大的放在后面。比較完畢,最大的數(shù)成為第N個元素(沉底)。 第2輪比較:從第1個元素開始,兩兩相鄰比較到N-2,值大的放在后面。比較完畢,最大的數(shù)成為第N-1個元素。 依此類推,直至最后一次比較。,數(shù)組排序問題 (選學(xué)),例 用冒泡法完成10個隨機數(shù)的升序排序 Const N = 10 : Dim D(N) As Integer, I%, J%, T% Randomize() For I = 1 To N D(I) = Rnd * 100: Debug.write (D(I) & “,”) Next I Debug.writeline(“”) For I = N - 1 To 1 Step -1 大數(shù)逐個“沉底“ For J = 1 To I If D(J) D(J + 1) Then T = D(J): D(J) = D(J + 1): D(J + 1) = T End If Next J Next I For I = 1 To N 輸出排序結(jié)果 Debug.write (D(I) & “,”) Next I,最大的數(shù)成為第N個元素(沉底): I = N - 1 For J = 1 To N-1 這里N-1等價I If D(J) D(J + 1) Then T = D(J): D(J) = D(J + 1): D(J + 1) = T End If Next J,數(shù)組動態(tài)數(shù)組,1. 在VB.NET中,所有數(shù)組都是變長的,也就是說所有數(shù)組都是動態(tài)數(shù)組. 2.聲明一個數(shù)組時可以指定它的長度,但這個長度只是初始長度,可以使用ReDim語句來修改它. 3.使用ReDim語句重新定義一個數(shù)組時,不能改變數(shù)組的維數(shù),也不能改變數(shù)組的類型. 4.使用ReDim語句重新定義一個數(shù)組時,數(shù)組原有的值會丟失.但可以在ReDim語句中使用Preserve關(guān)鍵字來保持這些值. 5.如果在ReDim語句中使用Preserve關(guān)鍵字,那么只能改變最后一維的長度. 例: Dim B(4) As Integer For I = 0 To 4 B(I) = I Next I ReDim PreServe B(6),數(shù)組二維數(shù)組 (選學(xué)),1. 二維數(shù)組的定義(聲明) 二維數(shù)組由行和列組成,有兩個下標(biāo) 定義格式: Dim 數(shù)組名( 下標(biāo)1 ,下標(biāo)2 ) As 數(shù)據(jù)類型 或 Dim 數(shù)組名( ,) As 數(shù)據(jù)類型 = 值 例如,Dim Data( 5,9) As Integer 注意: 下界默認(rèn)為0 例如, Dim Salary(30,10) As Decimal 31行11列 二維數(shù)組有行、列兩維,通常需使用二重循環(huán)引用,數(shù)組二維數(shù)組 (選學(xué)),二維數(shù)組中的數(shù)據(jù)按行存儲,其引用與一維數(shù)組相似。 Dim A(2, 3) As Integer, I%, J%, C% For I = 0 To 2 For J = 0 To 3 數(shù)組賦值 A(I, J) = C : C = C + 1 Next J Next I For I = 0 To 2 輸出數(shù)組 For J = 0 To 3 Debug.Write( A(I, J) & “ “) Next J Debug.Writeline(“”) 另起一行打印 Next I,數(shù)組二維數(shù)組 (選學(xué)),2. 二維數(shù)組應(yīng)用舉例 例,過程,過程是一段程序代碼,是相對獨立的邏輯模塊。 一個完整的VB.NET應(yīng)用程序由若干過程和模塊組成。 常用的VB.NET過程有:Sub過程和Function過程。 Sub過程(子過程):完成一定的操作和功能,無返回值,通過程序調(diào)用和事件觸發(fā)而執(zhí)行,分為事件過程和通用過程。 Function過程(函數(shù)過程):相當(dāng)于用戶自定義的函數(shù),通過程序調(diào)用才能被執(zhí)行,并且可將數(shù)據(jù)處理的結(jié)果返回。 一個過程的代碼長度不要超過64K。,過程Sub過程,過程定義格式: Private|Public Shared Sub 過程名(參數(shù)表) 語 句 End Sub Private表示模塊級子過程,Public表示全局級子過程(缺省值) 。 過程名符合VB.NET標(biāo)識符的命名約定 參數(shù)表可以是空表,也可以放置若干個變量(形式參數(shù)) 。如: Public Sub Sum(X As Integer, Y As Integer, Z As Integer) Sub過程分為:事件過程和通用過程,過程Sub過程,1. 事件過程 這類過程與對象有關(guān),對象事件觸發(fā)后被調(diào)用。 事件過程的過程名由系統(tǒng)自動指定。 建立對象的事件過程: (1) 進入代碼窗口 方法1:雙擊對象 方法2:“視圖代碼窗口” (2) 選擇“對象”和“事件名稱”,系統(tǒng) 自動形成該事件過程的頭和尾 (3) 編寫該事件的程序代碼,過程Sub過程,2. 通用Sub過程 這類過程不與對象相關(guān),是用戶創(chuàng)建的一段共享代碼。 過程的名稱由用戶自己命名 建立通用Sub過程: 建立過程框架 在類的內(nèi)部,輸入過程,按回車后系統(tǒng)自動添加End Sub。 (2) 編寫該過程的程序代碼,過程Sub過程,3. 過程的調(diào)用方法 (1) 通用Sub過程的兩種調(diào)用方式: Call 過程名(參數(shù)表) 過程名(參數(shù)表) (2) 事件過程的調(diào)用 一般由事件的觸發(fā)而引起(單擊、窗體加載等) 也可以像通用Sub過程那樣調(diào)用,過程Function過程,Function過程的實質(zhì)是一個自定義函數(shù),定義格式: Private|Public Shared Function 函數(shù)過程名(參數(shù)表) As 類型 語句塊 Return 語句 End Function Private、Public及參數(shù)的含義同Sub子過程 Function過程具有函數(shù)值,由函數(shù)過程名返回。 Function過程的建立與Sub過程的建立相似,調(diào)用方法: 用Call語句 將Function返回值賦給一個變量 將Function過程的返回值用在表達式中,過程Function過程,例 計算,過程參數(shù)傳遞,在調(diào)用Sub過程和Function過程時,參數(shù)的傳遞有兩種方式:按值傳遞、按地址傳遞 1. 按值傳遞 主調(diào)過程的實參與被調(diào)過程的形參各有自己的存儲單元 調(diào)用時:主調(diào)過程的實參值復(fù)制給被調(diào)過程的形參 定義被調(diào)過程時,各形參前加ByVal 2. 按地址傳遞 主調(diào)過程的實參與被調(diào)過程的形參共享同一存儲單元 形式參數(shù)與實際參數(shù)是同一個變量 定義被調(diào)過程時,各形參前加ByRef 定義過程時,缺省的參數(shù)傳遞方式是按值傳遞,過程參數(shù)傳遞,例 參數(shù)傳遞示例,過程參數(shù)傳遞,1、地址傳遞(指針傳遞)或叫“引用” 再看一個地址傳遞參數(shù)的例子: Sub tryout(ByRef X As Integer, ByRef Y As Integer) X = X + 100 Y = Y * 6 Debug.WriteLine(“X=“ & X & “Y=“ & Y) End Sub Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Click Dim a As Integer, b As Integer a = 10 : b = 20 tryout(a, b) Debug.WriteLine(“a=“ & a & “b=“ & b) End Sub 單擊窗體后,輸出結(jié)果如下:,X=110 Y=120 a= 110 b=120,過程參數(shù)傳遞,2、在VB.NET中,值傳遞方式通過關(guān)鍵字Byval實現(xiàn)。再看前面的例子,如果用值傳遞方式來傳遞參數(shù),則運行結(jié)果不同: Sub tryout(ByVal X As

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論