【正文】
循環(huán) 輸出 max 當(dāng) d=1 除數(shù) d=n 大數(shù)放 m,小數(shù)放 n 輸入 m, n Private Sub Command1_Click() m = Val() n = Val() If n = 0 Or m = 0 Then MsgBox 不能為 0 Exit Sub End If If n m Then t = m m = n n = t End If d = n Do While d = 1 If m Mod d = 0 And n Mod d = 0 Then Max = d Exit Do End If d = d 1 Loop = Max End Sub d=d1 如果 m、 n都能被 d整除, 則 max ← d 輸出 max 當(dāng) d=1 除數(shù) d=n 大數(shù)放 m,小數(shù)放 n 輸入 m, n ? 設(shè)計(jì)步驟如下。 ?分析:求最大公約數(shù)可以用“ 遞增法 ” ,方法如下: ? 可能的因子從 1到 n d=d+1 如果 m、 n都能被 d整除, 則 max ← d 輸出 max 當(dāng) d=n 除數(shù) d=1 大數(shù)放 m,小數(shù)放 n 輸入 m, n Private Sub Command1_Click() m = Val() n = Val() If n m Then t = m m = n n = t End If d = 1 Do While d = n If m Mod d = 0 And n Mod d = 0 Then Max = d d = d + 1 Loop = Max End Sub d=d+1 如果 m、 n都能被 d整除, 則 max ← d 輸出 max 當(dāng) d=n 除數(shù) d=1 大數(shù)放 m,小數(shù)放 n 輸入 m, n 求兩個(gè)正整數(shù)的最大公約數(shù)。 求 m對(duì) n的余數(shù) r n ←r m ← n 輸出 n 當(dāng) r0 求得 m對(duì) n的余數(shù) r 大數(shù)放 m,小數(shù)放 n 輸入 m, n 求兩個(gè)正整數(shù)的最大公約數(shù)。若仍有 r≠0 ,則重復(fù)此過程,直到 r= 0為止。 ?分析:求最大公約數(shù)可以用“ 輾轉(zhuǎn)相除法 ” ,方法如下: ? ( 1)以大數(shù) m作被除數(shù),小數(shù) n做除數(shù),相除后余數(shù)為 r。 條件 循環(huán)體 假 真 求兩個(gè)正整數(shù)的最大公約數(shù)。因此執(zhí)行循環(huán)的 最少次數(shù)為 1。 s End Sub 后測(cè)直到型 Do … Loop循環(huán) ? 首先執(zhí)行循環(huán)體,然后判斷條件。 ? 其語法為 Do[ Until(條件)] [(循環(huán)體語句列)] Loop ? 說明: ? ( l)(循環(huán)體語句列)將被重復(fù)執(zhí)行直到條件為True 。因此執(zhí)行循環(huán)的最少次數(shù)為 1。 ? 流程圖如圖所示 n ← n+1 S ← S+n 輸出 S 當(dāng) n=100 n ← 1 計(jì)數(shù)器賦初值 S ← 0 累加器賦初值 設(shè)計(jì)步驟如下: 設(shè)計(jì)窗體界面 命令按鈕的 Click事件代碼; Private Sub mand1_Click() Dim s As Integer, n As Integer s = 0: n = 1 Do While n = 100 s = s + n n = n + 1 Loop = 1+2+3+...+l00= amp。 ?S1=0+1 ?S2=S1+2 ?S3=S2+3 ?S4=S3+4 ?… ?S100=S99+100 ?S=0+1 (0+1) ?S=S+2 (0+1+2) ?S=S+3 (0+1+2+3) ?S=S+4 (0+1+2+3+4) ?… ?S=S+100 (0+1+2+3+4+… 100) S=S+ n n=n+1 ?S :累加器 ,采用累加的方法,存放累加的和(開始為 0), ?n :計(jì)數(shù)器 ,存放 “ 加數(shù) ” ,從 1開始到 100為止。 ? 其語法為 Do[ While(條件)] [(循環(huán)體語句列)] Loop ? 說明: ? ( l)(循環(huán)體語句列)是一條或多條命令(循環(huán)體),條件為 True它們將被重復(fù)執(zhí)行。 ? VB循環(huán)結(jié)構(gòu)語句: ? Do… Loop ? While… Wend ? For… Next ? 5. 2 Do...Loop語句 ? 前測(cè)型循環(huán)結(jié)構(gòu)與后測(cè)型循環(huán)結(jié)構(gòu)。 ? 心理專家與經(jīng)濟(jì)學(xué)家會(huì)問的問題 ? 想象一下,如果有一張足夠大、足夠柔韌的紙,把它折疊 42次,會(huì)產(chǎn)生什么效果?你覺得會(huì)有多高?一個(gè)冰箱?一層樓?還是一棟摩天大廈? ? 一張厚度 ,折疊 42次就可以厚到 43萬公里 ———超出了地球到月球 38萬公里的距離 ?*2^42 = ?≈ *104 (萬) *103 (公里) *103(毫米) 50循環(huán)折紙問題 ? 一張厚度 ,折疊多少次就可以達(dá)到或超過珠穆朗瑪峰的 8848米的高度? 50循環(huán)折紙問題 ? 一張厚度 ,折疊 27 次就可以達(dá)到或超過珠穆朗瑪峰的 8848米的高度? Private Sub Command1_Click() d = Val() limit = Val() n = 0 Do While d = limit d = 2 * d n = n + 1 Loop = n = Int(d * 100 + ) / 100 End Sub ? 其他常見的循環(huán)問題 ? 求累加和 1+ 2+ 3+ ... + 100 ? 使用計(jì)算器加數(shù)用于運(yùn)動(dòng)會(huì)累計(jì)分?jǐn)?shù)或商店累計(jì)營業(yè)額等。 P102 ? Loop Structure Programming ? 循環(huán)是指在程序設(shè)計(jì)中,從某處開始有規(guī)律地反復(fù)執(zhí)行某一程序塊的現(xiàn)象, ? 重復(fù)執(zhí)行的程序塊稱為 “ 循環(huán)體 ” 。 5. 2. 1 前測(cè)當(dāng)型 Do… Loop循環(huán) ? Front Test Do...Loop Loop ? 首先判斷條件,當(dāng)條件為真( True)時(shí)執(zhí)行循環(huán)體,接著執(zhí)行 Loop 語句 , 控制轉(zhuǎn)到 Do,再次測(cè)試條件 …… , 當(dāng)條件為假( False)時(shí),終止循環(huán) ,執(zhí)行Loop語句后的語句。 計(jì)算“條件”的值 條件真? 執(zhí)行循環(huán)體 假 真 求累加和 ? 例 5- l 求累加和 1+ 2+ 3+ ... + 100 (如圖 5- 2) 。 求累加和 ? 例 5- l 求累加和 1+ 2+ 3+ ...+ 100(如圖 )。 s End Sub n ← n+1 S ← S+n 輸出 S 當(dāng) n=100 n ← 1 計(jì)數(shù)器賦初值 S ← 0 累加器賦初值 5. 2. 2 后測(cè)當(dāng)型 Do … Loop循環(huán) ? Back