算法與程序設計示例與練習_第1頁
算法與程序設計示例與練習_第2頁
算法與程序設計示例與練習_第3頁
算法與程序設計示例與練習_第4頁
算法與程序設計示例與練習_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第一部分:順序結構三、用編程語言描述用計算機語言來描述算法。特點:計算機可以識別并執行,但是不同型號的計算機或編程語言指令和代碼則不盡相同。VB主要代碼如下:Dim R As DoubleDim s As DoubleR = TextBox1.Text 此句等同于偽代碼中input R,為輸S = 3.14 * R * R 入語句Label2.Caption = "圓面積為:" & S 此句等同于偽代碼中print ,為輸出語句四、用偽代碼描述:偽代碼是介于流程圖和編程語言間的一種算法描述方式。特點:不能為計算機識別,但卻可以十分明確的描述算法。Read(r) 這句

2、也可寫做input(r)Sß3.14*r*r 也可寫作s=3.14*r*rWrite(“圓面積為S”,S) 這句也可寫做print(“圓面積”,S)注:以后教學中如不特別注明代碼類型,藍色代碼為偽代碼,紅色則為VB代碼。例一:輸入一個圓的半徑,求其面積:一、 自然語言方式用人的語言描述算法。特點:計算機無法識別,但人容易理解,但不精確。(比如一盒酥,也可以讓人理解成一人一口酥)1 輸入一個圓的半徑R2 面積S=PI*R*R3 輸出圓的面積S二、 流程圖方式用圖形符號描述算法。特點:計算機無法識別,但對人而言則顯得精確和直觀。輸入圓半徑R圓面積S=PI*R*R輸出面積SEndstart

3、練習:見算法設計p10上圖1.3的流程圖,寫出偽代碼,并嘗試用VB來實現算法。偽代碼:Input aInput bS=a*bPrint S提示:vb 主要代碼如下,Dim a, b, s As Integera = TextBox1.Textb = TextBox2.Texts = a * bLabel3.Caption = Label3.Caption & s練習2:輸入兩個數分別給變量a,b;試寫出一個交換a,b變量值的算法,要求用流程圖和偽代碼描述算法。偽代碼如下:Input A,BC=AA=BB=CPrint a,b第二部份:分支結構例二:從鍵盤輸入二個數,比較后,輸出較大者。

4、算法描述:輸入a,ba>b輸出a的值輸出b的值EndstartTRUEFALSE偽代碼:Input a,bIf a>b thenPrint aElsePrint bEnd ifVb主要代碼VB主要代碼如下:Dim a As IntegerDim b As Integera = TextBox1.Textb = TextBox2.TextIf a > b Then Label1.Caption = aElse Label1.Caption = bEnd If例三:求一元二次方程的解(算法P19)start輸入系數a,b,cd=b*b-4*a*cd>=0d<>0

5、輸出無實數解X1=(-b)/(2*a)x1=(-b)+sqr(d)/(2*a)x2=(-b)-sqr(d)/(2*a)輸出二個解x1,x2輸出一個解:x1endFTFT注:求平方根可以用sqr(),或sqrt()函數;部份函數說明部份運算符及函數作用示例sqr(),sqrt()求平方根Sqrt(4)=2mod求余數運算符,或取模運算符7 mod 2=1Int()取整函數(不四舍五入)Int(4.96)=4Abs()取絕對值函數Abs(-5)=5求幾次方23=8 , 34=81sin(),cos().三解函數Sin(90)=1偽代碼如下:Input a,b,cd=a*a-4*a*cif d>

6、;=0 thenif d<>0 thenx1=(-b+sqr(d)/(2*a)x2=(-b-sqr(d)/(2*a)print x1,x2elsex1=(-b)/(2*a)end ifelseprint “無實數解”end if練習:地鐵票價問題:如果從出發地到目的地經過的站數不超過3站,則票價為10元;如果超過3站,則票價在10元的基礎上,每多經過一站則增加2元。畫出流程圖并寫出偽代碼。Input xIf x>3 thenY=10+(x-3)*2ElseY=10End ifPrint y(試一試:將此題用VB來實現)Private Sub CommandButton1_Cl

7、ick()Dim x, y As Integerx = InputBox("請輸入一個站數", "輸入站數") 注意input語句用法If x > 3 Then y = 10 + (x - 3) * 2Else y = 10End IfLabel1.Caption = "票價為:" & yEnd Sub練習:西瓜價格為1.2元/千克,若一次購買大于100千克小于200千克著價格為0.9元/千克;若一次購買200千克及以上著價格為0.8元/千克;要求(1):輸入西瓜重量(千克),計算并輸出應付金額。要求(2):寫出偽代碼補

8、充:IF語句的另一種簡化寫法(無else語句)第三部份 循環I. 當循環型Do loop 語句的格式格式一:Do while <條件>循環體Loop功能:Do while loop語句,當條件表達式為true時,執行循環體,否則退出循環。特點:先判斷,后循環(存在0次循環的可能)II. 直到循環型功能:Do loop until語句,執行循環體,當條件表達式為false時,繼續執行,否則退出循環。特點:先循環再判斷(最少會進行一次循環)當循環示例例四:編程計算s=1+2+3+5s=0i=1VB主要代碼如下:(此處示例的是從1加到n,n是鍵盤輸入的)Dim i, s, n As In

9、tegern = TextBox1.Texti = 1s = 0Do While i <= n s = s + i i = i + 1LoopLabel2.Caption = "從1加到" & n & ",結果為" & sdo while i<=5s=s+ii=i+1loopprint s說明:上圖先用加到五以簡化分析,上面的表格是分析算法的一種手段,叫列表法,以跟蹤并分析算法流程的功能。在列表中,要注意每一次循環時,每個變量是如何變化的。變量說明:i:計數器(初值為1,每循環一次值就加1)s:累加器,每循環一次,其原

10、來的值就加上i;思考:如果將這題改為為1+2+3.+100,則流程圖中改如何改動?練習:如果題改為求1*2*3*100,求結果,例出流程圖和寫出偽代碼。練習:求1+1/2+1/3+1/4+.前20項之和,寫出流程圖及偽代碼直到循環型示例例五:從鍵盤輸入一串密碼,如果正確(假定密碼是”abc123”),則顯示“你好”,否則要求重新輸入。START輸入密碼密碼正確?輸出“你好”EndFTDoInput passLoop until pass=”abc123”Print “你好”VB實現Private Sub CommandButton1_Click()Dim pass As StringDo pa

11、ss = InputBox("請輸入密碼", "密碼驗證")Loop Until pass = "abc123"Label1.Caption = "你好"End Sub算法實例:(1) 枚舉算法例題一: 尋找并打印1到1000以內的所有能夠被3整除的自然數。基礎知識回顧: Mod:求余算術運算符 示例:9 mod 2=15 mod 7=56 mod 3=0 i=1Do while i<=1000if i mod 3 = 0 thenprint iend ifi=i+1loop觀察并回答1、這個題目中循環共進行

12、了多少次?2、判斷共進行了多少次?總結 這個程序對從1到1000每一個數都進行了判斷。即假設每一個數都是可能的解,對每一個可能的解都作判斷,最后輸出正確的解。 VB主要代碼如下:Dim N, i As IntegerN = TextBox1.TextTextBox2.Text = "" 想一想:為什么要加上這步?如果去掉會怎么樣?i = 1Do While i <= N If i Mod 3 = 0 Then TextBox2.Text = TextBox2.Text & i & vbCrLf vbCrLf代表換行符 End If i = i + 1L

13、oop注意:此題中text2要設置如下屬性屬性名值LockedTrueMultiLinetrueScrollBars2-fmScrollBarsVertical例題二一張單據上有一個5位數號碼,它的千位和百位的數字已被涂抹得模糊不清,如下所示; 另一方面,我們知道這個數能被57或67除盡。請設計一個算法,找出該單據原有的可能號碼及個數。提出問題:1、總共有多少可能的解,這些解分別是什么?2、如何檢驗正確的解?3、這種把所有可能情況都列舉出來并檢驗的求解算法稱為枚舉法;反之如果可以把條件和結果之間的關系用公式直接表示的算法,稱為解析法,比如之前講過的地鐵票價問題等。 分析: (1) 在這個5位數

14、的千位和百位上,填上2個數字,則可以形成一個可能的5位數解 n (1004719947)。 (2) 將這未知的2個數字看作一個二位數 i , 則 n=10047+i*100,而i 的取值范圍是 0,99 。 (3) 判斷當 i 取遍 0,99 時所得的每個 n 是否是真正解, 即 n 是否能被 57 或 67 整除。 (4) 若 n 是真正解,則輸出 n 的值,并在計數器 C (記錄解的個數) 中計數。計數器 C 置初值: C=0i=0i<100n=10047+i*100 n mod 57=0 or n mod 67=0計數器C記數: C=C+1i=i+1NYY開始結束輸出真正解n的值輸

15、出計數器C的值Nc=0i=0do while i<=99n=10047+i*100if n mod 57=0 or n mod 67=0 thenprint nc=c+1end ifi=i+1loopPrint cEnd 第四部份 基本算法實現數組變量:是由多個普通變量組成的一個順序;數組中的所有變量擁有共同的名稱,用下標來區分數組中的每一個成員,而數組中的成員又稱為數組元素:數組的定義:Dim a(10) as integer定義一個變量名為a的數組,有十個元素組成;數組元素的引用:a(1)=3 數組中的第一個元素賦值為3a(2)=5 數組中的第二個元素賦值為5a(3)=a(1)+a(

16、2) 數組中第三個元素的值為前二個元素之和,值為8例1:輸入十個整數,用數組保存,打印出數組順序并求出總和;VB代碼:Dim a(10) As IntegerDim i, s As Integeri = 1s = 0Do While i <= 10 a(i) = InputBox("請輸入一個數:") s = s + a(i) i = i + 1Loopi = 1Do While i <= 10 Label1.Caption = Label1.Caption & a(i) & "," i = i + 1LoopLabel2.C

17、aption = s例2:對數組a求最大值(假設有五個元素)Vb代碼:Dim a(5) As Integera(1) = 3a(2) = 6a(3) = 7a(4) = 5a(5) = 1上面代碼定義僅僅定義一個五元素數組,此部份不包含于流程圖內Dim i, max As Integeri = 2max = a(1)Do While i <= 5 If a(i) > max Then max = a(i) End Ifi = i + 1LoopLabel2.Caption = max練習:把上題改成求最小值的話,流程圖和代碼該如何實現。關于冒泡法排序,以講解排序思路為主,會說出每輪

18、排序后的情況;而代碼不要求掌握;此節的講解可以采用冒泡法排序.ppt,并輔以全A計劃p111頁上第20題冒泡法實現主要VB代碼:i = 1Do While i <n j = n Do While j > i If d(j) < d(j - 1) Then tmp = d(j) d(j) = d(j - 1) d(j - 1) = tmp End If j = j - 1 Loop i = i + 1Loop(注:n值為數組長度)冒泡法排序算法流程圖(升序(由小到大)排列)關于冒泡法的總結:1、 對n 個元素的數組而言,總共需要排n-1輪;2、 第i輪排序時,則需要比較n-i次

19、如果你理解上述兩點,對冒泡法就算是掌握了。練習:1、如果把上題改成按降序(由大到小)排列,則修改流程圖中何處?如何改?2、有一數組序列:3,9,11,20,35,4,7,6采用冒泡法排序(升序),經過第一輪排序后,其序列是怎樣的?對分法對分法是快速查找的一種手段,它的速度遠高于一般的順序查找;但是對分法查找有個前提,就是數組中所有的元素已經排序好;注意,n 值為數組長度VB主要代碼:i = 1j =ndo While (i <= j) m = Int(i + j) / 2) If d(m) = myKey Then Label2.Caption = "你要查找的數:"

20、 & myKey & "是第" & m & "個數" Exit Sub Else If d(m) < myKey Then i = m + 1 Else j = m - 1 End If End Ifloop Label2.Caption = "該數沒有找到!"以書上的數的序列2,5,7,8,15,17,22,25,37,42,55,67,72,75,87,92為例進行驗證。思考:1,二分法查找為什么快?原因在哪。因為二分法不同于順序查找,不是一個個的找;而是利用排序后數組的特點,不斷縮小查找范圍

21、以達到快速查找的目的;2、有一個序列3,9,12,24,46,51,如果要查找9這個數,那么,會折半查找(比較)幾次?分析如下:第一次查找時,i=1,j=6,則m=int(1+6)/2)=3而d(3)為12 ,大于被查找數9,所以j=m-1=2然后進行第二次查找:i=1,j=2,m=int(1+2)/2)=1d(1)=3,小于9,故i=m+1=2然后第三次查找,i=2,j=2;m=int(2+2)/2)=2然后d(2)=9,說明找到,并輸出此時的數組下標位置m,為2明顯看出,在此題中,查找和比較的次數總共是三次,被查找數位置是第二個;請掌所第二題的分析方法,此題會考中必考!附錄:一、 vb中數

22、據類型的說明:1、 常量表示一個不變的字面量。如0,123,a,P,”Tom”,3.14.2、 變量變量是用來代表一項數據的名稱。電腦會在內存中為每一個定義的變量設置一個存放的位置,根據變量的類型開辟相應大小的空間。變量中的數據可以隨程序需要而變化。注意:變量在使用前,必須用一個常量或表達示來賦值。否則程序要么出錯,要么出現意想不到的結果。變量的賦值:A=1 把常量1賦給變量AB=A+1 把變量A的值加上1后給B,A+1是一個表達式(表達式是由常量,變量及數學符號組成的一個式子;表達式經過計算后,必須有一個常量值;最簡單的表達式可以就是一個常量或變量)C=”Tom”注意:C是一個字符串變量D=

23、99.9999 3、變量的命名長度在255個字符之內第一個字符為英文,其他字符可以使用數字、字母等部分關鍵字(VB內部使用過的,如mod)不能作為變量名,如print,let,mod等4、變量的類型(部分如下)integer整數2個字節-3276832767long長整數4個字節-231231-1double 浮點數(實數)8個字節 -5.0*103241.7*10308string(字符串型) 如”Peter”,”老港中學” 注意:字符串型的值必須用雙引號括起來。Char(字符型)如a,A,0,9 注意:字符型的值必須用單引號括起來。6、變量的定義在VB中變量必須先定義再賦值變量定義的方法:

24、Dim 變量名 as 類型示例Dim name as stringDim age as integerName=”張三”Age=18二、VB中的運算類型(1)算術運數:整數與實數類型的運算a=3運算符含義優先級示例結果乘方1a29-負號2-a-3*乘3a* a* a27/除310/a3.3333333333整除410a3Mod取模510 Mod a1+加610+a13-減7a-10-7(2)關系運算:對數值或字符比較大小的運算運算符含義示例結果=等于"ABCDE"="ABR"False>大于"ABCDE">"AB

25、R"False>=大于等于"bc">="大小"False<小于23<3False<=小于等于"23"<="3"True<>不等于"abc"<>"ABC"True注:關系運算的值只有二種true(成立),false(不成立)1)   如果兩個操作數都是數值型,則按其大小比較2)   如果兩個操作數都是字符型,則按字符的ASCII碼值從左到右一一比較3)   漢字字符大于西文字符(3)邏輯運

溫馨提示

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

評論

0/150

提交評論