《VB程序設(shè)計(jì)》PPT課件.ppt

上傳人:w****2 文檔編號:16539770 上傳時間:2020-10-10 格式:PPT 頁數(shù):57 大?。?89KB
收藏 版權(quán)申訴 舉報(bào) 下載
《VB程序設(shè)計(jì)》PPT課件.ppt_第1頁
第1頁 / 共57頁
《VB程序設(shè)計(jì)》PPT課件.ppt_第2頁
第2頁 / 共57頁
《VB程序設(shè)計(jì)》PPT課件.ppt_第3頁
第3頁 / 共57頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《VB程序設(shè)計(jì)》PPT課件.ppt》由會員分享,可在線閱讀,更多相關(guān)《《VB程序設(shè)計(jì)》PPT課件.ppt(57頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、Visual Basic 程序設(shè)計(jì)教程 內(nèi)蒙古科技大學(xué)實(shí)踐訓(xùn)練中心 第五章 VB控制結(jié)構(gòu) 5.1 算法及其描述 5.1.1 算法的概念 算法: 是解決問題的有序步驟。每一步驟都必須是確定的、可行的, 且不論何種情況,在經(jīng)過有限步驟后,算法一定能結(jié)束。 1、算法的特征 例如:求 N!,其算法可描述如下: 步驟 1:輸入 N的值; 步驟 2:設(shè)兩個變量 R、 I, I為大于等于零的整數(shù), R I!。令 I 0, R 1 步驟 3: I=I+1, R=R*I 步驟 4:判斷 I

2、三步驟,否則向下執(zhí)行 步驟 5:輸出 R,即 N! 5.1 算法及其描述 1、算法的特征 算法的有窮 性 算法的確定性 算法的有效性 有零個或多個輸入 至少有一個輸出 5.1 算法及其描述 2、算法的描述 自然語言:自然語言存在著文字冗長、有二義性,表達(dá)不確切等缺點(diǎn); 流程圖: 起止框 數(shù)據(jù)框 處理框 判斷框 流程線 N-S圖:是流程圖的發(fā)展,去掉了流程圖的流程線,全部算法都表示在 一個矩形框內(nèi)。 5.1 算法及其描述 2、算法的描述 開始 輸入 N I 0 R 1 I

3、 Y N 輸入 N I=0 R=1 I=I+1 R=R*I I

4、一組操作再返 回到條件判斷,決定是否繼續(xù)循環(huán);若不成立,跳過這組操作,執(zhí)行此結(jié)構(gòu)后面 的操作。 條件 循環(huán)體 Y N 條件 循環(huán)體 5.1 算法及其描述 5.1.2 三種基本控制語句 3、循環(huán)結(jié)構(gòu) 直到循環(huán): 首先執(zhí)行一遍要循環(huán)的操作,然后判斷條件是否成立,若成 立,則返回到這組操作的開始,重復(fù)執(zhí)行這組操作;若不成立,執(zhí)行此結(jié)構(gòu)以后 的操作。 條件 循環(huán)體 Y N 條件 循環(huán)體 5.2 選擇結(jié)構(gòu) 5.2.1 單行結(jié)構(gòu)條件語句 格式: If Then Else 功能:如果 “ 條件 ” 成立 (其值為 True)或?yàn)榉?0值,則執(zhí)行 “ 語句 1”

5、,否則 執(zhí)行 “ 語句 2”。 其中: “ 條件 ” 通常是關(guān)系表達(dá)式或邏輯表達(dá)式; “ 語句 1”和 “ 語句 2”可為簡單語句,也可為用冒號分割的復(fù)合語句; 若省略 ”Else”,則 If語句簡化為: If Then 條件 語句 (序列 ) 下一條語句 False True 條件 語句 1 語句 2 下一條語句 True False 5.2 選擇結(jié)構(gòu) 5.2.1 單行結(jié)構(gòu)條件語句 例 【 5-1】 輸入三個數(shù),輸出其中最大值 。 解題思路 :設(shè)臵一個變量 max,將第一個數(shù)賦給 max,然后依次和第二個、第三個數(shù)比較,將每

6、次 比較的大的數(shù)賦給 max。 開始 輸入 a,b,c max=a bmax max=b cmax 輸出 max False True False True max=c Dim a As Single, b As Single Dim c As Single, max As Single a = Val(InputBox(輸入第一個數(shù): )) b = Val(InputBox(輸入第二個數(shù): )) c = Val(InputBox(輸入第三個數(shù): )) max = a If b max Then max = b If c max Then max = c Font

7、Size = 12 Print Print a; 、 ; b; 、 ; c; 中最大數(shù)是: ; max 5.2 選擇結(jié)構(gòu) 5.2.1 單行結(jié)構(gòu)條件語句 例 5-2編程求函數(shù) sgn(x)的值 。 解題思路 :根據(jù)題意: x0, sgn=1 x=0, sgn=0 x 0 Then Print 1 Else If X = 0 Then Print 0 Else Print -1 5.2 選擇結(jié)構(gòu) 5.2.2 塊結(jié)構(gòu)條件語句 格式 : If Then Elseif Then

8、 Elseif Then Else End If 條件語句中的 “ 條件 ” 不但可以是邏輯表達(dá) 式 或關(guān)系表達(dá)式,還可以是數(shù)值表達(dá)式; ”語句塊 “ 中的語句不能與 “ Then”在同一行 上,否則 VB認(rèn)為是一個單行結(jié)構(gòu)的條件語句; 當(dāng)省略 Elseif子句和 Else子句時,塊結(jié)構(gòu)就 簡化為: If Then End If 5.2 選擇結(jié)構(gòu) 5.2.2 塊結(jié)構(gòu)條件語句 條件 1 條件 2 條件 n 1 語句塊 n 語句塊 1 下一條語句 語

9、句塊 2 語句塊 n 1 False False False True True True 5.2 選擇結(jié)構(gòu) 5.2.2 塊結(jié)構(gòu)條件語句 例 【 5-3】 輸入系數(shù) a, b, c,求二次方程: ax2+bx+c=0 的實(shí)根 。 d0 d 0 X1=(-b+ )/(2*a) X2=(-b- )/(2*a) False False True True 開始 輸入 a, b, c d=b*b 4*a*c d d 輸出 x1, x2 x= b/2a 無實(shí)根 輸出 x 結(jié)束 5.2 選擇結(jié)構(gòu) 5.2.2 塊結(jié)構(gòu)條件語句 例 【 5-5】 輸設(shè)計(jì)一個程序,從鍵盤

10、輸入學(xué)生的分?jǐn)?shù),統(tǒng)計(jì)其中及格的人數(shù)以 及總平均數(shù)。 解題思路 : 在窗體上建立三個文本框,用于顯示人數(shù)、成績的及格人數(shù)和總平 均數(shù),并分別編寫相應(yīng)的命令。 5.2 選擇結(jié)構(gòu) 5.2.3 多分支語句 格式: Select Case Case Case Case Else End Select 先對 “ 測試表達(dá)式 ” 求值,而后順序測試 與哪一個 Case子句中的 “ 表達(dá)式

11、表列 ” 相匹 配,找到就執(zhí)行該分支的 “ 語句塊 ” ,而后 退出該分支;,否則就執(zhí)行 “ Case Else”分支 的語句塊,然后,執(zhí)行 “ End Select”后面的 語句; “ 測試表達(dá)式 ” 可以是數(shù)值表達(dá)式或字符 串表達(dá)式,通常為變量或常量; 每個 Case子句中的語句塊可以是一行或多 行 VB語句; “ 表達(dá)式表列 ” 中的表達(dá)式必須與測試表 達(dá)式的類型相同 ; 5.2 選擇結(jié)構(gòu) 5.2.3 多分支語句 使用舉例: 若變量 x的值為 1、 3、 5、 7,則 Select Case語句使用如下: Select case x cas

12、e 1 表示當(dāng) x 1時應(yīng)執(zhí)行的語句 .. case 3 表示當(dāng) x 3時應(yīng)執(zhí)行的語句 case 5 表示當(dāng) x 5時應(yīng)執(zhí)行的語句 case else 表示當(dāng) x 1、 3、 5(即 x 7)時應(yīng)執(zhí)行的語句 End select 5.2 選擇結(jié)構(gòu) 5.2.3 多分支語句 ”表達(dá)式表列 “ 稱為域值,可以是下列形式之一: , 當(dāng) “ 測試表達(dá)式 ” 的值與其中之一相同時目就執(zhí)行該 Case子句中的語 句

13、 塊; 例: Case 2, 4, 6, 8, 10 to 當(dāng) ” 測試表達(dá)式 “ 的值落在表達(dá)式 1和表達(dá)式 2之間時(包含表達(dá)式 1 和 表達(dá)式 2的值),執(zhí)行該 Case子句的語句塊。 書寫時,把小值寫在前 面 例: Case 2 to 10 Is 當(dāng) ” 測試表達(dá)式 “ 的值滿足 ” 關(guān)系表達(dá)式 “ 指定條件時,執(zhí)行該 Case子句 的語句塊。 例: Case Is18*a ”測試表達(dá)式 “ 的值大于 18*a的值 Case Is 5 ”測試表達(dá)式 “ 的值等于 5

14、 Case Is5, 1 to 2 ”測試表達(dá)式 “ 的值 大于 5或 在 1 2之間 5.2 選擇結(jié)構(gòu) 5.2.3 情況語句 例 【 5-6】 從鍵盤上輸入學(xué)生成績,然后在文件框中顯示其等級(按 5級計(jì) 分制輸出不及格、及格、中等、良好、優(yōu)秀) 解題思路 :利用 inputbox輸入成績,根據(jù)其百分制成績轉(zhuǎn)換為 5級制成績; 0 59:不及格; 60 69:及格; 70 79:中等; 80 89:良好; 90 100:優(yōu)秀; 5.2 選擇結(jié)構(gòu) 5.2.3 情況語句 例 【 5-7】 商店售貨,按購買貨物的款數(shù)給予不同的優(yōu)惠

15、折扣,,編程計(jì) 算購貨款數(shù)。 解題思路 :利用 inputbox輸入 “ 應(yīng)付款 ” ,根據(jù)其值,折算為 “ 實(shí)付款 ” ; 購貨不足 250元,無折扣; 購貨滿 250元,不足 500元,減價 5; 購貨滿 500元,不足 1000元,減價 7.5; 購貨滿 1000元,不足 2000元,減價 10; 購貨滿 2000元,減價 15; 5.2 選擇結(jié)構(gòu) 5.2.4 IIf函數(shù)和 Choose函數(shù) 1、 IIf函數(shù) IIf函數(shù)用于執(zhí)行簡單判斷及相應(yīng)處理。 格式: IIf(條件, True部分, Fals

16、e部分 ) 功能:當(dāng) “ 條件 ” 為真時,返回 True部分的值為函數(shù)值,當(dāng) “ 條件 ” 為假 時,返回 False部分的值為函數(shù)的值; 說明: ” 條件 “ 是邏輯表達(dá)式或關(guān)系表達(dá)式; ” True部分 “ 或 ” False部分 “ 是表達(dá)式; ” True部分 “ 和 ”False部分 ” 的返回值類型必須與結(jié)果變量類型一 致; IIf函數(shù)與 If Then Else的執(zhí)行機(jī)制類似; 5.2 選擇結(jié)構(gòu) 5.2.4 IIf函數(shù) IfThenElse IIf函數(shù) If x=0 The

17、n y=0 Else y=1/x y=iif(x=0, 0, 1/x) d=b*b 4*a*c If d=0 Then Print “此方程有解 ” Else Print “此方程無實(shí)解 ” End If d=b*b 4*a*c Print IIf(d=0,”此方程有解 ”,”此方程無實(shí) 解” ) 5.2 選擇結(jié)構(gòu) 2、 Choose函數(shù) Choose函數(shù)可以替代 Select Case語句,適用于簡單的多重判斷場合; 格式: Choose(變量,值為 1的返回值,值為 2的返回值 值為 n的返回值 ) 功能:當(dāng)變量的值為 1時,函數(shù)值為 “ 值為 1的返

18、回值 ” ,依此類推,當(dāng)變 量 的值為 n時,函數(shù)值為 “ 值為 n的返回值 ” 。 說明: 變量的類型為數(shù)值型; 當(dāng)變量的值是在 1 n的非整數(shù)時系統(tǒng)自動取整; 若變量的值不在 1 n之間,則 Choose函數(shù)的值為 Null; 例: op=Choose(Nop, ”+”, ” ”, ”*”, ” ”) 則當(dāng): Nop 1時, op ”+”; Nop 2時 , op ” ”,依此類推。 5.2 選擇結(jié)構(gòu) 5.2.5 嵌套的選擇結(jié)構(gòu) 例 【 5-4】 輸入系數(shù) a, b, c,問能否構(gòu)成三角形的 3邊;若能,

19、則求此三 角形的面積 解題思路 : a, b, c構(gòu)成三角形的 3邊,必須俱備以下條件: a, b, c均為正數(shù) 即 a0 and b0 and c0; a, b, c中任意兩數(shù)之和大于第三個數(shù) 即 a+bc and a+cb and b+ca ; (3)三角形的面積公式 : p=(a+b+c)/2 s = Sqr(p * (p - a) * (p - b) * (p - c)) 5.2 選擇結(jié)構(gòu) 5.2.5 嵌套的選擇結(jié)構(gòu) 例 【 5-4_1】 設(shè)計(jì)一個登錄界面,并對輸入的用戶名和密碼進(jìn)行

20、驗(yàn)證。 假 設(shè)用戶名為: root,密碼為: “ abc123”。 解題思路 :窗體上畫兩個文本框,用于輸入用戶名和密碼,以及兩個命令按 鈕,若用戶輸入用戶名或密碼錯誤,則提示錯誤以及剩下登錄的次數(shù)。 If Text1.Text root or Text2.Text abc123 Then i = i + 1 If i < 5 Then MsgBox 錯誤!你還有 ” !=; k 5.3 循環(huán)結(jié)構(gòu) 例 【 5-9】 輸入一個班的學(xué)生成績,統(tǒng)計(jì)其中的及格人數(shù),并計(jì)算出全班的 平均分。學(xué)生人數(shù)不定,輸入負(fù)數(shù)就截止,設(shè)全班人數(shù)不超過 50人。 解題思路 :利用 Fo

21、r Next循環(huán)、 inputbox輸入成績,若輸入成績小于零,則 退出循環(huán),在循環(huán)內(nèi)求出累計(jì)總成績,以及及格人數(shù)。 5.3 循環(huán)結(jié)構(gòu) 例 【 5-10】 求 1 1/2+1/3+1/4+ +1/n。 該題通項(xiàng)為 ai=1/i ,求 。 解題思路 :首先利用 textbox或 inputbox輸入 n的值,在 For Next循環(huán)內(nèi)利 用累加,求出每個單項(xiàng)的值,以及總和。 ni ia1 Dim n As Integer, i As Integer n為項(xiàng)數(shù), i為循環(huán)變量 Dim sum As Single, a As Single sum為和, a為 1/i

22、 sum = 0 n = Val(Text1.Text) For i = 1 To n a = 1 / i sum = sum + a Next Print n; 項(xiàng)的和為: ; sum 5.3 循環(huán)結(jié)構(gòu) 5.3.2 While Wend循環(huán) While又稱當(dāng)循環(huán),根據(jù)某一條件進(jìn)行判斷,決定是否執(zhí)行循環(huán)。 格式: While 條件 循環(huán)體 Wend 開始 計(jì)算“條件”值 條件為“真”? 循環(huán)體 結(jié)束 Y N 功能: 當(dāng)給定的條件為真時,執(zhí)行循環(huán)體 ; 說明: While循環(huán)語句首先對 “ 條件 ” 進(jìn)行測試,

23、然后決定是否執(zhí)行循環(huán)體; 若 “ 條件 ” 總是成立,則不停地執(zhí)行循環(huán) 體,構(gòu)成 “ 死循環(huán) ” 。 當(dāng)循環(huán)可以嵌套,不允許交叉; 5.3 循環(huán)結(jié)構(gòu) 5.3.2 While Wend循環(huán) 例 【 5-11】 小紅今年 12歲,她父親比她大 30歲,編程計(jì)算出她的父親在幾年 后比她年齡大一倍。 解題思路 : 利用 While循環(huán)語句,循環(huán)的條件時 “ 小紅的年齡 *2父親的年齡 ”, 在循環(huán)體中,小紅的年齡累加 1,直到 ” 小紅的年齡 *2父親的年齡 “ 時,退出 While循環(huán)。 另:本題也可使用 For Next循環(huán)語句解答 。 Dim

24、age As Integer age = 12 While age * 2 age + 30 age = age + 1 Wend Print 經(jīng)過 ; age - 12; 年,小紅父女的年齡分別是: ; age + 30; age 5.3 循環(huán)結(jié)構(gòu) 5.3.3 DO Loop循環(huán) 格式 1: Do While | Until Exit Do Loop 格式 2: Do Exit Do Loop While | Until 功能: 當(dāng)循環(huán) “ 條件 ” 為真( While

25、條件)或直到指定的循環(huán)結(jié)束 “ 條件 ” 為 真之前 (Until條件 )重復(fù)執(zhí)行循環(huán)體。 5.3 循環(huán)結(jié)構(gòu) 說明: While是當(dāng)條件為 True時執(zhí)行循環(huán),而 Until則是在條件變?yōu)?True之前重復(fù) 當(dāng)只有 Do和 Loop關(guān)鍵字時,格式簡化為: Do Exit Do Loop 此時,要使循環(huán)正常結(jié)束,循環(huán)體內(nèi)應(yīng)有 Exit Do語句。 在格式 1中, While和 Until放在循環(huán)的開頭是先判斷條件,再決定是否執(zhí)行 循環(huán)體; 在格式 2中, While和 Until放在循環(huán)的尾部,是先執(zhí)行循

26、環(huán)再判斷條件,以 決定是重復(fù)循環(huán)還是終止循環(huán)。 5.3 循環(huán)結(jié)構(gòu) 例如 : 求 1 100的自然數(shù)之和 。 n=1:sum=0 Do While n100 sum=sum+n n=n+1 Loop Print “Sum=“;Sum n=1:sum=0 Do sum=sum+n n=n+1 Loop While n100 Print “Sum=“;Sum 5.3 循環(huán)結(jié)構(gòu) 例 【 5-12】 編寫程序,對任意輸入的正數(shù) n(n 3)判斷其是否是素?cái)?shù) 。 解題思路 ; 素?cái)?shù):除了 1和

27、自身外,不能被任何數(shù)整除的數(shù)。用數(shù) n依次去除 2 n 1間的各個數(shù),只要都除不盡,即為素?cái)?shù)。 Dim n As Integer, i As Integer, k As Integer rem n為判斷的正數(shù) , i為循環(huán)變量 n = Val(InputBox(請輸入一個正數(shù): )) i = 2: k = Int(n / 2) Do While i k Then Print n; 是素?cái)?shù) ; Else Print n; 不是素?cái)?shù) 5.3 循環(huán)結(jié)構(gòu) 例 【 5-13】 輸入兩個正整數(shù),求它們的最大公約數(shù) 。 解題思路 :求最大公約數(shù)的方法為 “ 輾轉(zhuǎn)相除法 ” ;如 24和 1

28、6 14和 26的最大公約數(shù)為 2 0 2 12 2 12 14 二 12 14 26 一 14和 26 24和 16的最大公約數(shù)為 8 0 8 16 二 8 16 24 一 24和 16 結(jié)論 余數(shù) r 除數(shù) n 被除數(shù) m 步驟 原數(shù) 注:程序中無比要將 m臵為最大的值, n為最小的數(shù)。 Do r = m Mod n 求被除數(shù)、除數(shù)的余數(shù) m = n 將除數(shù)賦予被除數(shù) n = r 將余數(shù)賦予除數(shù) Loop Until r = 0 5.3 循環(huán)結(jié)構(gòu) 5.3.4 多重循

29、環(huán) 在一個循環(huán)結(jié)構(gòu)的循環(huán)體系內(nèi)含有另一個循環(huán)結(jié)構(gòu),稱為循環(huán)嵌套,又稱多 重循環(huán),處于內(nèi)部的循環(huán)為內(nèi)循環(huán),處于外部的循環(huán)為外循環(huán)。 例 【 5-15】 用臺勞公式求解 Sinx的近似解 ; x, n由鍵盤輸入。 )!12(....!7!5!31 121753 )1( n xSi n x xxxx nn 解題思路 :需要用兩層循環(huán)。外層循環(huán)控制計(jì)算的項(xiàng)數(shù),內(nèi)層循環(huán)具體計(jì)算每 一個項(xiàng)的值,而后進(jìn)行計(jì)算結(jié)果的累加。 5.3 循環(huán)結(jié)構(gòu) 5.3.4 多重循環(huán) 例 【 5-16】 編寫程序,輸出 100 200間的所有素?cái)?shù)。 解題思路 :需要設(shè)臵兩層循環(huán),其中外層循環(huán)負(fù)責(zé)控制

30、取值范圍,即 100 200; 內(nèi)層循環(huán)具體判斷每一個數(shù)是否為素?cái)?shù)。 number為輸出計(jì)數(shù)器, x為輸出的素?cái)?shù), i, k為循環(huán)變量 Dim number As Integer, x As Integer, i As Integer, k As Integer number = 0 For x = 100 To 200 i = 2: k = Int(x / 2) Do While i k Then number = number + 1 If number Mod 5 = 0 Then Print x Else Print x, 每 5個素

31、數(shù)為一行 End If Next 5.4 常用算法與數(shù)據(jù)結(jié)構(gòu)一 5.4.1 累加、連乘 累加:就是在原有和的基礎(chǔ)上再加一個數(shù),并重復(fù)該操作; 連乘:在原有積的基礎(chǔ)上再乘以一個數(shù),并重復(fù)該操作; 例如 : 求 100以內(nèi)的自然數(shù)之和。其中 sum為累加和變量, i為循環(huán)控制變量 求 10以內(nèi)的偶數(shù)連乘之乘積 ; Private Sub Command1_Click() sum=0 For i=1 to 100 sum=sum+i Next Print sum End Sub Private Sub

32、 Command1_Click() p=1 For i=2 to 10 Step 2 p=p*i Next Print p End Sub 5.4 常用算法與數(shù)據(jù)結(jié)構(gòu)一 5.4.2 定位輸出 例 【 5-17】 編寫程序,打印出如下的乘積表 * 3 6 9 12 15 45 90 135 180 16 48 96 144 192 17 51 102 153 204 18 54 108 162 216

33、 19 57 114 171 228 20 60 120 180 240 解題思路 :第一行可看為標(biāo)題,具體計(jì)算可從第二行開始:需要設(shè)臵兩層循 環(huán), 外層循環(huán)負(fù)責(zé)控制行數(shù)或向內(nèi)層循環(huán)傳輸每列的第一個值,內(nèi)層循環(huán)具 體計(jì)算每列的第一個值同 3、 6、 9、 12的乘積,并顯示出來。 5.4 常用算法與數(shù)據(jù)結(jié)構(gòu)一 5.4.2 定位輸出 例 【 5-19_1】 編寫程序,打印出如下圖形 * * * * * * * * * * * * * * * * * * * * * * * *

34、 * * * * * * * * * * * * * * * * 思路一:采用單層循環(huán),每一行顯示的 tab值(列的坐標(biāo))應(yīng)依次遞加。 思路二:采用二重循環(huán),外層循環(huán)控制行數(shù)和打印位臵,內(nèi)層循環(huán)具體顯示每 一行的 *。 5.4 常用算法與數(shù)據(jù)結(jié)構(gòu)一 5.4.2 定位輸出 例 【 5-19_2】 編寫程序,打印出如下圖形 * *** ***** ******* ********* 解題思路 :采用二重循環(huán),外層循環(huán)控制行數(shù)和打印位臵,內(nèi)層循環(huán)具

35、體顯示 每一行的 *;每行顯示 *的個數(shù)與所在行數(shù)的關(guān)系為:個數(shù) 2*行數(shù) 1;每行顯 示的 tab值(列的坐標(biāo))依次遞減; Dim i, j As Integer For i = 1 To 5 控制顯示的行數(shù) Print Tab(15 - 2 * i); 每行顯示的列的起始位置 For j = 1 To 2 * i - 1 每行顯示的 *的個數(shù) Print * ; Next Print Next 5.4 常用算法與數(shù)據(jù)結(jié)構(gòu)一 例 【 5-19】 編寫程序,打印出如下數(shù)的金字塔 1

36、 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 . 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 思路:采用二重循環(huán),外循環(huán)控制行數(shù)和打印位臵,內(nèi)循環(huán)實(shí)際為 2個并列循 環(huán),分別控制打印一行的前半部和后半部。 5.4 常用算法與數(shù)據(jù)結(jié)構(gòu)一 5.4.3 窮舉法 根據(jù)提出的問題,列舉所有可能的情況,并用問題中給定的條件檢驗(yàn)?zāi)切┦?需要的,哪些是不需要的。 例 【 5-20】 算經(jīng) 中出了一道題: “ 雞翁一,值錢五;雞母一,值錢

37、三; 雞雛三,值錢一。百錢買百雞,問雞翁、母、雛各幾何? ” 解題思路 :設(shè) x, y, z分別為雞翁、雞母、雞雛的數(shù),則有: 5*x+3*y+z/3=100(元 ) x+y+z=100(只 ) 則按 x取值 0 100, y取值: 0 100,依次取值,直到滿足上式即可; Dim x, y, z As Integer FontSize = 14 Print cock, hen, chick For x = 0 To 100 For y = 0 To 100 z = 100 - x - y If 5 * x + 3 * y +

38、z / 3 = 100 Then Print x, y, z Next Next 5.4 常用算法與數(shù)據(jù)結(jié)構(gòu)一 5.4.3 窮舉法 例 【 5-25】 將一張 1元鈔票分成一分、二分和五分硬幣,每種至少 8枚,問 有多少種方案? 解題思路 :每種硬幣至少 8枚,則 1分最多有 44枚( 100 2*8 5*8) /1, 2 分硬幣最多有 26枚, 5分硬幣最多有 15枚。 則 1分幣取值: 8 44, 2分幣取值: 8 26, 5分幣取值: 8 15, 各依次取值,直到滿足: 1分幣總值 2分幣總值 5分幣總值 100分 5

39、.4 常用算法與數(shù)據(jù)結(jié)構(gòu)一 5.4.4 遞推法 又稱迭代法,就是把一個復(fù)雜的計(jì)算過程轉(zhuǎn)化為簡單過程的多次重復(fù)。每次 重復(fù)都在舊值的基礎(chǔ)上遞推出新值,并由新值代替舊值。 例 【 5-14】 求方程 f(x)=x3 2x 5=0在區(qū)域 1.5,2.5上的一個實(shí)根。要求按四 舍五入的方式精確到小數(shù)點(diǎn)后第二位。 解:本題采用牛頓迭代法: xn+1=xn f(xn)/f(xn). f(x1)=f(x1)/(x1-x2)為曲線 f(x)在 x x1點(diǎn)處的切線斜率 ,因此,若給出 x1和 f(x),先找到 f(x1),通過 f(x1)作切 線求出 x2: x2=x1 f(x1)/f(x1)

40、, x2為上訴切線與 x軸的 交點(diǎn)。求出 x2后,再找出 f(x2),通過 f(x2)作切線,與 x軸 交與 x3, f(x2)是通過 f(x2)的切線斜率 ,如此求下去, 直至接近方程真正的根。 f(x) f(x1) x1 x2 x3 f(x2) 5.4 常用算法與數(shù)據(jù)結(jié)構(gòu)一 5.4.4 遞推法 例 【 5-14】 求方程 f(x)=x3 2x 5=0在區(qū)域 1.5,2.5上的一個實(shí)根。要求按四 舍五入的方式精確到小數(shù)點(diǎn)后第二位 。 已知: f(x)=x3 2x 5,則 f(x)=3x2 2; 用 f代表 f(x), f1代表 f(x),給出 x的初值,賦給 x1, 用

41、xn+1=xn f(xn)/f(xn)式 求出 x2(程序中用 x表示),再將新求出的 x2(程序中的 x)作為下一次迭代時的 x1, 再去求新的 x2。 f(x) f(x1) x1 x2 x3 f(x2) 5.4 常用算法與數(shù)據(jù)結(jié)構(gòu)一 5.4.4 遞推法 例 【 5-26】 有一個數(shù)列,第一個數(shù)為 2,第二個是為 3,第三個是前兩個數(shù) 之和,以后每個數(shù)都是前兩個數(shù)之和,要求輸出該數(shù)列的前 N項(xiàng) 。 解題思路 :可先把前兩個數(shù)分別賦給變量 A和 B中,再計(jì)算 C A B;再將上一 輪 B的值移到 A中,將上一輪的 C的值移到 B中,再計(jì)算 C=A+B,得到的就是第四個 數(shù);

42、 再 B的值移到 A中, C的值移到 B中,計(jì)算 C=A+B,得到的就是第五個數(shù) 以此 循環(huán),以此循環(huán),就可得到第 N個數(shù); A B C 2 3 5 3 5 8 5 8 13 .. C=A+B --5=2+3 第一輪 A=3: B=5 --將上一輪的 B賦給 A、 C賦給 B 5.6 綜合應(yīng)用舉例 例 【 5-21】 求整數(shù) 351 432之間既不能被 3整除又不能被 8整除的數(shù)的個數(shù)及這 些數(shù)的和。

43、解題思路 :不能被 3整除: n mod 30;不能被 8整除: n mod 80 Dim i As Integer, n As Integer, sum As Long For i = 351 To 432 If (i Mod 3) 0 And (i Mod 8) 0 Then n = n + 1 sum = sum + i End If Next FontSize = 14 Print 數(shù)的個數(shù): ; n Print 數(shù)的和是: ; sum 5.6 綜合應(yīng)用舉例 例 【 5-22】 在 200,900范圍內(nèi)同時滿足以下兩個條件的十進(jìn)

44、制數(shù): ( 1)其個位數(shù)與十位數(shù)之和除以 10所得的余數(shù)是百位數(shù); ( 2)該數(shù)是素?cái)?shù); 問有多少個這樣的數(shù)? 解題思路 :設(shè)臵兩層循環(huán),外層循環(huán)控制取值范圍: 200 900,并取其個位數(shù)、 十位數(shù)及百位數(shù)加以計(jì)算; 如一個三位數(shù)為 abc,則其各位數(shù) c=(abc mod 10); 十位數(shù) b=(abc mod 100) 10; 百位數(shù) a=abc 100 ; 內(nèi)層循環(huán)具體判斷每個數(shù)是否為素?cái)?shù); 5.6 綜合應(yīng)用舉例 例 【 5-23】 求 100 200之間有奇數(shù)個不同因子的數(shù)有幾個? 解題思路 : n的因子是指能被 n整除的非零正整數(shù),如 6

45、的因子有: 1, 2, 3, 6. 本題采用二層循環(huán),外循環(huán)從 100到 200循環(huán),內(nèi)循環(huán)計(jì)算每一個數(shù)的因子個數(shù) ; 再在外循環(huán)判斷是否有奇數(shù)個不同的因子。 Dim i As Integer, j As Integer, k As Integer Dim number As Integer number = 0 統(tǒng)計(jì)有奇數(shù)個因子的數(shù)的個數(shù) For i = 100 To 200 k = 0 For j = 1 To i If (i Mod j = 0) Then k = k + 1 計(jì)算 i的因子

46、 Next If (k Mod 2 0) Then number = number + 1 統(tǒng)計(jì)有奇數(shù)個因子 Next Print 有奇數(shù)個不同的因子的數(shù)有: ; number; 個 5.6 綜合應(yīng)用舉例 例 【 5-24】 已知 24有 8個因子,而 24個正好被 8整除,求 100 300之間有多少個 能被其因子數(shù)目整除的數(shù)。 解題思路 :首先統(tǒng)計(jì)每個數(shù)的因子數(shù),而后判斷這個數(shù)能否被因子數(shù)整除; 需要設(shè)臵兩層循環(huán),外層循環(huán)控制取值范圍: 100 300;內(nèi)層循環(huán)具體計(jì) 算每個數(shù)的因子數(shù),而后判斷這個數(shù)能否被其因子數(shù)整除。 Dim i, j, k,

47、 number As Integer number = 0 For i = 100 To 300 k = 0 For j = 1 To i If (i Mod j = 0) Then k = k + 1 統(tǒng)計(jì)因子數(shù) Next If (i Mod k = 0) Then number = number + 1 統(tǒng)計(jì)能被因子數(shù)整除的數(shù)的個數(shù) Print I End If Next Print 能被其因子數(shù)整除的數(shù)的個數(shù)為: ; number; 個 5.6 綜合應(yīng)用舉例 例 【 5-2

48、7】 猴子吃桃子。有猴子第一天吃掉一半多一個,第二天吃掉剩下的一 半多一個, 如此,到第七天吃時,只剩下 1只桃子,問一共有多少只桃子? 解題思路 :設(shè)第 n天桃子數(shù)為 xn,前一天的桃子數(shù): xn 1,則有 xn=xn-1 ((xn-1)/2+1),即: xn-1=(xn 1)*2 ; 已知第七天只剩下 1只桃子,則可依據(jù)上式倒推到第六天剩下的桃子,以 及第五天剩下的桃子,直至第一天的桃子 。 Dim n as integer, i as integer x = 1 FontSize = 12 Print Tab(10); 第 7天桃子數(shù) :; x Print For i = 6 To 1 Step -1 x = (x + 1) * 2 Print Tab(10); 第 & I & 天桃子數(shù) & x & 只 Print Next

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!