常用算法總結(jié)2010_第1頁(yè)
常用算法總結(jié)2010_第2頁(yè)
常用算法總結(jié)2010_第3頁(yè)
常用算法總結(jié)2010_第4頁(yè)
常用算法總結(jié)2010_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、VB常用算法總結(jié) 2010-05-08 07:21:13| 分類(lèi): 計(jì)算機(jī)等級(jí)考試二 | 標(biāo)簽: |字號(hào)大中小 訂閱 本人多年一直在輔導(dǎo)計(jì)算機(jī)等級(jí)考試二級(jí)VB,以下為整理的VB常用算法總結(jié),在輔導(dǎo)中是必須要重點(diǎn)掌握的,非常實(shí)用,希望對(duì)你的學(xué)習(xí)也有幫助。在學(xué)習(xí)中有需要幫助的網(wǎng)友可以發(fā)送郵件至 hongse_yaolan。 常用算法總結(jié)一、變量值的交換算法思想:若交換兩個(gè)變量的值,必須引入第三個(gè)新的變量進(jìn)行傳遞。以下代碼是錯(cuò)誤的:X=12 :Y=34 :X=Y :Y=X正確的代碼是:X=12 :Y=23 :T=X :X=Y :Y=T二、判斷一個(gè)數(shù)是否能被另一個(gè)數(shù)整除算法思想:可以用整除的定義(余數(shù)

2、為0)或X除以Y等于X整除Y等表達(dá)式進(jìn)行判斷。條件表達(dá)式可以為:X mod Y=0 或 X Y=X/Y 或 Int(X/Y)=X/Y如果以上條件表達(dá)式為T(mén)rue,則表示X能被Y整除。三、累加、階乘、計(jì)數(shù)和求平均值算法思想:使用循環(huán)語(yǔ)句,并用一個(gè)變量存放累加的中間及最終結(jié)果。注: 累加求和時(shí)變量初值為0,計(jì)算階乘時(shí)變量初值為1。統(tǒng)計(jì)個(gè)數(shù)(計(jì)數(shù))時(shí)可用一個(gè)變量作為統(tǒng)計(jì)個(gè)數(shù)的累加變量,每次加1即可。求平均值算法思想是先求和,再除以個(gè)數(shù)。條件求和(或計(jì)數(shù)):在循環(huán)語(yǔ)句中加入IfEnd If判斷語(yǔ)句。 例題:計(jì)算1到10之間所有整數(shù)的累加和以及10!。n=10sum=0 累加求和時(shí),變量的初值一定為0p

3、rod=1 累乘(連乘)時(shí),變量的初值一定為1For i=1 To n sum=sum+i prod=prod*iNext iPrint sum,prod 例題:統(tǒng)計(jì)0100之間能被3整除的數(shù)的個(gè)數(shù)、累加和及其平均值。 s=0 n=0 For i=0 To 100 If i mod 3 =0 Then s=s+i n=n+1 End If Next i Print n,s,s/n四、對(duì)數(shù)組中的元素逐一進(jìn)行操作算法思想:在VB中,對(duì)于數(shù)組中元素的操作,往往使用到For循環(huán)。通用代碼為:Dim 數(shù)組名(下標(biāo)下界 To 下標(biāo)上界)For i=LBound(數(shù)組名) To UBound(數(shù)組名) 數(shù)組

4、名 ( i ) Next i通過(guò)以上循環(huán),可以對(duì)數(shù)組中所有元素逐一操作。注:1) LBound函數(shù):返回?cái)?shù)組的下界 UBound函數(shù):返回?cái)?shù)組的上界2)如果數(shù)組上界和下界已經(jīng)確定,可以不使用函數(shù),直接指明即可。例如Option Base 1 Dim a(100) As IntegerFor i=1 To 100 a ( i ) Next i3)對(duì)于二維數(shù)組,要使用For循環(huán)的嵌套實(shí)現(xiàn)對(duì)數(shù)組中元素的操作,其中外層循環(huán)變量控制第一維下標(biāo)的變化,內(nèi)層循環(huán)變量控制第二維下標(biāo)的變化,例如:Option Base 1 Dim a(2,3) As IntegerFor i=1 to 2 For j=1 to

5、 3 a (i,j) Next jNext i例題:1對(duì)下標(biāo)為偶數(shù)的元素進(jìn)行處理的程序代碼Option Base 1For i=1 to UBound(a) 循環(huán)變量i可代表數(shù)組元素的下標(biāo)If i mod 2 =0 Then a (i) End If Next i2對(duì)數(shù)組元素中數(shù)據(jù)為偶數(shù)的元素進(jìn)行處理Option Base 1For i=1 to UBound(a) 循環(huán)變量i代表數(shù)組元素的下標(biāo)If a(i) mod 2 =0 Then a (i) End If Next i五、交換數(shù)組元素算法思想:若某一維數(shù)組有n個(gè)元素,將第1個(gè)元素和第n個(gè)元素交換,將第2個(gè)元素和第n-1個(gè)元素交換,需要交

6、換n 2次(如果交換n次,則回到初始狀態(tài));對(duì)于二維數(shù)組,若進(jìn)行行交換或列交換,需要使用循環(huán)語(yǔ)句,每次循環(huán)需要使用變量值交換算法。例題:交換一維數(shù)組(5個(gè)元素)的元素值b = Array(1, 3, 5, 7, 9)For i = 0 To 5 2 tmp = b(i) b(i) = b(5 - i - 1) b(5 - i - 1) = tmpNext iEnd Sub例題:一維數(shù)組元素交換的通用代碼:n = UBound(數(shù)組名)For i = LBound(數(shù)組名) To n 2 t = b(i) b(i) = b(n) b(n) = t n = n - 1Next i例題:交換二維數(shù)組

7、Mat第二列和第四列的數(shù)據(jù) For i=LBound(Mat,1) To UBound(Mat,1) t = Mat(i, 2) Mat(i, 2) = Mat(i, 4)Mat(i, 4) = tNext i例題:交換二維數(shù)組Mat第一行和第三行的數(shù)據(jù)For j=LBound(Mat,2) To UBound(Mat,2) t = Mat(1, j) Mat(1,j) = Mat(3,j)Mat(3,j) = tNext i六、求數(shù)組元素中的最大值、最小值算法思想:假設(shè)數(shù)組中第一個(gè)元素為最大值,并賦給變量Max,然后使用循環(huán)結(jié)構(gòu)依次與第2個(gè)數(shù)組元素至最后一個(gè)元素進(jìn)行比較,如果某數(shù)組元素的值大

8、于Max,則將該元素的值賦給Max(同時(shí)可記錄下該數(shù)組元素在數(shù)組中的位置)。例題:顯示數(shù)組a中的最大值及其下標(biāo)。Option Base 1 Dim Max As Integer, Index As IntegerMax=a(1)aIndex=1For i=2 to UBound(a) If a(i)>Max Then Max=a(i) aIndex=i End IfNext iPrint Max , i 求最小值的方法與此類(lèi)似,差別在于取第一個(gè)元素為最小值Min,與2個(gè)數(shù)組元素至最后一個(gè)元素進(jìn)行比較時(shí)判斷關(guān)系有所調(diào)整,即Min=a(1)If a(i)<Min Then Min=a(

9、i)End If七、常用字符處理函數(shù) Mid函數(shù):從字符串指定位置取指定個(gè)字符,格式為Mid (字符,p,n) ,從第p個(gè)字符開(kāi)始,向后截取n個(gè)字符(若n省略則取到最后)。Left和Right函數(shù):從字符串左邊或右邊取指定個(gè)字符,格式為 Left (字符,n)和Right (字符,n)。Len函數(shù):測(cè)試字符串長(zhǎng)度。UCase和LCase函數(shù):UCase將小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母;LCase將大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母。Instr(首字符位置 , 字符串1, 字符串2 , n):在字符串1中查找字符串2,如果找到,返回字符串2的第一個(gè)字符在字符串1中出現(xiàn)的位置。首字符位置是可選的,如果不指定,從字符串

10、起始位置開(kāi)始查找;如果指明,從指定的位置開(kāi)始查找。Asc函數(shù):返回字符串中第一個(gè)字符的ASCII碼。Chr函數(shù):將一個(gè)數(shù)值轉(zhuǎn)換為其所對(duì)應(yīng)的字符。字符的比較規(guī)則是按ASCII碼順序比較,規(guī)則為空格<”A”Z”<”a”z”小寫(xiě)字母的ASCII比大寫(xiě)字母的ASCII小32。 例題:1將所有文本轉(zhuǎn)換為大寫(xiě)(小寫(xiě))字母 可以直接使用UCase(LCase)函數(shù)轉(zhuǎn)換。例如:Text2.Text=UCase(Text1.Text)2對(duì)某個(gè)字符串的所有字符逐一處理算法思想:如果對(duì)某個(gè)字符串的所有字符逐一處理,即從字符串的第1個(gè)字符開(kāi)始到最后一個(gè)字母,每次處理1個(gè)字符??梢允褂肍or循環(huán)實(shí)現(xiàn)。通用代

11、碼為: For i=1 To Len(s) s1=Mid(s,i,1) Next i3字符轉(zhuǎn)換算法思想:通過(guò)字符的ASCII碼進(jìn)行處理(使用Asc函數(shù)),然后再使用Chr函數(shù)將ASCII轉(zhuǎn)換成字符。例題:將文本框Text1中字符按如下規(guī)律轉(zhuǎn)換ab、bcza,并顯示在文本框Text2中。 s = Text1.Text n = Len(s) For i = 1 To n s1 = Mid(s, i, 1) If s1 >= "a" And s1 <= "y" Then s2 = s2 + Chr(Asc(s1) + 1) ElseIf s1 =

12、"z" Then s2 = s2 + "a" End If Next i Text2.Text = s2例題:將文本框Text1中的小寫(xiě)字母轉(zhuǎn)換其對(duì)應(yīng)的大寫(xiě)字母,將大寫(xiě)字母轉(zhuǎn)換成小寫(xiě)字母,并顯示在文本框Text2中。Private Sub Command1_Click() s = Text1.Text n = Len(s) m = Asc("a") - Asc("A") For i = 1 To n s1 = Mid(s, i, 1) If s1 >= "a" And s1 <= &

13、quot;z" Then s2 = s2 + Chr(Asc(s1) - m) End If If s1 >= "A" And s1 <= "Z" Then s2 = s2 + Chr(Asc(s1) + m) End If Next i Text2.Text = s2End Sub4判斷是否回文函數(shù)所謂回文是指順讀與倒讀都一樣的字符串,如“rececer”Function foundhuiwen(p As String) foundhuiwen = True k = Len(p) For i = 1 To k / 2 If Mid

14、(p, i, 1) <> Mid(p, k + 1 - i, 1) Then foundhuiwen = False Exit For End If NextEnd Function 如果foundhuiwen函數(shù)返回值為T(mén)rue,表明字符串p為回文,否則表示不是回文。5統(tǒng)計(jì)某字符出現(xiàn)次數(shù)算法思想:對(duì)字符串中字符逐一判斷,如果是某字符,則統(tǒng)計(jì)變量加1。例題:統(tǒng)計(jì)文本框Text1中字符i和j出現(xiàn)的次數(shù)(不區(qū)分大小寫(xiě))。Private Sub Command1_Click() s = Text1.Text n = Len(s) For i = 1 To n s1 = Mid(s, i,

15、 1) If UCase(s1) = "I" Then ni = ni + 1 If UCase(s1) = "J" Then nj = nj + 1 Next i Print ni, njEnd Sub八、素?cái)?shù)素?cái)?shù)定義:只能被1和本身整除的正整數(shù)稱(chēng)為素?cái)?shù)(或稱(chēng)質(zhì)數(shù))。例如11就是素?cái)?shù),它只能被1和11整除。算法思想:判別某數(shù)n是否是素?cái)?shù)的方法有很多,最簡(jiǎn)單的是從素?cái)?shù)的定義來(lái)求解。對(duì)于n,從i=2,3,n-1判別n能夠被i整除,只要有一個(gè)能整除,n就不是素?cái)?shù),否則n是素?cái)?shù)。此種算法比較簡(jiǎn)單,但速度慢,因此,可以將n被2到 (或n/2)間的所有整數(shù)除,如果

16、都除不盡,則n就是素?cái)?shù),否則n是非素?cái)?shù)。 注:執(zhí)行For循環(huán)時(shí),循環(huán)變量等于終值仍進(jìn)入循環(huán),遇到Next語(yǔ)句,循環(huán)變量會(huì)自動(dòng)加上步長(zhǎng),因此如果循環(huán)正常完成后,循環(huán)變量的值將大于終值。例如:For i=1 To 4 If Then Exit ForNext iPrint i如果循環(huán)正常結(jié)束,則輸出結(jié)果為5(大于4)。如果循環(huán)過(guò)程中滿足If條件,執(zhí)行Exit For語(yǔ)句退出循環(huán),則i的值一定小于5。例題:判斷n是否是素?cái)?shù)。Private Sub Command2_Click() n = Val(Text1.Text) For j = 2 To n - 1 If n Mod j = 0 Then E

17、xit For Next j If j > n-1 Then Print "是素?cái)?shù)" Else Print "不是素?cái)?shù)"End Sub例題:輸出2n范圍的全部素?cái)?shù)。Private Sub Command1_Click()n = Val(Text1.Text)For i = 2 To n For j = 2 To Sqr(i) If i Mod j = 0 Then Exit For Next j If j > Sqr(i) Then Print iNext iEnd Sub使用Do While循環(huán)判斷是否是素?cái)?shù)的代碼為:Private Fun

18、ction isprime(a As Integer) As Boolean Dim flag As Boolean flag = True b = 2 Do While b <= Int(a / 2) And flag If Int(a / b) = a / b Then flag = False Else b = b + 1 End If Loop isprime = flagEnd FunctionEnd Sub其中flag作為標(biāo)志變量,首先賦值為T(mén)rue,在循環(huán)體中,如果滿足If條件(即n能被其他數(shù)整除),則flag重新賦值為False,最后根據(jù)flag的值可知n是否是素?cái)?shù)。九、

19、最大公約數(shù)和最小公倍數(shù)算法思想:(1)對(duì)于已知兩數(shù)x、y,使得x>y(2)x除以y得余數(shù)r;(3)若r=0,則x為求得的最大公約數(shù),算法結(jié)束;否則執(zhí)行步驟(4)(4)xy,yr,再重復(fù)執(zhí)行(2)求得了最大公約數(shù)后,最小公倍數(shù)就可很方便地求出,即將原來(lái)的兩數(shù)相乘除以最大公約數(shù)。Private Sub Form_Click() x = Val(InputBox("請(qǐng)輸入第一個(gè)數(shù):") y = Val(InputBox("請(qǐng)輸入第二個(gè)數(shù):") If x < y Then t = x x = y y = t End If x 1 = x y1 = y

20、 Print x, y Do While y <> 0 r = x Mod y x = y y = r Loop Print "最大公約數(shù)為:" x Print "最小公倍數(shù)為:" x1 *y1 / xEnd Sub 十、完數(shù)定義:一個(gè)數(shù)如果正好等于它的因子之和,這個(gè)數(shù)就稱(chēng)為完數(shù)。例如,6的因子為1、2、3,而6=1+2+3,因此6是“完數(shù)”。例題:編程找出1000以?xún)?nèi)的所有完數(shù)。Private Sub Command1_Click()OutputWanNumber 1000End Sub '求完數(shù)的過(guò)程Sub OutputWanNu

21、mber(ByVal n As Integer)Dim i As IntegerDim j As IntegerDim s As Integer For i = 1 To n s = 0 For j = 1 To i 2 If i Mod j = 0 Then s = s + j Next j If s = i Then Print i & "是完數(shù)"Next iEnd Sub 十一、水仙花數(shù)定義:“水仙花數(shù)”是指一個(gè)三位數(shù),其中各位數(shù)字的立方和等于該數(shù)本身(如15313+53+33)分析:此題的關(guān)鍵是要知道如何分離出一個(gè)三位數(shù)中的各位數(shù)字。例題:找出100999之

22、間的所有“水仙花數(shù)”。Private Sub Command1_Click() For i = 100 To 999 a = Int(i / 100) b = Int(i - 100 * a) / 10) c = i - Int(i / 10) * 10 If i = a 3 + b 3 + c 3 Then Print i End If Next iEnd Sub Private Sub Command1_Click() For n = 100 To 999 s = 0 a = n Do While a <> 0 b = a Mod 10 s = s + b * b * b a = a 10 Loop If s = n Then Print n Next nEnd Sub十二、數(shù)列以下數(shù)列:1,1,2,3,5,8,13,21,的規(guī)律是從第3個(gè)數(shù)開(kāi)始,每個(gè)數(shù)是它前面兩個(gè)數(shù)之和。 Private Sub Command1_Click() Dim a(50) As LongDim f As Long a(1) = 1 a(2) = 1 For i = 3 To Va

溫馨提示

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

評(píng)論

0/150

提交評(píng)論