




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
關(guān)于常用算法介紹第一頁,共七十七頁,2022年,8月28日算法1:累加和累乘累加形式:V=V+e連乘形式:V=V*e其中:V是變量,e是遞增表達(dá)式。累加和連乘一般通過循環(huán)結(jié)構(gòu)來實(shí)現(xiàn)。注意:需在執(zhí)行循環(huán)體前對變量V賦初值。一般的,累加時置初值0;連乘時置初值為1。第二頁,共七十七頁,2022年,8月28日例如求N!的結(jié)果。PrivateSubCommand1_Click()Dimn%,i%,s&n=Val(InputBox("輸入n"))s=1Fori=1Tons=s*iNextiPrintsEndSub第三頁,共七十七頁,2022年,8月28日錯誤的例子PrivateSubCommand1_Click()Dimn%,i%,s&n=Val(InputBox("輸入n"))Fori=1Tons=1‘賦初值語句位置不對!s=s*iNextiPrints‘輸出s的值為n,而不是n!EndSub第四頁,共七十七頁,2022年,8月28日根據(jù)下列公式,求自然對數(shù)e的的近似值。要求:誤差小于0.00001PrivateSubCommand1_Click()Dimi%,n&,t!,e!e=2i=1t=1DoWhilet>0.00001i=i+1t=t/ie=e+tLoopPrint"計算了";i;"項目和是:";ePrintExp(1)‘與上句輸出值進(jìn)行對比以證明算法的正確性EndSub第五頁,共七十七頁,2022年,8月28日解題技巧1)
由于這類題目往往是根據(jù)精度要求來求值,因此我們不能預(yù)知具體循環(huán)次數(shù),所以這類題目一般用Do循環(huán),很少用For循環(huán)。設(shè)定循環(huán)變量和通項變量,注意各變量的初值;2)
分解通項表達(dá)式中各因子,并分別將各因子用循環(huán)變量表示;3)
如果步驟2中有的因子比較復(fù)雜,難以直接用變量表示,此時可以考慮使用Function過程;4)
根據(jù)步驟1、2、3,寫出通項表達(dá)式;5)
根據(jù)精度要求(往往是通項小于10負(fù)多少次方這樣一個關(guān)系表達(dá)式),寫出一條滿足精度要求后跳出循環(huán)的語句。通常是用:if通項表達(dá)式>10^(-N)thenexitdo,注意這句話一般需放在累加或者連乘式之前。第六頁,共七十七頁,2022年,8月28日根據(jù)X值計算:n=1,2,……要求:n項絕對值小于等于10-6為止。注意:如果調(diào)試運(yùn)行時死循環(huán),可以按Ctrl+Break中斷死循環(huán),不需要重新啟動機(jī)器。(或者Ctrl+ScrollLock)第七頁,共七十七頁,2022年,8月28日 privateFunctioncomp(naslong)aslong dimIaslong dimresultaslong result=1‘此處注意,由于是連乘,初值為1 forI=1to2*(n-1) result=result*I nextI comp=result EndFunction第八頁,共七十七頁,2022年,8月28日PrivateSubCommand1_Click()DimnAsLong,dblCosAsDouble,xAsDoublex=Val(Text1.Text)n=1DodblCos=(-1)^(n+1)*x^(2*(n-1))/comp(n)IfAbs(dblCos)<=10^(-6)ThenExitDoSum=Sum+dblCosn=n+1LoopPrintSumEndSubPrivateFunctioncomp(nAsLong)AsLongDimIAsLongDimresultAsLongresult=1'此處注意,由于是連乘,初值為1ForI=1To2*(n-1)result=result*INextIcomp=resultEndFunction第九頁,共七十七頁,2022年,8月28日2、實(shí)戰(zhàn)練習(xí)1)
補(bǔ)充代碼(2003秋二(7))本程序的功能是求下面數(shù)列前n項之和。S(x,n)=x/2+2!*x^3/2*4+3!*x^5/2*4*6+.....+n!*x^2n-1/2*4*6...2nOptionExplicitPrivateSubCommand1_Click()
DimxAsSingle,sAsSingle
DimnAsInteger,iAsInteger
x=InputBox("輸入X:","求數(shù)列和",1)
n=InputBox("輸入N:","求數(shù)列和",1)
Fori=1Ton
s=s+fun(x,i)
Nexti
Label1.Caption=_(1)_
Text1=sEndSubPrivateFunctionfun(xAsSingle,nAsInteger)AsSingle
__(2)__
p=1
Fori=1Ton
__(3)___
Nexti
fun=x^(2*n-1)*pEndFunction第十頁,共七十七頁,2022年,8月28日2)
編程題(2003春上機(jī)試卷03)按下列公式編寫求積分余弦函數(shù)值的程序。當(dāng)通項絕對值小于10-5時停止計算。
第十一頁,共七十七頁,2022年,8月28日VB常用算法(二)最值問題算法說明在若干數(shù)中求最大值,一般先取第一個數(shù)為最大值的初值(即假設(shè)第一個數(shù)為最大值),然后,在循環(huán)體內(nèi)將每一個數(shù)與最大值比較,若該數(shù)大于最大值,將該數(shù)替換為最大值,直到循環(huán)結(jié)束。求最小值的方法類同。求若干數(shù)平均值,實(shí)質(zhì)上就是先求和,再除以這些數(shù)的個數(shù)。
第十二頁,共七十七頁,2022年,8月28日應(yīng)用舉例隨機(jī)產(chǎn)生n個1-100(包括1和100)的數(shù),求它們的最大值、最小值和平均值。PrivateSubCommand1_Click()DimnAsInteger,iAsInteger,minAsInteger,maxAsInteger,averAsSingle,sAsIntegern=Val(InputBox("輸入個數(shù):"))s=Int(Rnd*100)+1max=smin=saver=sPrint"第1個數(shù)是:"&sFori=2Tons=Int(Rnd*100)+1Print"第"&
i&"個數(shù)是:"&sIfs>maxThenmax=sIfs<minThenmin=saver=aver+sNextiaver=aver/nPrint"max=";max;"min=";min;"aver=";averEndSub第十三頁,共七十七頁,2022年,8月28日解題技巧
最大值、最小值、平均值類型題目往往和數(shù)組放在一起考!有的不僅求這些值,還要對具有最大值或者最小值的行或列或者某個元素進(jìn)行處理,這時就要在記錄最大、最小值時,同時記錄該值所在的行號和列號。第十四頁,共七十七頁,2022年,8月28日實(shí)戰(zhàn)練習(xí)1)
補(bǔ)充代碼(2000春二(9)) 本程序的功能是在二維數(shù)組中查找鞍點(diǎn)元素,即該元素在所在行中為最大,且在所在列中為最小。在一個數(shù)組中可能存在,也可能不存在這樣的元素。數(shù)組各元素的值從文件data.txt中讀取。
PrivateSubForm_Click() Dima(3,3)AsInteger,iAsInteger,jAsInteger DimmaxvrAsInteger,colAsInteger,AsInteger Opendata.txtForInputAs#1 Fori=1To3 Forj=1To3 Input#1,a(i,j) Printa(i,j); Nextj Print Nexti Fori=1To3 maxvr=
(1)
col=1 Forj=2To3 Ifmaxvr<A(I,J)THEN maxvr=
(2)
col=j EndIf Nextj Forj=1To3 Ifmaxvr>a(j,col)Then
(3)
Nextj Ifj>3Then Printa(;i;,;col;)=;a(i,col) =1 EndIf If
(4)
ThenPrint鞍點(diǎn)元素不存在
Nexti EndSub第十五頁,共七十七頁,2022年,8月28日2)
編程題(2002秋上機(jī)試卷05) 隨機(jī)生成所有數(shù)組元素都是兩位數(shù)的3×3的二維數(shù)組,找出其中不同行、不同列的三個數(shù)組元素的乘積最大的一組,并將這三個元素顯示在圖片框中。
第十六頁,共七十七頁,2022年,8月28日VB常用算法(三)素數(shù)
算法說明素數(shù)(質(zhì)數(shù)):就是一個大于等于2的整數(shù),并且只能被1和本身整除,而不能被其他整數(shù)整除的數(shù)。判別某數(shù)m是否是素數(shù)的經(jīng)典算法是:對于m,從I=2,3,4,……,m-1依次判別能否被I整除,只要有一個能整除,m就不是素數(shù),否則m是素數(shù)。
第十七頁,共七十七頁,2022年,8月28日PrivateFunctionsushu(ByValnAsLong)AsBooleanDimiAsLongFori=2Ton-1If(nModi)=0ThenExitForNextIIfI=nthensushu=TrueEndFunction很顯然,實(shí)際上,我們可以改進(jìn)上面Fori=2Ton–1為:Fori=2Toint(sqr(m))這樣可以很好的提高效率。以上判斷是否為素數(shù)的代碼務(wù)必識記!第十八頁,共七十七頁,2022年,8月28日應(yīng)用舉例求100-200之內(nèi)素數(shù)。PrivateSubCommand1_Click()DimjAsIntegerForj=100To200Ifsushu(j)=TrueThenPrintjEndIfNextj
EndSub解題技巧識記判斷素數(shù)的算法過程,根據(jù)題意,靈活調(diào)用!第十九頁,共七十七頁,2022年,8月28日實(shí)例說明 編程題(2002年春上機(jī)試卷04) 找出10000以內(nèi)所有可以表示為兩個平方數(shù)和的素數(shù)。思路:首先找10000以內(nèi)的所有素數(shù),對于每個素數(shù)判斷其是否可以表示為兩個平方數(shù)之和(即對于任意小于該素數(shù)shu的數(shù)I,如果I和shu-I均為平方數(shù),則說明其可以表示為兩個平方數(shù)之和。)判斷數(shù)I是否為平方數(shù)的方法:sqr(i)=int(sqr(i))
PrivateSubCommand1_Click()DimjAsIntegerDimmAsLong,nAsLongForj=2To10000Ifsushu(j)=TrueThenIfpf(j,m,n)=TrueThenList1.AddItemj&"="&m&"+"&nEndIfEndIfNextjEndSub
PrivateFunctionpf(ByValshuAsLong,mAsLong,nAsLong)AsBooleanDimiAsLongFori=1Toshu-1If(Sqr(i)=Int(Sqr(i)))And(Sqr(shu-i)=Int(Sqr(shu-i)))Thenpf=Truem=in=shu-iExitFunctionEndIfNextEndFunction第二十頁,共七十七頁,2022年,8月28日2、實(shí)戰(zhàn)練習(xí)1)
補(bǔ)充代碼(2002春二(7))下列程序的功能是:查找四位正整數(shù)中的超級素數(shù)。超級素數(shù)的定義為:當(dāng)一個素數(shù)從低位到高位依次去掉一位數(shù)后剩下的數(shù)仍然是素數(shù),則此數(shù)為超級素數(shù)。如數(shù)2333、233、23、2均為素數(shù),所以2333為超級素數(shù)。
OptionExplicit
PrivateSubCommand1_Click() DimIAsInteger,flgAsBoolean ForI=1001To9999Step2 Callsup_prime(I,flg) IfflgThen PrintI EndIf NextI EndSub
第二十一頁,共七十七頁,2022年,8月28日PrivateSubsup_prime(
(1)
,FAsBoolean) DimpAsInteger F=True DoWhileN>0 Ifprime(N)Then
(2)
Else
(3)
ExitSub EndIf LoopEndSub
PublicFunctionprime(pAsInteger)AsBoolean DimkAsInteger Ifp=1Then ExitFunction Else Fork=2ToSqr(p) IfpModk=0ThenExitFunction Nextk
(4)
EndIfEndFunction第二十二頁,共七十七頁,2022年,8月28日2)
編程題(2004春上機(jī)試卷03) 隨機(jī)生成15個兩位正整數(shù),從中找出所有的素數(shù),并記下它是第幾個數(shù),再找出其中最大的素數(shù),并給出它的位置。
第二十三頁,共七十七頁,2022年,8月28日VB常用算法(四)進(jìn)制轉(zhuǎn)化算法說明1)
十進(jìn)制正整數(shù)m轉(zhuǎn)換為R(2-16)進(jìn)制的字符串。 思路:將m不斷除r取余數(shù),直到商為0,將余數(shù)反序即得到結(jié)果。 算法實(shí)現(xiàn):PrivateFunctionTran(ByValmAsInteger,ByValrAsInteger)AsStringDimStrDtoRAsString,nAsIntegerDoWhilem<>on=mModrm=m\rIfn>9ThenStrDtoR=Chr(65+n-10)&StrDtoRElseStrDtoR=n&StrDtoREndIfLoopTran=StrDtoREndFunction
第二十四頁,共七十七頁,2022年,8月28日2)
R(2-16)進(jìn)制字符串轉(zhuǎn)換為十進(jìn)制正整數(shù)。 思路:R進(jìn)制數(shù)每位數(shù)字乘以權(quán)值之和即為十進(jìn)制數(shù)。 算法實(shí)現(xiàn):PrivateFunctionTran(ByValsAsString,ByValrAsInteger)AsintegerDimnAsInteger,decAsIntegers=UCase(Trim(s))Fori%=1ToLen(s) IfMid(s,i,1)>="A"Then n=Asc(Mid(s,i,1))-Asc("A")+10 Else n=Val(Mid(s,i,1)) EndIf dec=dec+n*r^(Len(s)-i)NextiTran=decEndFunction解題技巧 進(jìn)制轉(zhuǎn)化的原理要清楚,同時編寫代碼時候要留意16進(jìn)制中的A-F字符的處理。第二十五頁,共七十七頁,2022年,8月28日2、實(shí)戰(zhàn)練習(xí)1)
補(bǔ)充代碼(2002秋二(9)) 本程序是把給定的二進(jìn)制整數(shù)轉(zhuǎn)換為八進(jìn)制整數(shù)。
PrivateSubCommand1_Click() DimaAsString,bAsString,cAsString DimLAsInteger,mAsInteger,nAsInteger a=InputBox("請輸入一個二進(jìn)制數(shù)","輸入框")
(1)
a=String(L,"0")&a
(2)
Form=1Ton/3 b=Mid(a,3*m-2,3)
(3)
Nextm Text1.Text=c EndSub第二十六頁,共七十七頁,2022年,8月28日 PrivateFunctionzh(sAsString)AsString DimiAsInteger,nAsInteger,pAsInteger p=1 Fori=2To0Step-1
(4)
p=p+1 Nexti zh=Str(n) EndFunction第二十七頁,共七十七頁,2022年,8月28日2)
補(bǔ)充代碼(2001春二(7)) 下面程序是把給定的16進(jìn)制正整數(shù)轉(zhuǎn)換為10進(jìn)制數(shù)。
OptionExplicit
PrivateSubForm_Click() DimStAsInteger,DemAsLong St=InputBox("輸入一個十六進(jìn)制數(shù)") Dem=Convert(St) PrintSt;">=";Dem EndSub
PrivateFunctionConvert(SAsString)AsLong DimNAsInteger,IAsInteger,SubstringAsString*1 DimPAslong,KAsLong,Asc1AsInteger N=
(1)
P=16^N ForI=1ToN P=P/16 Substring=
(2)
SelectCaseSubstring Case"0"To"9" K=K+P*Val(Substring) Case
(3)
Asc1=Asc(Substring)-Asc("A")+10
(4)
EndSelect NextI
(5)
EndFunction
第二十八頁,共七十七頁,2022年,8月28日VB常用算法(五)約數(shù)因子算法說明1)
最大公約數(shù): 用輾轉(zhuǎn)相除法求兩自然數(shù)m、n的最大公約數(shù)。(1)
首先,對于已知兩數(shù)m、n,比較并使得m>n;(2)
m除以n得余數(shù)r;(3)
若r=0,則n為求得的最大公約數(shù),算法結(jié)束;否則執(zhí)行步驟(4)(4)
mnnr再重復(fù)執(zhí)行(2)第二十九頁,共七十七頁,2022年,8月28日算法實(shí)現(xiàn)循環(huán)實(shí)現(xiàn)PrivateFunctionGCD(ByValmAsLong,ByValnAsLong)AsLongDimtempAsLongIfm<nThentemp=m:m=n:n=tempDimrAsLongDor=mModnIfr=0ThenExitDom=nn=rLoopGCD=n EndFunction第三十頁,共七十七頁,2022年,8月28日遞歸實(shí)現(xiàn)PrivateFunctionGCD(ByValmAsLong,ByValnAsLong)AsLongDimtempAsLongIfm<nThentemp=m:m=n:n=tempDimrAsLongr=mModnIfr=0ThenGCD=nElsem=nn=rGCD=GCD(m,n)EndIfEndFunction第三十一頁,共七十七頁,2022年,8月28日2)
最小公倍數(shù)
m×n÷最大公約數(shù)3)
互質(zhì)數(shù) 最大公約數(shù)為1的兩個正整數(shù)解題技巧該算法需要識記!這種類型題目的擴(kuò)展是約數(shù)和因子題型。第三十二頁,共七十七頁,2022年,8月28日2、實(shí)戰(zhàn)練習(xí)
1)
補(bǔ)充代碼(2003春二(9)) 給定一個十進(jìn)制正整數(shù),找出小于它并與其互質(zhì)的所有正整數(shù)(所謂互質(zhì)數(shù)是指最大公約數(shù)為1的兩個正整數(shù),下圖是程序執(zhí)行畫面)。第三十三頁,共七十七頁,2022年,8月28日 OptionExplicit PrivateFunctiongcd((1))AsInteger DimrAsInteger r=mModn Ifr=0Then gcd=n Else m=n:n=r
(2)
EndIf EndFunction PrivateSubCommand1_Click() DimnAsInteger,pAsInteger n=Val(Text1) Forp=n-1To2Step-1 If
(3)
ThenList1.AddItemp Nextp EndSub第三十四頁,共七十七頁,2022年,8月28日2)
編程題(2002秋上機(jī)試卷01) 生成一個三行八列的二維數(shù)組A(3,8),其中前兩行元素產(chǎn)生的方法是:用初值X1=26及公式Xi+1=(25×Xi+357)Mod1024,產(chǎn)生一個數(shù)列:X1、X2、......、X16。其中X1~X8作為A的第一行元素;X9~X16作為A的第二行元素;A的第三行元素值取前兩行同列元素的最大公約數(shù)。最后按圖示格式顯示在圖片框中。第三十五頁,共七十七頁,2022年,8月28日VB常用算法(六)排序1、算法說明1)
選擇法排序
(1)
從n個數(shù)中選出最小數(shù)的下標(biāo),出了循環(huán),將最小數(shù)與第一個數(shù)交換位置;(2)
除第一個數(shù)外,在剩下的n-1個數(shù)中再按方法(1)選出次小的數(shù),與第二個數(shù)交換位置;(3)
以此類推,最后構(gòu)成遞增序列。第三十六頁,共七十七頁,2022年,8月28日程序代碼如下:PrivateSubxzPaiXu(a()AsDouble,shengAsBoolean)'a為需要排序的數(shù)組,sheng為True則為升序排列,為False,則為降序排列。
DimiAsInteger,jAsIntegerDimtempAsDoubleDimmAsIntegerFori=LBound(a)ToUBound(a)-1'進(jìn)行數(shù)組大小-1輪比較
m=i'在第i輪比較時,假定第
'i個元素為最值元素
Forj=i+1ToUBound(a)'在剩下的元素中找出最
'值元素的下標(biāo)并記錄在m中
IfshengThen'若為升序,則m記錄最小元素
'下標(biāo),否則記錄最大元素下標(biāo)
Ifa(j)<a(m)Thenm=jElseIfa(j)>a(m)Thenm=jEndIfNextj'將最值元素與第i個元素交換
temp=a(i)a(i)=a(m)a(m)=tempNextiEndSub第三十七頁,共七十七頁,2022年,8月28日2)
冒泡法排序選擇排序法在每一輪排序時找最值元素的下標(biāo),出了內(nèi)循環(huán)(一輪排序結(jié)束),再交換最小數(shù)的位置;而冒泡法在每一輪排序時將相鄰的數(shù)比較,當(dāng)次序不對就交換位置,出了內(nèi)循環(huán),最值數(shù)已經(jīng)冒出。第三十八頁,共七十七頁,2022年,8月28日PrivateSubmpPaiXu(a()AsDouble,shengAsBoolean)'a為需要排序的數(shù)組,sheng為True則為升序排列,為False,則為降序排列。
DimiAsInteger,jAsIntegerDimtempAsDoubleDimmAsIntegerFori=LBound(a)ToUBound(a)-1'進(jìn)行n-1輪比較
Forj=UBound(a)Toi+1Step-1'從n到i個元素兩兩進(jìn)行比較
IfshengThen'若次序不對,馬上進(jìn)行交換
Ifa(j)<a(j-1)Thentemp=a(j)a(j)=a(j-1)a(j-1)=tempEndIfElseIfa(j)>a(j-1)Thentemp=a(j)a(j)=a(j-1)a(j-1)=tempEndIfEndIfNextj'出了內(nèi)循環(huán),一輪排序結(jié)束
'最值元素冒到最上邊
NextiEndSub第三十九頁,共七十七頁,2022年,8月28日實(shí)戰(zhàn)練習(xí)1)
補(bǔ)充代碼(2003秋二(10)) 下面是一個采用拉鋸式排序法對數(shù)組元素按升序進(jìn)行排序的程序,所謂“拉鋸式排序法”是這一遍把最小的元素從下到上送到最上的位置,下一遍則是從上到下把最大的元素送到最下的位置。
OptionBase1 PrivateSubCommand1_Click()
Dima(10)AsInteger,iAsInteger
Fori=1To10
a(i)=Int(Rnd*10)+1
Text1=Text1&Str(a(i))
Nexti
Callshaker_sort(a)
Fori=1To10
Text2=Text2&Str(a(i))
Nexti EndSub第四十頁,共七十七頁,2022年,8月28日PrivateSubShaker_sort(k()AsInteger)
DimiAsInteger,cAsInteger,dAsInteger
DimtAsInteger
c=1
d=
(1)
Do
For
(2)
Step-1
Ifk(i-1)>k(i)Then
t=k(i-1):k(i-1)=k(i):k(i)=t
EndIf
Nexti
(3)
Fori=c+1Tod
If
(4)Then
t=k(i-1):k(i-1)=k(i):k(i)=t
EndIf
Nexti
d=d-1
LoopWhile
(5)
EndSub第四十一頁,共七十七頁,2022年,8月28日2)
編程題(2002秋上機(jī)試卷04) 把文本框輸入的字符串按降序添加到列表框中。第四十二頁,共七十七頁,2022年,8月28日VB常用算法(七)
數(shù)組元素插入刪除
算法說明
數(shù)組中元素的插入和刪除一般是在已固定序列的數(shù)組中插入或刪除一個元素,使得插入或刪除操作后的數(shù)組還是有序的。
基本思路:首先要找到插入位置或要刪除的元素。1)
插入
第四十三頁,共七十七頁,2022年,8月28日代碼如下:PrivateSubCommand1_Click()Dima(10)AsIntegerDimiAsInteger,kAsIntegerFori=0To9'生成數(shù)組
a(i)=i*3+1Printa(i);NextiPrintPrint"插入14"Fork=0To9'查找插入14在數(shù)組中的位置
If14<a(k)ThenExitForNextkFori=9TokStep-1'從最后元素開始逐個后移,騰出位置
a(i+1)=a(i)Nextia(k)=14'插入數(shù)14Fori=0To10Printa(i);NextiPrintEndSub第四十四頁,共七十七頁,2022年,8月28日2)
14710131619222528第四十五頁,共七十七頁,2022年,8月28日代碼如下:Dima()asinteger….ReDima(1ton)…Fori=k+1tona(i-1)=a(i)NextIRedimpreservea(1ton-1)第四十六頁,共七十七頁,2022年,8月28日實(shí)戰(zhàn)練習(xí)1)
補(bǔ)充代碼(2001秋二(8))
C盤根目錄下文件Data4.txt的內(nèi)容是:2,4,6,8,10,1,3,5,7,9。下面程序的功能是將文件后半部分的奇數(shù)分別按序插入到前半部分的適當(dāng)位置,得到的新數(shù)列是:12345678910。(實(shí)現(xiàn)方法:第一次調(diào)整后的數(shù)列是:12468103579第二次調(diào)整后的數(shù)列是:12346810579)。第四十七頁,共七十七頁,2022年,8月28日OptionExplict PrivateSubForm_Click() DimA(10)AsInteger,iAsInteger,JAsInteger Open"c:\Data4.txt"ForInputAs#12 Do
(1)
J=J+1 Input#12,A(J) Loop CallInsert(A) Fori=1To10 PrintA(i); Nexti Print Close#12 EndSub第四十八頁,共七十七頁,2022年,8月28日PrivateSubInsert(A()AsInteger) DimiAsInteger,PutpAsInteger,JAsInteger DimGetpAsInteger,NAsInteger,TemAsInteger N=UBound(A)/2 Putp=1 Getp=N+1 Fori=1ToN Tem=A(Getp) ForJ=GetpToPutp+1Step-1
(2)
NextJ A(Putp)=Tem Getp=Getp+1 Putp=
(3)
Nexti EndSub第四十九頁,共七十七頁,2022年,8月28日2)
補(bǔ)充代碼(2001春二(8)) 下面程序得功能是將無序數(shù)組中相同得數(shù)只保留一個,其余得刪除,并輸出經(jīng)過刪除后的數(shù)組元素,刪除相同數(shù)是通過將該數(shù)組元素后面的元素在數(shù)組內(nèi)依次前移替換前一個元素的值實(shí)現(xiàn)的。數(shù)組各元素的值從文件data.txt中讀取。第五十頁,共七十七頁,2022年,8月28日OptionExplict OptionBase1 PrivateSubForm_Click() DimIAsInteger,JAsInteger,KAsInteger DimA()AsInteger,TAsInteger,MAsInteger Open"c:\mydocuments\2000test\data.txt"ForInputAs#1 DoWhile
(1)
I=I+1 RedimPreserveA(I) Input#1,A(I) Loop M=1:T=
(2)
DoWhileM<T I=M+1 DoWhileI<=T IfA(I)=A(M)Then ForJ=1To
(3)
A(J)=A(J+1) NextJ T=T-1 Else I=
(4)
EndIf Loop M=M+1 Loop RedimPreserveA(T) ForI=1ToT PrintA(I); NextI PrintEndSub第五十一頁,共七十七頁,2022年,8月28日VB常用算法(八)查找算法說明1)
順序查找 逐個元素找,如果有,則記錄位置,然后跳出循環(huán);否則,查找失敗。 代碼如下:
PrivateSubSearch(a(),ByValKey,IndexAsInteger) Dimi% Fori=LBound(a)ToUBound(a) Ifa(i)=KeyThen'找到,將元素下標(biāo)保存在index中并結(jié)束查找
Index=i ExitSub EndIf Nexti Index=-1'若沒找到,則index值為-1 EndSub第五十二頁,共七十七頁,2022年,8月28日2)
二分法查找
順序查找效率低下,當(dāng)數(shù)組有序排列時,可以使用二分法查找提高效率。
算法思想:第五十三頁,共七十七頁,2022年,8月28日代碼如下:
PrivateSubbirSearch(a(),ByVallow%,ByValhigh%,ByValKey,index%) DimmidAsInteger Iflow>highThen'沒有查找到
index=-1 ExitSub EndIf mid=(low+high)\2'取查找區(qū)間的中點(diǎn)
IfKey=a(mid)Then'查找到,返回下標(biāo)
index=mid ExitSub ElseIfKey<a(mid)Then'查找區(qū)間在上半部分
high=mid-1 Else low=mid+1'查找區(qū)間在下半部分
EndIf CallbirSearch(a,low,high,Key,index)'遞歸調(diào)用查找函數(shù)
EndSub第五十四頁,共七十七頁,2022年,8月28日調(diào)用方法:PrivateSubCommand1_Click()Dima(11) a(1)=5:a(2)=13:a(3)=19:a(4)=21:a(5)=37a(6)=56:a(7)=64:a(8)=75:a(9)=80:a(10)=88:a(11)=92DimindAsIntegerCallbirSearch(a,LBound(a),UBound(a),21,ind)PrintindEndSub第五十五頁,共七十七頁,2022年,8月28日實(shí)戰(zhàn)練習(xí)
補(bǔ)充代碼(2002春二(9))
C盤根目錄下stu.txt文件中以下的格式保存著學(xué)生姓名及班號信息。本程序的功能是:讀取該文件中的數(shù)據(jù),再利用InputvBox輸入要查找的學(xué)生姓名,通過順序查找,給出找到或找不到的信息。附圖是某同學(xué)被找到時顯示的信息窗口。張文,機(jī)械01
李明,機(jī)械01
王文卉,機(jī)械01…
何宇宙,電子02第五十六頁,共七十七頁,2022年,8月28日OptionExplicit OptionBase1 PrivateSubForm_click() Dimstu()AsString,glass()AsString,iAsInteger DimnAsInteger,nameAsString,kAsInteger Open"c:\stu\stu.txt"ForInputAs#11 DoWhile(1)
(2)
ReDimPreservestu(n),glass(n) Input#11,stu(n),glass(n) Loop name=InputBox("輸入欲查找的學(xué)生姓名:") Callsearch(name,stu,k) Ifk<=nThen MsgBox(3)
Else MsgBox"無此人。" EndIf Close#11 EndSub第五十七頁,共七十七頁,2022年,8月28日PrivateSubsearch(nameAsString,stu()AsString,kAsInteger) DimiAsInteger Fori=1ToUBound(stu) Ifname=stu(i)Then
(4)
EndIf Nexti
(5)
EndSub第五十八頁,共七十七頁,2022年,8月28日VB常用算法(九)數(shù)學(xué)應(yīng)用算法說明1)
初等數(shù)學(xué)
遞推法又稱為“迭代法”,其基本思想是把一個復(fù)雜的計算過程轉(zhuǎn)化為簡單過程的多次重復(fù)。每次重復(fù)都在舊值的基礎(chǔ)上遞推出新值,并由新值代替舊值。問題:猴子吃桃子小猴子有若干桃子,第一天吃掉一半多一個;第二天吃掉剩下的一半多一個…..;如此,到第七天早上要吃時,只剩下一個桃子。問小猴子一開始共有多少桃子?分析:可以最后一天桃子數(shù)推出倒數(shù)第二天的桃子數(shù);再從倒數(shù)第二天推出倒數(shù)第三天桃子數(shù)………..設(shè)第n天桃子數(shù)為xn,前一天桃子數(shù)是:xn-1,則有關(guān)系:xn=xn-1/2-1第五十九頁,共七十七頁,2022年,8月28日程序如下:PrivateSubCommand1_Click()Dimn%,i%x=1'第七天桃子數(shù)
Print"第七天桃子數(shù):1只"Fori=6To1Step-1x=(x+1)*2Print"第"&i&"天桃子數(shù):"&x&"只"NextiEndSub
第六十頁,共七十七頁,2022年,8月28日窮舉法
又稱枚舉法,即將所有可能情況一一測試,判斷是否滿足條件,一般用循環(huán)實(shí)現(xiàn)。 問題:百元買雞問題。 假定小雞每只5角;公雞每只2元;母雞每只3元?,F(xiàn)在有100元,要求買100只雞,編程列出所有可能的購雞方案。分析:設(shè)母雞、公雞、小雞分別x、y、z只,則有:x+y+z=1003x+2y+0.5z=100
程序一:
PrivateSubCommand1_Click() Dimx%,y%,z% Forx=0To100 Fory=0To100 Forz=0To100 Ifx+y+z=100And3*x+2*y+0.5*z=100Then Printx,y,z EndIf Nextz Nexty Nextx EndSub第六十一頁,共七十七頁,2022年,8月28日程序二(優(yōu)化) PrivateSubCommand1_Click() Dimx%,y% Forx=0To33 Fory=0To50 If3*x+2*y+0.5*(100-x-y)=100Then Printx,y,100-x-y EndIf Nexty Nextx EndSub第六十二頁,共七十七頁,2022年,8月28日2)
高等數(shù)學(xué) 求積分 近似計算積分:s=∫13(x3+2x+5)dx
代碼如下:
PublicFunctionf(ByValx!)'被積函數(shù)
f=x*(x*x+2)+5 EndFunction第六十三頁,共七十七頁,2022年,8月28日PublicFunctiontrapez(ByVala!,ByValb!,ByValn%)AsSingle 'b、a分別為積分上下限,n為等分?jǐn)?shù)
Dimsum!,h!,x! h=(b-a)/n sum=(f(a)+f(b))/2 Fori=1Ton-1 x=a+i*h sum=sum+f(x) Nexti trapez=sum*h EndFunction
調(diào)用:
PrivateSubCommand1_Click() Printtrapez(1,3,30) EndSub第六十四頁,共七十七頁,2022年,8月28日數(shù)論綜合題 此類題目比較廣泛,必須給以足夠重視。 歷年題目有:平方數(shù)、零巧數(shù)、擬互滿數(shù)、回文數(shù)、酉完數(shù)、完數(shù)、幸運(yùn)數(shù)、逆序數(shù)以及無暇素數(shù)、超級素數(shù)、因子和等。第六十五頁,共七十七頁,2022年,8月28日實(shí)戰(zhàn)練習(xí)
1)
補(bǔ)充代碼(2002秋二(10))
找出由兩個不同數(shù)字組成的平方數(shù),并將結(jié)果按圖中的格式顯示在列表框List1中。第六十六頁,共七十七頁,2022年,8月28日OptionExplicit PrivateSubCommand1_Click() DimIAsLong,NAsLong ForI=11To300
(1)
IfVerify(N)Then
(2)
EndIf NextI EndSub第六十七頁,共七十七頁,2022年,8月28日PrivateFunctionVerify(
(3))AsBoolean DimA(0To9)AsInteger,IAsInteger,JsAsInteger DoWhileN<>0
(4)
N=N\10 Loop ForI=0To9 Js=Js+A(I) NextI
(5)
EndFunction第六十八頁,共七十七頁,2022年,8月28日1)
編程題(2004秋上機(jī)試卷08) 一個正整數(shù)被稱為奇妙平方數(shù),如果此數(shù)的平方與它的逆序數(shù)的平方互為逆序數(shù)。例如,
12^2=144,21^2=441,12與
21互逆
,144與
441互逆
,12就是奇妙平方數(shù)。找出
1-300以內(nèi)所有的奇妙平方數(shù)。
第六十九頁,共七十七頁,2022年,8月28日VB常用算法(十)
字符處理(統(tǒng)計與加密)算法說明
1)
加密解密
最簡單的加密方法是:將每個字母加一序數(shù),例如5,這時:“A”→”F”,”a”→”f”,”B”→”G”,”b”→”g”……”Y”→”D”,”y”→”d”,”Z”→”E”,”z”→”e”解密是加密的逆操作。
界面如下:
第七十頁,共七十七頁,2022年,8月28日代碼如下: OptionExplicit PrivateSubCommand1_Click() DimstrInput$,Code$,Record$,cAsString*1 Dimi%,length%,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- u盤供貨合同范本
- 住宅贈予合同范本
- 農(nóng)業(yè)種子買賣協(xié)議合同范本
- 化妝服務(wù)合同范本簡易
- 業(yè)務(wù)指導(dǎo)合同范本
- 2024年招商銀行呼和浩特分行招聘考試真題
- 加盟學(xué)員簽約合同范本
- 買土地合同范本
- 加油站聘用站長合同范本
- 借款項目合同范本
- 人工智能與自動駕駛技術(shù)
- 醫(yī)院放射診療中的輻射防護(hù)常識學(xué)習(xí)培訓(xùn)
- 城市排水系統(tǒng)雨污分流改造
- 法學(xué)涉外法治方向課程設(shè)計
- 廣州市2023年中考:《道德法治》考試真題與參考答案
- 家政服務(wù)員培訓(xùn)課件
- 無人駕駛技術(shù)的傳感器技術(shù)應(yīng)用
- 公會掛靠協(xié)議
- 信息技術(shù)開學(xué)第一課(課堂常規(guī)紀(jì)律)
- 高程測量-三角高程測量(工程測量課件)
- 新視野大學(xué)英語(第四版)讀寫教程4(思政智慧版)課件 Unit1 Urban development Section B
評論
0/150
提交評論