版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、常用算法總結(jié)—算法是對(duì)某個(gè)問(wèn)題求解過(guò)程的描述,一、基本算法1.累加、連乘,1~100的5或7的倍數(shù)的和 Sum = 0 For i = 1 To 100 If i Mod 5 = 0 Or i Mod 7 = 0 Then Sum = Sum + i End If Next i Print Sum,3~10的乘積 t = 1 For i =3 To 10
2、 t = t * i Next i Print t,思考:若把循環(huán)體前面置各變量初值的語(yǔ)句放在循環(huán)體內(nèi),程序運(yùn)行時(shí)會(huì)產(chǎn)生什么情況?,例求自然對(duì)數(shù)e的近似值,要求其誤差小于0.00001,近似公式為: 該例題涉及兩個(gè)問(wèn)題: (1)用循環(huán)結(jié)構(gòu)求級(jí)數(shù)和的問(wèn)題。本例根據(jù)某項(xiàng)值的精度來(lái)控制循環(huán)的結(jié)束與否。 (2)累加:e=e+t 循環(huán)體外對(duì)累加和的變量清零 e=0 連乘:
3、n=n*i 循環(huán)體外對(duì)連乘積變量置1 n=1 Private Sub Form_Click() Dim i%,n&, t!, e! e = 0 : n = 1 ‘ e存放累加和、n存放階乘 i = 0 : t = 1 ‘ i計(jì)數(shù)器、t第i項(xiàng)的值 Do While t > 0.00001 e = e + t : i = i + 1 ‘ 累加
4、、連乘 n = n * i : t = 1 / n Loop Print "計(jì)算了 "; i; " 項(xiàng)的和是 "; eEnd Sub,,2.求素?cái)?shù) 判別某數(shù)m是否為素?cái)?shù)最簡(jiǎn)單的方法是: 對(duì)于m 從i=2,3,…,m-1判別m能否被i整除,只要有一個(gè)能整除,m不是素?cái)?shù),否則m是素?cái)?shù)。 For m = 2 To 100 For i = 2 To m
5、 - 1 If (m Mod i) = 0 Then exit for Next i if I>m-1 then msgbox str(m)+”是素?cái)?shù)” Else msgbox str(m)+”不是素?cái)?shù)” End If Next m,m是否為素?cái)?shù),求100以內(nèi)的素?cái)?shù),3.窮舉法 “窮舉法”也稱為“枚舉法”或“試湊法”,
6、即將可能出現(xiàn)的各種情況一一測(cè)試,判斷是否滿足條件,一般采用循環(huán)來(lái)實(shí)現(xiàn)。例百元買百雞問(wèn)題。假定小雞每只5角,公雞每只2元,母雞每只3元?,F(xiàn)在有100元錢要求買100只雞,編程列出所有可能的購(gòu)雞方案。 設(shè)母雞、公雞、小雞各為x、y、z只,根據(jù)題目要求,列出方程為: x+y+y=100 3x+2y+0.5z=100三個(gè)未知數(shù),兩個(gè)方程,此題有若干個(gè)解。解決此類問(wèn)題采用“試湊法”,把每一種情況都考慮到。
7、 方法一:最簡(jiǎn)單三個(gè)未知數(shù)利用三重循環(huán)來(lái)實(shí)現(xiàn)。 方法二:從三個(gè)未知數(shù)的關(guān)系,利用兩重循環(huán)來(lái)實(shí)現(xiàn)。,,方法一:Private Sub Form_click()Dim X%,y%,z%For X=0 To 100 For Y=0 To 100 For Z= 0 To 100If X+y+z=100 And 3*x+2*y+.5*z=100 ThenPrint X,y,zEnd
8、If Next Z Next YNext XEnd sub,方法二:For X= 0 To 33 For Y= 0 To 50Z=100-x-y If 3*x+2*y+.5*z=100 ThenPrint X, Y, Z End If Next YNext X,4.遞推法 “遞推法”又稱為“迭代法”,其基本思想是把一個(gè)復(fù)雜的計(jì)算
9、過(guò)程轉(zhuǎn)化為簡(jiǎn)單過(guò)程的多次重復(fù)。每次重復(fù)都從舊值的基礎(chǔ)上遞推出新值,并由新值代替舊值。 例 猴子吃桃子。小猴在一天摘了若干個(gè)桃子,當(dāng)天吃掉一半多一個(gè);第二天接著吃了剩下的桃子的一半多一個(gè);以后每天都吃尚存桃子的一半零一個(gè),到第7天早上要吃時(shí)只剩下一個(gè)了,問(wèn)小猴那天共摘下了多少個(gè)桃子?分析:這是一個(gè)“遞推”問(wèn)題,先從最后一天推出倒數(shù)第二天的桃子,再?gòu)牡箶?shù)第二天的桃子推出倒數(shù)第三天的桃子……。設(shè)第n天的桃子為xn,那么它前一天的桃子數(shù)是
10、xn -1。,已知:當(dāng)N=7第7 天的桃子數(shù)為1,則第6天的桃子數(shù)由公式得4個(gè),依次類推,可求得第1 天的桃子數(shù)。程序如下:Private sub form_click()Dim I as integerx=1print “第7 天的桃子數(shù)為:1只”for I=6 to 1 step –1x=(x+1)*2 print “第”; I; ” 天的桃子數(shù)為:” ; x ; ”只”next
11、IEnd sub,5.最小、最大值在若干個(gè)數(shù)中求最大值,一般先假設(shè)一個(gè)較小的數(shù)為最大值的初值,若無(wú)法估計(jì)較小的值,則取第一個(gè)數(shù)為最大值的初值;然后將每一個(gè)數(shù)與最大值比較,若該數(shù)大于最大值,將該數(shù)替換為最大值;依次逐一比較。例隨機(jī)產(chǎn)生10個(gè)100~200之間的數(shù),求最大值。,Private Sub Command1_Click() Max = 100 For i = 1 To 10 x = Int(Rnd * 101)
12、 + 100 Print x; If x > Max Then Max = x Next i Print Print "最大值="; MaxEnd Sub,6、求最大公約數(shù),Private Sub Command1_Click() Dim m, n, r As Long m = Val(Text1.Text) ‘取數(shù)據(jù)M n = Val(Tex
13、t2.Text) ‘取數(shù)據(jù)N If m Int(m) or m Int(n) or n < 1 Then Text3.Text = "數(shù)據(jù)錯(cuò)誤!" Else Do ‘求最大公約數(shù) r = m Mod n m = n n = r
14、 Loop Until r = 0 Text3.Text = CStr(m) ‘輸出最大公約數(shù) End IfEnd Sub,判斷數(shù)據(jù)是否合法,Private Sub Form_Click() For i = 1 To 9 For j = 1 To 9 Print i; "*"; j; "="; i * j; Next
15、 j Print Next iEnd Sub執(zhí)行本程序,窗體上將顯示九九乘法表。,For j = 1 To i,7、關(guān)于循環(huán)嵌套(一個(gè)循環(huán)體內(nèi)又包含了一個(gè)完整的循環(huán)結(jié)構(gòu)稱為循環(huán)的嵌套.),換行!,作用?,,,例:xh2.vbpSsfrm.frm,,思考:打印上三角或下三角程序如何改動(dòng)?要打印下三角?8. 打印圖形見(jiàn)下頁(yè),編寫(xiě)程序打印如右邊圖形:Private Sub Form_Click()
16、 For i = 1 To 4 Print Space(5 - i); For j = 1 To 2 * i - 1 Print "*"; Next j Print Next i PrintEnd Sub,* *** ***** *******,******* *****
17、 *** *,,,外循環(huán)用來(lái)控制輸出的行數(shù)及每行第一個(gè)字符的輸出位置,內(nèi)循環(huán)用來(lái)控制每行輸出的字符個(gè)數(shù)。,例:xh2.vbpshjs.frm,9.判斷同構(gòu)數(shù)(復(fù)習(xí)材料 P39 第7題),10.找親密對(duì)數(shù) P111 例5-1011.判斷完數(shù) 實(shí)驗(yàn)P55 實(shí)驗(yàn)7-212.計(jì)算多項(xiàng)式 的和 實(shí)驗(yàn)P51 實(shí)驗(yàn)6-313.求一個(gè)正整數(shù)K的各位數(shù)字之和復(fù)習(xí)材料P33 4.4練習(xí)題 第1題14.報(bào)數(shù)問(wèn)題
18、 P114 例5-1215.判斷回文數(shù) 復(fù)習(xí)材料 P41 第10題或P81 習(xí)題4,16.求自然數(shù)的因子 P81 習(xí)題5,Private Sub Command1_Click() Dim a As Integer, I% a = InputBox("輸入一個(gè)自然數(shù)") Label1.Caption = Str(a) + "的所有因子:" Fo
19、r I = 1 To a-1 If a Mod I = 0 Then List1.AddItem (Str(I)) End If NextEnd Sub,二、數(shù)組的算法,,1. 數(shù)組元素的賦初值(1)用循環(huán) For i = 1 To 10A(i)=0 Next i for I=1 to 10 for J=1 to
20、 10B(I,J)=0next J next i,(2) Array函數(shù) Dim ib As Variantib = Array("abc", "def", "67")For i = 0 To UBound(ib) Picture1.Print ib(i); " ";Next i,,注意: (1)利用Array
21、對(duì)數(shù)組各元素賦值,聲明的數(shù)組是可調(diào)數(shù)組或連圓括號(hào)都可省,并且其類型只能是Variant。 (2)數(shù)組的下階為零,上界由Array函數(shù)括號(hào)內(nèi)的參數(shù)個(gè)數(shù)可決定,也可通過(guò)函數(shù)Ubound獲得。,2.?dāng)?shù)組的賦值 在VB6.0中,提供了數(shù)組直接對(duì)數(shù)組的賦值。例如:Dim a( ) As Variant, b( ) As Variant, i% a = Array(1, 2, 3, 4, 5) ReDim b(UB
22、ound(a)) b = a,For i = 0 To UBound(a) b(i) = a(i)Next i,相當(dāng)于,注意:賦值號(hào)左邊的數(shù)組只能聲明為Variant的可調(diào)數(shù)組或簡(jiǎn)單變量。,3. 數(shù)組的輸出輸出方陣SC中的下三角元素For i = 0 To 4 For j = 0 To I ’ j=0 to 4 則輸出整個(gè)數(shù)組 sc(i, j) = i * 5 + j
23、 Print sc(i, j); " "; Next j Print ' 換行 Next I,4. 將數(shù)組中各元素交換(P115習(xí)題1)For i =1 To 15\2 t=A(i) A(i)=A(10-i+1) A(10-i+1)=tNext i,,5、對(duì)數(shù)組的行/列操作(行、列的和),P115習(xí)題3
24、:求二維數(shù)組每行的和數(shù)與每列的和數(shù),數(shù)組元素為1—9之間的隨機(jī)數(shù)。,Option explicitOption base 1’生成數(shù)組Private Sub Command1_Click() For I = 1 To 4 For J = 1 To 5 A(I, J) = Int(9 * Rnd) + 1 Picture1.Print A(I, J);
25、 Next J Picture1.Print Next IEnd Sub,'求列和Private Sub Command2_Click() For J = 1 To 5 L(J) = 0 For I = 1 To 4 L(J) = L(J) + A(I, J) Next I Text2 = Text2 &a
26、mp; Str(L(J)) Next JEnd Sub,Private Sub Command3_Click() For I = 1 To 4 H(I) = 0 For J = 1 To 5 H(I) = H(I) + A(I, J) Next J Text1 = Text1 & Str(H(I)) & vbCrLf
27、 Next IEnd Sub,’清除圖片框和文本框Private Sub Command4_Click() Picture1.Cls Text1 = "" Text2 = ""End Sub,'求行和,6、同維數(shù)組對(duì)應(yīng)元素的算術(shù)運(yùn)算(+、-、*、/),Option explicitOption base 1Private sub form_click()
28、Dim X%(5,5), Y%(5,5), Z%(5,5) For I=1 to 5for j=1 to 5x(I,j)=int(100*rnd)+1y(I,j)=int(100*rnd)+1next jNext iFor I=1 to 5 for J=1 to 5 Z(I,J)=X(I,J) + Y(I,J)next jNext i,可改為減法、乘法,存放結(jié)果數(shù)組也必須定義,,
29、,For I=1 to 5 for J=1 to 5print Z(I,J); next jprintNext IEnd sub 除法:除法操作必須先判別分母不為零,然后再進(jìn)行對(duì)應(yīng)元素的除法操作。,7、求數(shù)組靠邊元素之和, 不靠邊元素之和 P115習(xí)題6,Option base 1Private sub form_click()Dim X%(4,5), s%(4), sum% For I
30、=1 to 4s(I)=0for j=1 to 5x(I,j)=inext jNext iFor J=1 to 5 S(1)=S(1)+X(1,J) S(4)=S(4)+X(4,J)Next j,1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4,,,For I=2 to 3 S(2)=S(2)+X(I,1) S(3)=S(3)+X(I,5
31、)Next ifor I=1 to 4 SUM=SUM+S(I)Next i print SUMEnd sub,8,求數(shù)組對(duì)角線元素之積或和,Option base 1Private sub form_click()Dim X%(4,4), S1&,S2& S=1:S2=1For I=1 to 4for j=1 to 4x(I,j)=inext jNext iFor i=1
32、 to 4 S1=s1*X(i,i)Next Iprint SEnd sub,,,1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4,若為“+”,則為對(duì)角線的和,但S1,S2初值為0,For I = 1 To 4 For J = 1 To 4 If I + J = 5 Then S2 =
33、 S2 + A(I, I) End If Next J Next I Text3 = “兩條對(duì)角線的積 _分別是:" & S1 & " " & S2End Sub,P115習(xí)題6,9.求二維數(shù)組中每行/列元素的最大/最小,Option ExplicitOption Base 1Private Sub Form_Clic
34、k() Dim A%(5, 8), I%, J% Dim MAXI%(5), MAXJ%(8) For I = 1 To 5 For J = 1 To 8 A(I, J) = Int(90 * Rnd) + 10 Print A(I, J); Next J Print Next I For I = 1 To
35、 5 MAXI(I) = A(I, 1) For J = 1 To 8 If MAXI(I) < A(I, J) Then MAXI(I) = A(I, J) Next J Print "第"; I; "行的最大值是:"; MAXI(I), Next I Print,,,生成數(shù)組并輸出,求每行最大
36、并輸出,9.求二維數(shù)組中每行/列元素的最大/最小,For J = 1 To 8 MAXJ(J) = A(1, J) For I = 1 To 5 If MAXJ(J) < A(I, J) Then MAXJ(J) = A(I, J) Next I Print "第"; J; "列的最大值是:&q
37、uot;; MAXJ(J), If J Mod 5 = 0 Then Print Next JEnd Sub,求每列最大并輸出,,10求鞍點(diǎn)元素,該元素所在行為最大,所在列為最小,P115 習(xí)題7’ 生成數(shù)組Private Sub Command1_Click() Dim I%, J% M = InputBox("請(qǐng)輸入數(shù)組的行數(shù)") N = InputB
38、ox("請(qǐng)輸入數(shù)組的列數(shù)") ReDim A(M, N) For I = 1 To M For J = 1 To N A(I, J) = Int(90 * Rnd) + 10 Picture1.Print A(I, J); Next J Picture1.Print Next IEnd Sub,,
39、,10求鞍點(diǎn)元素,該元素所在行為最大,所在列為最小,P115 習(xí)題7’找鞍點(diǎn)數(shù)Private Sub Command2_Click() Dim I%, J%, Max%, Col%, Flg% For I = 1 To M Max = A(I, 1) Col = 1 For J = 2 To N If Max A(J, Col) Then Ex
40、it For Next J If J > N Then Text1.Text = "鞍點(diǎn)元素是" & "A(" & I & "," & Col & ")=" & A(I, Col) Flg = 1 End If
41、 If Flg = 0 Then Text1 = "鞍點(diǎn)元素不存在" Next IEnd Sub,,,找每行最大值,并記下最在值所在的列,,將該行最大值,與所在列的各元素比較,是否為該列最小,,11、矩陣乘法P107 例5-6,Option base 1Private sub form_click()Dim X%(4,5),Y%(5,3),Z%(4,3)For I=1 to 4for
42、j=1 to 5x(I,j)=int(100*rnd)+1print x(I,j);next jprintNext iFor I=1 to 5for j=1 to 3y(I,j)=int(100*rnd)+1print y(I,j)next jprintNext i,11、矩陣乘法,For L=1 to 4 for J=1 to 3 Z(L,J)=0.0
43、 for I=1 to 5 Z(L,J)=Z(L,J)+X(L,I)*Y(I,J) next i next jNext LFor I= 1 to 4for j=1 to 3print z(I,j);next jprintNext iEnd sub,12、矩陣轉(zhuǎn)置 P116 習(xí)題10/復(fù)習(xí)資料P60 第5題,,Option ExplicitOption Bas
44、e 1Dim A() As Integer, B() As Integer, N%Private Sub Command1_Click() ’生成數(shù)組 Dim I%, J% N = InputBox("") ReDim A(N, N) For I = 1 To N For J = 1 To N A(I, J) = Int(Rnd * 10
45、0) + 1 Text1 = Text1 & Str(A(I, J)) Next J Text1 = Text1 & vbCrLf Next IEnd Sub,12、矩陣轉(zhuǎn)置 P116 習(xí)題10/復(fù)習(xí)資料P60 第5題,,Private Sub Command2_Click()成 ’矩陣轉(zhuǎn)置 Dim I%, J% ReDim B(N,
46、N) For I = 1 To N For J = 1 To N B(J, I) = A(I, J) Next J Next I For I = 1 To N For J = 1 To N Text2 = Text2 & Str(B(I, J)) Next J Text2 = T
47、ext2 & vbCrLf Next IEnd Sub,13.數(shù)組排序P103例5-3對(duì)已知存放在數(shù)組中的n個(gè)數(shù),用選擇法按遞增順序排序。 (1) 從n個(gè)數(shù)的序列中選出最小的數(shù)(遞增),與第1個(gè)數(shù)交換位置; (2)除第1個(gè)數(shù)外,其余n-1個(gè)數(shù)再按(1)的方法選出次小的數(shù),與第2個(gè)數(shù)交換位置; (3)重復(fù)(1)n-1遍,最后構(gòu)成遞增序列。,Private Sub Command1_Click()
48、 Dim Sort(10) As Integer, temp% Dim i As Integer, j% Randomize For i = 1 To 10 Sort(i) = Int(Rnd * 99) + 1 Text1 = Text1 & Str(Sort(i)) Next i For i = 1 To 9 For j = i +
49、 1 To 10 If Sort(i) > Sort(j) Then temp = Sort(i) Sort(i) = Sort(j) Sort(j) = temp End If Next j Text2 = Text2 & Str(Sort(i))
50、 Next i Text2 = Text2 & Str(Sort(i)) '書(shū)上少此語(yǔ)句End Sub,14.冒泡法排序?qū)嶒?yàn)P62 ,實(shí)驗(yàn)7-4,與選擇排序的區(qū)別在于:只對(duì)相鄰兩數(shù)進(jìn)行比較,使之大數(shù)沉底,小數(shù)象氣泡一樣“冒”上來(lái),所以稱為“冒泡法”。例如對(duì)8,3,5,2,1,9排序:第一輪的排序是第1次比較:8,3,5,2,1,9第2次比較:3,8,5,2,1,9第3次比較:3,5,8,2,1,
51、9第4次比較:3,5,2,8,1,9第5次比較:3,5,2,1,8,9第6次比較:3,5,2,1,8,9第一輪的排序結(jié)果;3,5,2,1,8,9第一輪需排序5次,第二輪需排序4次,第三輪需排序3次,第四輪需排序2次,第五輪需排序1次。,Private Sub Command1_Click() 冒泡法排序過(guò)程Dim i %, j %, temp% For I = 1 To UBound(a) - 1
52、 For J = 1 To UBound(a) - I If a(J) > a(J + 1) Then temp = a(J): a(J) = a(J + 1): a(J + 1) = temp End If Next NextFor i = 1 To UBound(a) Print a(i);Next iEn
53、d Sub,例: 排序運(yùn)動(dòng)員的成績(jī),已知8名運(yùn)動(dòng)員100米成績(jī),請(qǐng)排出他們的名次(成績(jī)相同名次相同,成績(jī)由鍵盤(pán)輸入),本題的難點(diǎn)并不在排序,可以很輕松地用冒泡法或選擇法排序進(jìn)行成績(jī)從?。欤┑酱螅┑呐帕小?wèn)題是排序后的成績(jī)對(duì)應(yīng)于哪一個(gè)運(yùn)動(dòng)員,一維數(shù)組是無(wú)法記錄的。因此就要定義一個(gè)二維數(shù)組,其中第一列放運(yùn)動(dòng)員的成績(jī),第二列存放成績(jī)對(duì)應(yīng)的運(yùn)動(dòng)員號(hào)。按二維數(shù)組的第一列排序后,產(chǎn)生交換不僅要交換第一列的數(shù)組元素,還要交換第二列的數(shù)組元素,這
54、樣運(yùn)動(dòng)員的編號(hào)就能跟著成績(jī)“跑了”。在輸出名次時(shí),也要注意成績(jī)相同、名次相同的問(wèn)題。,排序過(guò)程(選擇法排序)Private Sub sort(cj() As Single) Dim temp As Single For i = 1 To 7 For j = i + 1 To 8 If cj(i, 1) > cj(j, 1) Then temp
55、 = cj(i, 1): cj(i, 1) = cj(j, 1): cj(j, 1) = temp temp = cj(i, 2): cj(i, 2) = cj(j, 2): cj(j, 2) = temp End If Next NextEnd Sub,輸出名次過(guò)程Private Sub output(cj() As Single) Dim j
56、 As Integer, p As Integer p = 1 Print "第"; 1; "名是"; cj(1, 2); "號(hào)運(yùn)動(dòng)員,成績(jī)是:"; cj(1, 1) For j = 2 To 8 If cj(j, 1) = cj(j - 1, 1) Then Print "第"; p; &qu
57、ot;名是"; cj(j, 2); "號(hào)運(yùn)動(dòng)員,成績(jī)是:"; cj(j, 1) Else Print "第"; j; "名是"; cj(j, 2); "號(hào)運(yùn)動(dòng)員,成績(jī)是:"; cj(j, 1) p = j End If Next PrintEnd Su
58、b,窗體事件過(guò)程 ’ 輸入運(yùn)動(dòng)員成績(jī)Private Sub Form_Click() Dim i As IntegerDim pro As String, cj(8, 2) As Single Randomize For i = 1 To 8 pro = "請(qǐng)輸入第" + Str(i) + "位運(yùn)動(dòng)員的成績(jī):" cj(i, 1) = InputB
59、ox(pro) cj(i, 2) = i Print cj(i, 1); Next Print Print Call sort(cj) Call output(cj)End Sub,15.數(shù)組元素的插入與刪除 (1) 插入 排序 復(fù)習(xí)材料 P50 第23 在有序數(shù)組a(1 to n)(原有n-1個(gè)元素)插入一個(gè)值Key元素,算法: 查找要插入的
60、位置k(1<=k<=n-1),騰出位置,把最后一個(gè)元素開(kāi)始到第K個(gè)元素往后移動(dòng)一個(gè)位置, 第k個(gè)元素的位置騰出,就可將數(shù)據(jù)Key插入,,Private sub command1__clickDim a%( 11), I%,J% ,X%For I= 1 to 10a(I)=I*5+1 ’通過(guò)程序自動(dòng)生成有規(guī)律的數(shù)組Next IX=Inputbox(“輸入任意數(shù)X:”)For I= 1 to
61、10 ‘查找欲插入數(shù)X在數(shù)組中的位置if X<a(I) then exit for ’找到插入的位置下標(biāo)為INext IFor J=11 to I+1 step –1 ’從最后元素開(kāi)始往后移,騰出位置a(J)=a(J-1)Next JA(I)=XEnd sub,,(2) 刪除重復(fù)元素見(jiàn) P113 例5-11 首先也是要找到欲刪除的元素的位置k
62、;然后從k+1到n個(gè)位置開(kāi)始向前移動(dòng);最后將數(shù)組元素減1。例如,要將值為13的元素刪除的過(guò)程為:,Dim a() as integer ’聲明為動(dòng)態(tài)數(shù)組…..Redim a( 1 to n) ’聲明為有N個(gè)元素的數(shù)組…’查找到要?jiǎng)h除的元素下標(biāo)為K…For I=k+1 to N ’從K+1個(gè)元素開(kāi)始往前移A(I-1)=a(I)Next I’最后一個(gè)元素的位置空出,利用數(shù)組重新聲明減少一
63、個(gè)元素,但要保留原來(lái)值Redim preserve a( 1 to n-1),排序法有:選擇、冒泡、插入法排序及合并排序等。 前兩種排序欲排序的數(shù)據(jù)全部輸入后,再進(jìn)行排序; 插入法排序每輸入一項(xiàng),馬上插入到數(shù)組應(yīng)在的位置,數(shù)組始終有序。用插入排序法輸入不多于20個(gè)數(shù),使數(shù)組保持遞增的序列。對(duì)數(shù)組中已有N-1個(gè)有序數(shù),當(dāng)輸入某數(shù)X時(shí),插入排序法實(shí)現(xiàn)的步驟: (1)輸入欲排序的數(shù)據(jù)項(xiàng)x;在數(shù)組a中找x應(yīng)所處的位置j; (2
64、)從數(shù)組的最后一個(gè)元素開(kāi)始到下標(biāo)j依次往后移,使j位置空出; (3)將x放入位置j處,一個(gè)數(shù)據(jù)插入完成; (4)有若干個(gè)數(shù)重復(fù)(1)~(3)。對(duì)于若干個(gè)數(shù)輸入,只要調(diào)用插入排序過(guò)程即可。,Dim n As IntegerSub insert(a() As Single, ByVal x!) Dim i%, j% j = 1 Do While j a(j) j = j + 1
65、 Loop For i = n - 1 To j Step -1 a(i + 1) = a(i) Next i a(j) = xEnd Sub,Private Sub Text1_KeyPress(KeyAscii As Integer) Static bb!(1 To 20) Dim i% If n = 20 Then MsgBox "數(shù)據(jù)太
66、多!", 1, "警告" End End If If KeyAscii = 13 Then n = n + 1 Call insert(bb(), Val(Text1)) Picture1.Print Text1 For i = 1 To n Picture2.Print bb(i);
67、 Next i Picture2.Print Text1 = "" End IfEnd Sub,數(shù)組的合并排序,從鍵盤(pán)讀取數(shù)組a和b(各5個(gè)元素),a,b都是嚴(yán)格遞增的(即元素從小到大排列,且無(wú)重復(fù)元素),將a,b合并成c數(shù)組,使C也嚴(yán)格遞增。若a,b中有相同的元素只保留一個(gè),最后輸出數(shù)組C。編寫(xiě)通用過(guò)程O(píng)utPut,在窗體上打印數(shù)組。,Option Exp
68、licitDim a(5) As Integer, b(5) As Integer, c() As IntegerPrivate Sub output(d() As Integer) ’輸出數(shù)組的通用過(guò)程 Dim i As Integer For i = 1 To UBound(d) Print d(i); Next i PrintEnd Sub,Private Sub Com
69、mand1_Click() '數(shù)組輸入 Dim i As Integer For i = 1 To 5a(i)=InputBox(“輸入數(shù)組a(“+str(I)+”)”) Next i Print "數(shù)組A:" Call output(a) For i = 1 To 5 b(i)=InputBox(“輸入數(shù)組b(“+str(I)+”)”)
70、 Next i Print "數(shù)組B:" Call output(b)End Sub,Private Sub Command2_Click() '數(shù)組合并輸出 Dim p As Integer, q As Integer, r As Integer Dim i As Integer p = 1: q = 1: r = 1 Do While p b(q)
71、 Then c(r) = b(q) r = r + 1 q = q + 1 ElseIf a(p) < b(q) Then c(r) = a(p) r = r + 1: p = p + 1 Else c(r) = a(p) r = r
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
評(píng)論
0/150
提交評(píng)論