




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1湖南省計算機等級考試VB程序設計輔導2007年10月計算機系劉永逸2內容提要概括性指導基礎知識、重點結構、常用標準函數、自定義函數、基本處理、邏輯表達式常用算法:窮舉法、遞推分類練習十多種常見類型(詳見下頁)31、簡單的求和問題2、等比數列及求和3、遞推問題(Excel可解)4、常見數字問題的處理5、因子問題-因子個數、和6、組合問題:不定方程求解47、高精度計算除法8、同構數9、完全平方數10、數制轉換11、素數(質數)問題12、猴子選大王5VB面向對象基本概念對象、事件、方法對象:窗體、標簽、文本框、命令按鈕、計時器、事件:Load、Unload、Chang、Click、KeyPress
2、、LostFocus、GotFocus、方法:Print、Cls、Show、Move6對象屬性Name、Caption / Text、Left、Top、Width、Height、 Enabled、Visible、 Font、 VB程序執行方式事件驅動編程機制7VB常用數據類型數值型Integer(%)、Long(&)Single(!)、Double(#)字符串型String($)變體型Variant8VB常用運算符數值運算、-(負號)、*、/、 、Mod 、 +、-字符串運算&、+邏輯運算And、Or、Not9VB常用函數系統內部標準函數取整:Int(x)求余數:a Mod b
3、求平方根:Sqr(x)絕對值:Abs(x)四舍五入:Round(x,n)其它.10用戶自定義函數邏輯函數判定:prime(x)外部函數的方法(不講)內部函數的方法(程序的一部分)見:有關素數程序設計部分注:二級必備!11VB基本輸入、輸出InputBox輸入和MsgBox輸出文本框輸入、輸出x=Val(Text1)、Text1=窗體和立即窗口輸出Print 和 Debug.PrintTab(x)、Format(x,)12VB程序基本結構與示例順序結構選擇(分支)結構If.Then Else .If.Then Else . End If13判斷成績是否合格 x = Val(Text1) If x
4、 = 60 Then Text2 = 合格 或(第2、3行為) If x 60 Then Text2 = 不合格 Else Text2 = 合格也可寫成多行形式:14多選擇(分支)結構(一)If Then ElseIf Then Else End If15判斷成績等級 Private Sub Command1_Click() x = Val(Text1) If x 60 Then Text2 = 不及格 ElseIf x 70 Then Text2 = 及格 ElseIf x 85 Then Text2 = 良好 Else Text2 = 優秀 End IfEnd Sub16多選擇(分支)結構
5、(二)Select Case Case Case Else End Select表達式列表:(三種形式,見例題)17判斷成績等級 Private Sub Command1_Click() Select Case Val(Text1) Case Is 60 Text2 = 不及格 Case 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 Text2 = 及格 Case 70 To 84 Text2 = 良好 Case Else Text2 = 優秀 End SelectEnd Sub18循環結構For . NextWhile.Wend (無退出中途語句)Do Whi
6、le.Loop (共4種形式)中途退出:Exit For/Do嵌套分支與分支循環與循環循環與分支19For循環輸出20以內的奇數Private Sub Form_Click() For k = 1 To 20 Step 2 Print k; NextEnd Sub20While循環輸出20以內的奇數Private Sub Form_Click() k = 1 While k = 20 Print k; k = k + 2 WendEnd Sub21Do循環輸出20以內的奇數Private Sub Form_Click() k = 1 Do While k = 20 Print k; k = k
7、 + 2 LoopEnd Sub22VB程序設計重點結構給出一種最常用的形式可作“模板”使用學會填空!23FOR結構For i= To Step If Then (Exit For) End If Next24程序中最基本的處理計數初值:n = 0 或 .循環處理:n = n + 1連加初值:s = 0 或 .循環處理:s = s + i 或 .25連乘初值:t = 1 或 .循環處理:t = t * i 或 .26最常用的判斷a被b整除(倍數、因子)a Mod b = 0 或 a / b = a b a是整數Int(a)=a應用:求不定方程的整數解27多條件組合為邏輯表達式x能被3整除但不能
8、被4整除x Mod 3=0 and x Mod 4)0 x是能被3或5整除的偶數x Mod 2=0 and ( or )或 x Mod 6=0 and x Mod 10=028精確與非精確編程思路精確編程:只輸出所需結果。非精確編程:輸出相關的數據,從中容易得出所需要的結果。29例:設s=2+4+6+,求s的最大值,使s= 1000 Then Exit For Next Print s - kEnd Sub32VB程序改錯考題1:計算1000以內,既能被6整除又能被8整除的數的個數。程序中有兩行有錯誤。改正錯誤,使它能輸出正確的結果。容易得到答案:100024=4133原程序Private S
9、ub Command1_Click() Dim n As Integer Dim x As Integer x = 1 n = 0 Do While x = 1000 If x Mod 6 = 0 Or x Mod 8 = 0 Then n = n + 1 End case x = x + 1 Loop Print nEnd Sub34錯誤、改正Or:AndEnd case:End If運行結果VB窗體上添加命令按鈕,再復制代碼,改錯后啟動程序,單擊命令按鈕,得結果:4135考題2:求1100中, 兩個不同的數之和能被3或7整除的“數對”的對數 (注意:3+5和5+3認為是同一“數對”) ?
10、程序中有兩行有錯誤。改正錯誤,使它能輸出正確的結果。36原程序Private Sub Form_Click() Dim n As Integer, i As Integer n = 0 i = 1 Do While i = 100 J = 1 Do While J = 100 IF MOD(I+J,3)0 OR MOD(I+J,7)=0 then n = n + 1 End If J = J + 1 Loop i = i - 1 Loop Print n / 2End Sub37錯誤、改正If中的條件:i j And (i + j) Mod 3 = 0 Or (i + j) Mod 7 = 0
11、) i=i-1:i=i+1運行結果VB窗體代碼窗口中復制程序代碼,改錯后啟動,單擊窗體,得結果:212138VB程序填空(二級)考題1:金星和地球在某一時刻相對于太陽處于某一確定位置,已知金星繞太陽一周為225日,地球繞太陽一周為365日,問兩個行星至少經過多少日仍同時回到原來的位置上?易得答案(公倍數):1642539原程序Private Sub Form_Click() Dim m0&, n0& Dim m As Long Dim n As Long Dim r As Long m0 = 365 n0 = 225 m = m0 n = n0 r = m Mod n Whil
12、e _ m = n n = r r = m Mod n Wend Print m0 * n0 / nEnd Sub40填空r0(去掉橫線!)運行結果VB窗體代碼窗口中復制程序代碼,填空后啟動,單擊窗體,得結果: 1642541考題2:找出1-1000之間的全部同構數的個數。同構數是指一個數,它出現在它的平方數的右端。例如,5的平方是25,5是25中右端的數,5就是一個同構數。同理,25也是一個同構數。42原程序Private Sub Form_click() For i = 1 To 999 j = i * i Select Case j Case Is 99 k = j Mod 10 Cas
13、e Is 9000 Then Exit For Next Print sEnd Sub52程序2Private Sub Form_Click() a = 1: s = 0 For n = 1 To 20 a = 2 * a: s = s + a Print n, a, s If s 9000 Then Exit For Next Print sEnd Sub53已知S1=1, S2=1+2, S3=1+2+4, ,求S=S1+S2+S3+S4+S20的值。#2097130可Excel中求解A1=1,B1=1,C1=1A2=2*A1,B2=B1+A2,C2=C1+B2將A2:C2填充至第20行5
14、4程序Private Sub Form_Click() s = 0: t = 0 For n = 1 To 20 a = 2 (n - 1) s = s + a t = t + s Print n, a, s, t Next Print tEnd Sub55一球從100米高處落至平地并連續反彈、落下。設每次反彈高度按4/5倍遞減,試求出最小的自然數n,使得此球從開始下落至第n次著地時在垂直方向所經過的總路程超過800米?;舅惴ǎ貉h、(連乘、)連加初值:h=100 , s=h循環:h=h*4/5 , s=s+2*h56程序Private Sub Form_Click() h = 100 :
15、s = h For n = 2 To 100 h = h * 4 / 5 : s = s + 2 * h Print n, h, s If s 800 Then Exit For Next Print nEnd Sub573、遞推問題(Excel可解)設有用26個表達式:a=1,b=1/(a+1),c=1/(b+2),z=1/(y+25),試求出z的值。#0.04基本算法:循環、單項遞推f=1,n=226 : f=1/(f+n-1)58斐波那契數列f(i):1,1,2,3,5,8, 試輸出前20項?;舅惴ǎ貉h、遞推三種方法:f(1)=1 : f(2)=1, f(n)=f(n-2)+f(n-
16、1)f1=1 : f2=1, f1=f1+f2 : f2=f2+f1f1=1 : f2=1, f=f1+f2:f1=f2:f2=f59基本解法(使用數組)定義數組:Dim f(20)循環初值:f(1)=1, f(2)=1; 循環處理:f(n)=f(n-2)+f(n-1) 60程序Private Sub Form_Click() Dim f(20) f(1) = 1: f(2) = 1 Debug.Print f(1) Debug.Print f(2) For n = 3 To 20 f(n) = f(n - 2) + f(n - 1) Debug.Print f(n) NextEnd Sub6
17、1斐波那契數列f(i):1,1,2,3,5,8,求F(45)值。 #1134903170求F(1)+F(2)+F(50) #32951280098求F(1)+F(3) +F(49) #12586269025 求10000000內最大的 #9227465 求10000000內的個數 #35均可在Excel中容易求得結果!62斐波那契數列相關問題(例1)求S=1/2+2/3+3/5+5/8+的前30項的和。#18.46f(n):1,2,3,5,8,,31項S=1/2S=S+f(n-1)/f(n), n=3,4,.,3163斐波那契數列相關問題(例2)求S=1/2+3/5+8/13+21/34+的前
18、30項的和。#18.40f(n):1,2,3,5,8,(共60項)S=1/2S=S+f(n-1)/f(n), n=4,6,8,.,6064程序Private Sub Form_Click() Dim f(60) f(1) = 1 : f(2) = 2 : s = 1 / 2 Debug.Print f(1), f(2), s For n = 3 To 60 f(n) = f(n - 2) + f(n - 1) If n Mod 2 = 0 Then s = s + f(n - 1) / f(n) Debug.Print f(n - 1), f(n), s End If Next Print F
19、ormat(s, 0.00)End Sub65三項遞推的數列一個數列,它的頭三個數為0,0,1,以后的每個數都是其前三個數的和,求此數列的前30項之和。#18947744Excel中求解:A1=0,A2=0,A3=1A4=A1+A2+A3,填充至30行單擊A列,狀態行中有求和結果664、常見數字問題的處理水仙花數:三位數,等于其各位數字之立方和。記住10000以內: 153、370、371、407考試題中,曾有四位水仙花數之說。看清題意!67水仙花數的算法是數字問題之根本!算法一:單循環(x:100999)由數x得出數字a b c ?(下頁)熟練掌握一種從數中取數字的方法算法二:三重循環(a:
20、19 b,c:09)由數字a、b、c組成數x(100999)68設x是一個三位數,百位到個位分別是a、b、c,則:a=Int(x/100)b=Int(x-100*a)/10)c=x Mod 10Int(a/b)可替換為ab,如:a=x100b=(x-100*a)1069求水仙花數之程序(一)Private Sub Form_Click() For x = 100 To 999 a = Int(x / 100) b = Int(x - 100 * a) / 10) c = x Mod 10 If x = a 3 + b 3 + c 3 Then Print x NextEnd Sub70求水仙花
21、數之程序(二)Private Sub Form_Click() For a = 1 To 9 For b = 0 To 9 For c = 0 To 9 x = a * 100 + b * 10 + c If x = a3+b3+c3 Then Print x Next c, b, aEnd Sub71設x是一個四位數,千位到個位分別是a、b、c、d,則:a=Int(x/1000) 或 x1000b=Int(x-1000*a)/100)c=Int(x-1000*a-100*b)/10)d=x Mod 10(或見下頁)72b=(x100) Mod 10c=(x10) Mod 10或b=(x Mo
22、d 1000)100c=(x Mod 100)1073求在100,999內所有不含數字0且各位數字之積被96整除的數之和。#26640a*b*c0 and a*b*c mod 96=074求123,4321內回文數的個數。#120都看作四位數abcd,兩種情況處理:a=0 and b=da0 and a=d and b=c75程序Private Sub Form_Click() For x = 123 To 4321 a = x 1000 b = (x 100) Mod 10 c = (x 10) Mod 10 d = x Mod 10 If (a = 0 And b = d) Or (a 0
23、 And a = d And b = c) Then n = n + 1 Next Print nEnd Sub765、因子問題-因子個數、和問100,200之間有奇數個不同因子的整數共有多少個?#5 基本算法:二重循環外循環:for x=100 to 200 窮舉!內循環模塊一:求x之因子個數內循環模塊二:判斷處理77程序Private Sub Form_Click() For x = 100 To 200 k = 0 For i = 1 To x If x Mod i = 0 Then k = k + 1 Next If k Mod 2 = 1 Then Print x n = n + 1
24、 End If Next Print nEnd Sub78完數一個數如果剛好與它所有的因子之和相等,則稱該數為“完數”, 如6123,則6就是個完數,求200到500之間所有的完數之和。 #496# 79程序Private Sub Form_click() s = 0 For x = 200 To 500 k = 0 For i = 1 To x / 2 If x Mod i = 0 Then k = k + i End If Next If x = k Then Print x s = s + x End If Next Print sEnd Sub 80完備數已知24有8個正整數因子(即:
25、1,2,3,4,6,8,12,24),而24正好能被其因子數8整除,求 10,100之間有多少個正整數能被其因子的個數整除。#1281多因子完備數的概念若某整數N的所有因子之和等于N的倍數,則N稱為多因子完備數,如數28,其因子1、2、4、7、14、28之和是56=2*28,28是多因子完備數。82求1,200之間有多少個多因子完備數。#4 基本算法:二重循環外循環:for x=1 to 200 窮舉!內循環功能一:求x的因子之和內循環功能二:判斷處理83最大公約數求出583573和559399的最大公約數。 #79 基本算法:單循環求出所有因子84程序Private Sub Form_Cli
26、ck() a = 583573: b = 559399 For c = 1 To b If a Mod c = 0 And b Mod c = 0 Then Print c End If NextEnd Sub85最小公倍數求出9269和8671的最小公倍數。 #268801a和b最大公約數d與最小公倍數k具有關系:a*b=d*k86程序Private Sub Form_Click() a = 9269: b = 8671 For c = 1 To b If a Mod c = 0 And b Mod c = 0 Then d = c End If Next Print a * b / dEn
27、d Sub876、組合問題:不定方程求解 大、中、小學生共36人消費,每大4元,每中2元,每小1元,共120元,問大、中、小學生人數組合有多少種可能?(每類學生學生的人數均不為0。)基本算法:三重(或二重循環)88程序(三重循環)Private Sub Form_Click() n = 0 For x = 1 To 36 For y = 1 To 36 For z = 1 To 36 If x + y + z = 36 And 4 * x + 2 * y + z = 120 Then n = n + 1 Print x, y, z End If Next z, y, x Print nEnd
28、Sub89求方程3x-7y=1在條件|x|100且|y|40下的整數解的個數。#26基本算法:二重或單循環90已知正整數A,B(假定AB),滿足A*B=5432,求S=A+B的最小值。#153 數學結論:A與B相差小其和就小基本算法:二重或單循環求因子91(勾、股、)弦數勾、股、弦(正整數) a2+b2=c2 (求組數:abc)基本算法(多重循環) c:(有固定值或循環給出) b:2c-1 a:1b-192求121,140 之間的弦數的個數。(如5是弦數:32+42=52)#8752+1002=125442+1172=125不能因此說125是2個弦數!93程序Private Sub Form_
29、Click() n = 0 For c = 121 To 140 For b = 2 To c - 1 For a = 1 To b - 1 If a * a + b * b = c * c Then Print a, b, c n = n + 1 a = c: b = c 此語句的作用是去掉重復! End If Next a, b, c Print nEnd Sub94一個特殊考題今有5羊4犬3雞2兔值錢1496,4羊2犬6雞3兔值錢1175,3羊1犬7雞5兔值錢958,,2羊3犬5雞1兔值錢861。求羊價。#177(、121、23、29 )5x+4y+3z+2w=14964x+2y+6z+
30、3w=11753x+ y+7z+5w=9582x+3y+5z+ w=861957、高精度計算除法令a=113,b=355,不考慮四舍五入,求a/b的結果中: (1)小數點后第30位數字是幾? (2)小數點后前30位數字之和是多少?答案:(1) 4 (2) 160 (算法見下頁)計算器可得32位小數!96由a、b求q、r使10*a=b*q+r基本算法循環:for i=1 to 30基本處理:模擬手工計算方法每做一次除法,得一位商和余數a=a*10q=Int(a/b) 或 a10a=a Mod b r就是下一次的a97程序Private Sub Form_Click() a = 113: b =
31、355 s = 0 For n = 1 To 30 a = a * 10 q = Int(a / b) s = s + q a = a Mod b Print q, a Next Print q, sEnd Sub988、同構數所謂“同構數”:一個數,它出現在它的平方數的右側。記住10000以內的:1、5、6、25、76、376、625、9376特點:x*x Mod m)=x m=10、100、1000、1000099程序Private Sub Form_Click() n = 0 For x = 1 To 9999 Select Case x Case Is 10 m = 10 Case I
32、s 100 m = 100 Case Is 1000 m = 1000 Case Else m = 10000 End Select If x * x Mod m = x Then Print x, x * x n = n + 1 End If Next Print nEnd Sub1009、完全平方數完全平方數x(如144=122)y=int(sqr(x) 滿足條件:x=y*y1,4,9,25,求1000以內完全平方數個數。1,4,9,16,961n=Int(Sqr(1000)101程序Private Sub Form_Click() n = 0 For x = 1 To 1000 y =
33、Int(Sqr(x) If x = y * y Then Debug.Print x n = n + 1 End If Next Print nEnd Sub102自然數對是指兩個自然數的和與差都是平方數,如17和8的和17+8=25與其差 17-8=9都是平方數,則稱17和8是自然數對(17,8)。求所有自然數對(A,B)中A-B之差的和(其中A=100, BB,且A和B均不為0)。 #509 (二級要求!)103程序Private Sub Form_Click() s = 0 For b = 1 To 100 For a = b + 1 To 100 c = Int(Sqr(a + b)
34、d = Int(Sqr(a - b) If c * c = a + b And d * d = a - b Then s = s + a - b Debug.Print a, b, a + b, a - b, s End If Next Next Print sEnd Sub10410、數制轉換求出將十進制整數98765432等值轉換為二進制形式表示后,其中數字1的個數。 #13 算法提示:單循環(2除取余法,直到余數為0)循環處理:r=x Mod 2,x=Int(x/2)計算器!105程序Private Sub Form_click() x = 98765432 p = 2 n = 0 Wh
35、ile x 0 r = x Mod p If r = 1 Then n = n + 1 End If Print p, x, r x = Int(x / p) Wend Print x, , nEnd Sub106求出將十進制小數0.5432等值轉換為二進制形式表示后,其中小數點后第15位數字。#1 算法提示:單循環(2乘取整法)循環處理:r=int(2*x),x=x-r計算器: 0.5432*215二進制107程序Private Sub Form_click() x = 0.5432 p = 2 Print x For n = 1 To 15 y = p * x z = Int(y) x =
36、 y - z Print z, x Next Print zEnd Sub10811、素數(質數)問題素數(質數)正整數P1,只有1和P兩個因子一般算法判斷在1P,有兩個因子判斷在2P-1,沒有因子判斷在2P0.5 ,沒有因子使用自定義函數(二級考生用)109例:輸出100以內的所有素數(普通算法)Private Sub Form_click() For x = 2 To 100 k = 0 For i = 2 To Sqr(x) If x Mod i = 0 Then k = 1 Exit For End If Next If k = 0 Then Print x NextEnd Sub11
37、0思考題求100以內素數個數。#25 求100, 999內素數和。#75067 求500, 2500內第25個素數#659 求3, 1000內最大的五個素數之和。#4919 111一級完畢二級繼續112判斷素數的自定義內部邏輯函數prime(x)Private Function prime(x) As Boolean If x 2 Then prime = False Exit Function End If For i = 2 To Sqr(x) If x Mod i = 0 Then prime = False Exit Function End If Next prime = TrueE
38、nd Function113求出100以內素數個數Private Sub Form_click() k = 0 For n = 1 To 100 If prime(n) Then Debug.Print n k = k + 1 End If Next Print kEnd SubPrivate Function prime(x) As Boolean If x 2 Then prime = False Exit Function End If For i = 2 To Sqr(x) If x Mod i = 0 Then prime = False Exit Function End If N
39、ext prime = TrueEnd Function114哥德巴赫猜想德國數學家哥德巴赫曾猜想:任何大于4的偶數都可以分解成兩個奇素數的和。有些偶數有多個分解式,如: 10=3+7,10=5+5。115試求6744可以分解成多少個不同的分解式:6744=A+B(A=B)#144基本算法 :主程序用單循環116主程序Private Sub Form_Click() c = 6744 n = 0 For a = 3 To c 2 Step 2 b = c - a If prime(a) And prime(b) Then n = n + 1 Debug.Print a, b End If Next Print nEnd Sub 后接函數prime(x)117雙胞胎素數若兩個素數之差為2,則稱此兩數為雙胞胎數。求出200, 1000之間的最大一對雙胞胎數的和。#1764基本算法:主程序用單循環for a=200 to 1000-2118主程序Private Sub Form_Click() For a = 200 To 1000 - 2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農村宅基地使用權互換及農產品倉儲物流設施承包協議
- 新版消防安全試題及答案
- 研發項目保密及知識產權保護補充合同
- 美團餐飲商家線上節日主題套餐營銷服務協議
- 抖音網紅流量扶持與品牌合作合同
- 人力資源市場拓展與品牌合作框架協議
- 水幕廣告幕墻設計與制作安裝合同
- 展商安全責任認定補充協議
- 海外倉儲物流配送與供應鏈優化合同
- 展會兼職安保人員崗位聘用與應急響應合同
- JTS-215-2018碼頭結構施工規范
- 山東省日照市東港區2023-2024學年八年級下學期期末數學試題
- 湖北省武漢市武昌區2023-2024學年八年級下學期期末數學試題
- 工程造價咨詢的協調配合及服務措施
- 2022-2023學年廣東省深圳市高二(下)期末數學試卷含答案
- 急診科護士崗位說明書
- 農村廢棄學校租賃合同
- 2024年杭州良渚文化城集團有限公司招聘筆試沖刺題(帶答案解析)
- 脊柱側彎手術配合
- 汽車4s店安全生產管理制度范文(20篇)
- (正式版)SHT 3075-2024 石油化工鋼制壓力容器材料選用規范
評論
0/150
提交評論