《VB控制結(jié)構(gòu)多重循環(huán).ppt》由會員分享,可在線閱讀,更多相關(guān)《VB控制結(jié)構(gòu)多重循環(huán).ppt(27頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、1,提要 多重循環(huán) 常用算法 重點 多重循環(huán) 常用算法,第4章 Visual Basic語言基礎(chǔ)5,2,4.7.5 多重循環(huán)循環(huán)嵌套,For I= 1 to 5 Step 1 Next I,For J= 1 to 3 Step 1 Next J,一個循環(huán)結(jié)構(gòu)的循環(huán)體內(nèi)包含了另一個循環(huán)結(jié)構(gòu). 嵌套一層稱為二重循環(huán) 多重循環(huán)中遇Exit For(Do),只跳出當(dāng)前一層循環(huán).,3,討論多重循環(huán),內(nèi)、外循環(huán)的循環(huán)變量不可同名. 內(nèi)、外循環(huán)不可交叉 (外循環(huán)完全包含內(nèi)循環(huán)). 執(zhí)行次數(shù) 當(dāng)外循環(huán)執(zhí)行一次,內(nèi)循環(huán)全部執(zhí)行. 內(nèi)循環(huán)執(zhí)行總次數(shù)=外循環(huán)次數(shù)內(nèi)循環(huán)次數(shù),錯誤,正確,,,,,,,4,For
2、i=1 to 6 step 1 Print Next i,For i=1 to 6 step 1 Print ; Next i,問題1: 要求利用循環(huán)結(jié)構(gòu)在一列打印6個“”,,問題2:要求利用循環(huán)結(jié)構(gòu)在一行打印6個“”, 如何修改?,歸納:分隔符“;”使多個內(nèi)容一個個緊跟著打印輸出,,5,For k=1 To 3 Next k,For i=1 to 6 Print ; Next i Print,問題3: 打印3行,每行6個“”,如何解決?,,For i = 1 To 6 Step 1 Print ; Next I Print For i = 1 To 6 Step 1 Print
3、 ; Next i Print For i = 1 To 6 Step 1 Print ; Next i,循環(huán)嵌套結(jié)構(gòu),結(jié)論 單層循環(huán):控制一行上的所有列,采用“緊湊”方式輸出; 雙層循環(huán):內(nèi)循環(huán)控制一行上的所有列,外循環(huán)控制所有行.,6,For I = 1 To 9 For J= 1 To 9 Next I End Sub,For J= 1 To 9 Print J; x; 1; =; 1*J; Next J,示例: 打印九九乘法表.,,Print J; x; 1; =; 1*J;,Print J; x; I; =; I * J;,Print,輸出一行所有列之后能換行,7,Fo
4、r I = 1 To 9 For J= 1 To 9 Print J; x; I; =; I * J; Next J Print Next I,思考: 打印上三角或下三角程序如何改動?,,Print Tab(12 * (J - 1)); J; x; I; =; I * J;,說明:Tab(n)函數(shù)后項內(nèi)容在第n個字符位上輸出,I,8,課后任務(wù): 打印金字塔__(選做),Private Sub Form_Click() For i = 0 To 8 Print Tab(27 - 3 * i); For j = 1 To i Print j; Next j For j = i
5、 + 1 To 1 Step -1 Print j; Next j Print Next i End Sub,,,9,課堂思考,素數(shù)是一個大于2且只能被1和本身整除的整數(shù). 判別一個數(shù)n是否為素數(shù)的方法: 對于n 從 i=2,3,,n-1判別n能否被i整除,只要有一個能整除,n不是素數(shù),否則n是素數(shù)。 算法1: 素數(shù)不能被2n-1的其中一個整數(shù)整除 優(yōu)化算法1 :素數(shù)不能被2n/2的其中一個整數(shù)整除 優(yōu)化算法2 :素數(shù)不能被2Sqr(n)的其中一個整數(shù)整除,問題: 判斷一個數(shù)n是否為素數(shù),10,判斷一個數(shù)n是否為素數(shù)?,For i=2 to n-1 if n mod i=0 then
6、Exit For 被整除 Next i,Exit For 退出當(dāng)前循環(huán),If i n-1 then Print n;“是素數(shù)” Else Print n;“是非素數(shù)” End if,11,For n = 101 To 300 Step 2 Next n,要求:輸出100300之間的所有素數(shù).,For i = 2 To Int(Sqr(n)) If n Mod i = 0 Then Exit For Next i If i Int(Sqr(n)) Print n;“是素數(shù)”,課后任務(wù)1,12,1.最大、最小值 課本P12 (打擂臺) 若干數(shù)求最大值, 一般先假設(shè)第一個數(shù)為最大值初值; 然
7、后將剩余的每一個數(shù)與最大值比較, 若該數(shù)大于最大值, 將該數(shù)替換為最大值;依次逐一比較.(求最小值:方法相同),Dim x%,Max% x = Int(Rnd * 101 + 100 ) Max = x For i = 2 To 5 x = Int(Rnd * 101 + 100 ) If x Max Then Max = x Next i Print 最大值=; Max,問題: 隨機產(chǎn)生5個100200之間的整數(shù),求最大值.,4.8 常用算法,若求最小值和平均值?,13,計算1100的3或7的倍數(shù)的和,計算310的乘積,思考:若把變量 S 的初值語句放置在循環(huán)體內(nèi)的首行位
8、置,程序運行時會產(chǎn)生什么情況?S = ?,2.累加、連乘、計數(shù)__課本P12,S= 0 For I = 1 To 100 If I Mod 3 = 0 Or I Mod 7 = 0 Then S = S + I k = k + 1 End If Next I Print S,k,S= 1 For I =3 To 10 S = S * I Next I Print S,計數(shù)器,累加器,連乘器,S= 0 If I Mod 3 = 0 Or I Mod 7 = 0 Then S = S + I k = k + 1 End If,,,,,14,分析: 每一項和每次累加之和都是
9、變化量 因此,需要兩個變量 用T表示每一項的值:T=T+1 用S表示累加之和:S=S+T 循環(huán)終止條件: 循環(huán)次數(shù)n 初始化: S=0,回顧: 計算 s=1+2+3++n,Private sub Form_Click( ) Dim I% , S%, T%,n% T為每一項 n=val(Inputbox(“n=”)) S=0 For I=1 To n T=T+1 S=S+T Next I Print “S=”;S End Sub,T=I,S=S+I,,s=1234 n,S=n!,S=1 For I=1 To n S=S* I Next I,由此可見 累加問題: 公式 S=S+T
10、;初值 S=0 連乘問題: 公式 S=S*T ; 初值 S=1,15,例: 計算 s=11/21/3 1/n,分析: T表示每一項: T = 1/n S 表示連乘的值: S = S * T 初始化: S= 1 思考: 能否交換兩者次序 即: 先連乘,后產(chǎn)生新一項? 而令初值T=第一項,S=,T=,S * T,,S=,T=,S * T,,B=1: A=n,課堂思考,S=,T=,S * T,,T可理解為通式,,16,課后任務(wù)2__(實驗),要求:計算的近似值,的計算公式為:,S=,T=,S * T,,觀察 當(dāng)n=10時,p = ? ;當(dāng)n=50時,p = ? ;當(dāng)n=100時,p
11、 = ?; 當(dāng)n=10000時,p = 比較精確. 可見該公式收斂較慢.,(2*n)2 / ((2*n-1)*(2*n+1)),B=(2*n)2 : A=(2*n-1)*(2*n+1),,從第二項開始才有規(guī)律可循,思考: 初值S=? T=?,17,Private Sub Form_Click() Dim S#, T#, i 各項逐項相加(累加): S=S+T 某一項T=B/A : B=-B , A=A+2,,S=,T=,S + T,,B=-B : A=A+2,Do While Abs(T) = 0.0001,Loop,A=1: B=1: T=??? : S=???,課堂思考,19,例:求自然對
12、數(shù)e的近似值,要求直到最后一項t的值小于0.00001,近似公式為:,分析: 循環(huán)結(jié)束:根據(jù)最后一項 T<0.00001來控制 各項逐項相加(累加): S=S+T 某一項T=B/A : B=1 A=I! (A=A*I :I=I+1),S=,T=,S+T,,A=A*I : I=I+1,思考: 初值T=? : s=?,,從第二項開始才有規(guī)律可循,20,Private Sub Form_Click() Dim i%, n S End Sub,,21,累加/連乘算法__小結(jié),累加 初值:S=0, T=第一項 通用公式: S=S+T : :T=B/A 連乘 初值:S=1, T=第一項 通用公式: S=S
13、*T : :T=B/A 說明: T=B/A中的A或B均可為常量或變量表達式 若A=1, 則T=B 若B=1, 則T=1/A,22,設(shè)小雞x只、公雞y只、母雞z只,列出方程: x+y+z=100 0.5x+2y+3z=100 可見,三個未知數(shù),兩個方程,此題有若干個解。 可窮舉X、Y、Z的每一種取值,符合就是其中一種方案,3.窮舉法課本P12: 列舉各種可能情況,找出符合要求的,Private Sub Form_click() For x = 1 To 100 For y = 1 To 100 For z = 1 To 100 If x * 0.5 + y *
14、 2 + z * 3 = 100 And x +y + z = 100 Then Print x, y, z End If Next z Next y Next x End Sub,,問題: 100元買100只雞, 小雞每只0.5元,公雞每只2元, 母雞每只3元, 可買公、母、小雞各多少只?,23,課外思考 勾股定理中3個數(shù)的關(guān)系是:a2+b2=c2。編寫程序,輸出20以內(nèi)滿足上述關(guān)系的整數(shù)組合,例如3,4,5就是一個整數(shù)組合。,24,4.遞推法 (課本P11),猴子吃桃子問題:猴子摘下若干個桃子,第一天吃了桃子的一半多一個,以后每天吃了前一天剩下的一半多一個,到第十天
15、吃以前發(fā)現(xiàn)只剩下一個桃子,問猴子第一天共摘了幾個桃子?,Dim day As Integer, x As Integer, y As Integer x = 1 For day = 9 To 1 Step -1 y = (x + 1) *2 前一天的桃子數(shù)是第2天桃子數(shù)加1的2倍 x = y Next day Print x,分析:此問題屬于“倒推”問題,先從最后一天推出倒數(shù)第二天的桃子,再從倒數(shù)第二天的桃子推出倒數(shù)第三天的桃子 設(shè)第n天的桃子為x,第n-1天的桃子為y, 前一天的桃子數(shù)為: y=(x+1)2,25,1. 多重循環(huán)的內(nèi)外循環(huán)之間的聯(lián)系 2. 常用算法:累加、最值、窮舉、素數(shù)等,本節(jié)小結(jié),26,循環(huán)控制結(jié)構(gòu)常見錯誤,1.不循環(huán)或死循環(huán)的問題 主要是循環(huán)的條件、初值、終值、步長的設(shè)置有問題 2.循環(huán)結(jié)構(gòu)中缺少配對的結(jié)束語句 For 缺少配對的Next 3.循環(huán)嵌套時,內(nèi)外循環(huán)交叉 4.累加、連乘時,存放累加、連乘的變量賦初值問題,27,課后任務(wù)3,課后習(xí)題P56一.選擇題 P61二.填空題 P66三.編程題(3 4) 實驗四 P21實驗案例一 P22 三.實驗內(nèi)容(3),