VB常用算法總結(jié)大全.ppt_第1頁(yè)
VB常用算法總結(jié)大全.ppt_第2頁(yè)
VB常用算法總結(jié)大全.ppt_第3頁(yè)
VB常用算法總結(jié)大全.ppt_第4頁(yè)
VB常用算法總結(jié)大全.ppt_第5頁(yè)
已閱讀5頁(yè),還剩78頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

常用算法總結(jié)算法是對(duì)某個(gè)問(wèn)題求解過(guò)程的描述,一、基本算法1.累加、連乘,1100的5或7的倍數(shù)的和Sum=0Fori=1To100IfiMod5=0OriMod7=0ThenSum=Sum+iEndIfNextiPrintSum,310的乘積t=1Fori=3To10t=t*iNextiPrintt,思考:若把循環(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連乘:n=n*i循環(huán)體外對(duì)連乘積變量置1n=1PrivateSubForm_Click()Dimi%,neEndSub,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ù)。Form=2To100Fori=2Tom-1If(mModi)=0ThenexitforNextiifIm-1thenmsgboxstr(m)+”是素?cái)?shù)”Elsemsgboxstr(m)+”不是素?cái)?shù)”EndIfNextm,m是否為素?cái)?shù),求100以內(nèi)的素?cái)?shù),3.窮舉法“窮舉法”也稱為“枚舉法”或“試湊法”,即將可能出現(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=1003x+2y+0.5z=100三個(gè)未知數(shù),兩個(gè)方程,此題有若干個(gè)解。解決此類問(wèn)題采用“試湊法”,把每一種情況都考慮到。方法一:最簡(jiǎn)單三個(gè)未知數(shù)利用三重循環(huán)來(lái)實(shí)現(xiàn)。方法二:從三個(gè)未知數(shù)的關(guān)系,利用兩重循環(huán)來(lái)實(shí)現(xiàn)。,方法一:PrivateSubForm_click()DimX%,y%,z%ForX=0To100ForY=0To100ForZ=0To100IfX+y+z=100And3*x+2*y+.5*z=100ThenPrintX,y,zEndIfNextZNextYNextXEndsub,方法二:ForX=0To33ForY=0To50Z=100-x-yIf3*x+2*y+.5*z=100ThenPrintX,Y,ZEndIfNextYNextX,4.遞推法“遞推法”又稱為“迭代法”,其基本思想是把一個(gè)復(fù)雜的計(jì)算過(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ù)是xn-1。,已知:當(dāng)N=7第7天的桃子數(shù)為1,則第6天的桃子數(shù)由公式得4個(gè),依次類推,可求得第1天的桃子數(shù)。程序如下:Privatesubform_click()DimIasintegerx=1print“第7天的桃子數(shù)為:1只”forI=6to1step1x=(x+1)*2print“第”;I;”天的桃子數(shù)為:”;x;”只”nextIEndsub,5.最小、最大值在若干個(gè)數(shù)中求最大值,一般先假設(shè)一個(gè)較小的數(shù)為最大值的初值,若無(wú)法估計(jì)較小的值,則取第一個(gè)數(shù)為最大值的初值;然后將每一個(gè)數(shù)與最大值比較,若該數(shù)大于最大值,將該數(shù)替換為最大值;依次逐一比較。例隨機(jī)產(chǎn)生10個(gè)100200之間的數(shù),求最大值。,PrivateSubCommand1_Click()Max=100Fori=1To10 x=Int(Rnd*101)+100Printx;IfxMaxThenMax=xNextiPrintPrint最大值=;MaxEndSub,6、求最大公約數(shù),PrivateSubCommand1_Click()Dimm,n,rAsLongm=Val(Text1.Text)取數(shù)據(jù)Mn=Val(Text2.Text)取數(shù)據(jù)NIfmInt(m)ormInt(n)orn1ThenText3.Text=數(shù)據(jù)錯(cuò)誤!ElseDo求最大公約數(shù)r=mModnm=nn=rLoopUntilr=0Text3.Text=CStr(m)輸出最大公約數(shù)EndIfEndSub,判斷數(shù)據(jù)是否合法,PrivateSubForm_Click()Fori=1To9Forj=1To9Printi;*;j;=;i*j;NextjPrintNextiEndSub執(zhí)行本程序,窗體上將顯示九九乘法表。,Forj=1Toi,7、關(guān)于循環(huán)嵌套(一個(gè)循環(huán)體內(nèi)又包含了一個(gè)完整的循環(huán)結(jié)構(gòu)稱為循環(huán)的嵌套.),換行!,作用?,例:xh2.vbpSsfrm.frm,思考:打印上三角或下三角程序如何改動(dòng)?要打印下三角?8.打印圖形見下頁(yè),編寫程序打印如右邊圖形:PrivateSubForm_Click()Fori=1To4PrintSpace(5-i);Forj=1To2*i-1Print*;NextjPrintNextiPrintEndSub,*,*,外循環(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í)材料P334.4練習(xí)題第1題14.報(bào)數(shù)問(wèn)題P114例5-1215.判斷回文數(shù)復(fù)習(xí)材料P41第10題或P81習(xí)題4,16.求自然數(shù)的因子P81習(xí)題5,PrivateSubCommand1_Click()DimaAsInteger,I%a=InputBox(輸入一個(gè)自然數(shù))Label1.Caption=Str(a)+的所有因子:ForI=1Toa-1IfaModI=0ThenList1.AddItem(Str(I)EndIfNextEndSub,二、數(shù)組的算法,1.數(shù)組元素的賦初值(1)用循環(huán)Fori=1To10A(i)=0NextiforI=1to10forJ=1to10B(I,J)=0nextJnexti,(2)Array函數(shù)DimibAsVariantib=Array(abc,def,67)Fori=0ToUBound(ib)Picture1.Printib(i);Nexti,注意:(1)利用Array對(duì)數(shù)組各元素賦值,聲明的數(shù)組是可調(diào)數(shù)組或連圓括號(hào)都可省,并且其類型只能是Variant。(2)數(shù)組的下階為零,上界由Array函數(shù)括號(hào)內(nèi)的參數(shù)個(gè)數(shù)可決定,也可通過(guò)函數(shù)Ubound獲得。,2數(shù)組的賦值在VB6.0中,提供了數(shù)組直接對(duì)數(shù)組的賦值。例如:Dima()AsVariant,b()AsVariant,i%a=Array(1,2,3,4,5)ReDimb(UBound(a)b=a,Fori=0ToUBound(a)b(i)=a(i)Nexti,相當(dāng)于,注意:賦值號(hào)左邊的數(shù)組只能聲明為Variant的可調(diào)數(shù)組或簡(jiǎn)單變量。,3.數(shù)組的輸出輸出方陣SC中的下三角元素Fori=0To4Forj=0ToIj=0to4則輸出整個(gè)數(shù)組sc(i,j)=i*5+jPrintsc(i,j);NextjPrint換行NextI,4.將數(shù)組中各元素交換(P115習(xí)題1)Fori=1To152t=A(i)A(i)=A(10-i+1)A(10-i+1)=tNexti,5、對(duì)數(shù)組的行/列操作(行、列的和),P115習(xí)題3:求二維數(shù)組每行的和數(shù)與每列的和數(shù),數(shù)組元素為19之間的隨機(jī)數(shù)。,OptionexplicitOptionbase1生成數(shù)組PrivateSubCommand1_Click()ForI=1To4ForJ=1To5A(I,J)=Int(9*Rnd)+1Picture1.PrintA(I,J);NextJPicture1.PrintNextIEndSub,求列和PrivateSubCommand2_Click()ForJ=1To5L(J)=0ForI=1To4L(J)=L(J)+A(I,J)NextIText2=Text2nextjprintNextIEndsub除法:除法操作必須先判別分母不為零,然后再進(jìn)行對(duì)應(yīng)元素的除法操作。,7、求數(shù)組靠邊元素之和,不靠邊元素之和P115習(xí)題6,Optionbase1Privatesubform_click()DimX%(4,5),s%(4),sum%ForI=1to4s(I)=0forj=1to5x(I,j)=inextjNextiForJ=1to5S(1)=S(1)+X(1,J)S(4)=S(4)+X(4,J)Nextj,11111222223333344444,ForI=2to3S(2)=S(2)+X(I,1)S(3)=S(3)+X(I,5)NextiforI=1to4SUM=SUM+S(I)NextiprintSUMEndsub,8,求數(shù)組對(duì)角線元素之積或和,Optionbase1Privatesubform_click()DimX%(4,4),S1NextJPrintNextIForI=1To5MAXI(I)=A(I,1)ForJ=1To8IfMAXI(I)cj(j,1)Thentemp=cj(i,1):cj(i,1)=cj(j,1):cj(j,1)=temptemp=cj(i,2):cj(i,2)=cj(j,2):cj(j,2)=tempEndIfNextNextEndSub,輸出名次過(guò)程PrivateSuboutput(cj()AsSingle)DimjAsInteger,pAsIntegerp=1Print第;1;名是;cj(1,2);號(hào)運(yùn)動(dòng)員,成績(jī)是:;cj(1,1)Forj=2To8Ifcj(j,1)=cj(j-1,1)ThenPrint第;p;名是;cj(j,2);號(hào)運(yùn)動(dòng)員,成績(jī)是:;cj(j,1)ElsePrint第;j;名是;cj(j,2);號(hào)運(yùn)動(dòng)員,成績(jī)是:;cj(j,1)p=jEndIfNextPrintEndSub,窗體事件過(guò)程輸入運(yùn)動(dòng)員成績(jī)PrivateSubForm_Click()DimiAsIntegerDimproAsString,cj(8,2)AsSingleRandomizeFori=1To8pro=請(qǐng)輸入第+Str(i)+位運(yùn)動(dòng)員的成績(jī):cj(i,1)=InputBox(pro)cj(i,2)=iPrintcj(i,1);NextPrintPrintCallsort(cj)Calloutput(cj)EndSub,15.數(shù)組元素的插入與刪除(1)插入排序復(fù)習(xí)材料P50第23在有序數(shù)組a(1ton)(原有n-1個(gè)元素)插入一個(gè)值Key元素,算法:查找要插入的位置k(1=k=n-1),騰出位置,把最后一個(gè)元素開始到第K個(gè)元素往后移動(dòng)一個(gè)位置,第k個(gè)元素的位置騰出,就可將數(shù)據(jù)Key插入,Privatesubcommand1_clickDima%(11),I%,J%,X%ForI=1to10a(I)=I*5+1通過(guò)程序自動(dòng)生成有規(guī)律的數(shù)組NextIX=Inputbox(“輸入任意數(shù)X:”)ForI=1to10查找欲插入數(shù)X在數(shù)組中的位置ifXa(I)thenexitfor找到插入的位置下標(biāo)為INextIForJ=11toI+1step1從最后元素開始往后移,騰出位置a(J)=a(J-1)NextJA(I)=XEndsub,(2)刪除重復(fù)元素見P113例5-11首先也是要找到欲刪除的元素的位置k;然后從k+1到n個(gè)位置開始向前移動(dòng);最后將數(shù)組元素減1。例如,要將值為13的元素刪除的過(guò)程為:,Dima()asinteger聲明為動(dòng)態(tài)數(shù)組.Redima(1ton)聲明為有N個(gè)元素的數(shù)組查找到要?jiǎng)h除的元素下標(biāo)為KForI=k+1toN從K+1個(gè)元素開始往前移A(I-1)=a(I)NextI最后一個(gè)元素的位置空出,利用數(shù)組重新聲明減少一個(gè)元素,但要保留原來(lái)值Redimpreservea(1ton-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)從數(shù)組的最后一個(gè)元素開始到下標(biāo)j依次往后移,使j位置空出;(3)將x放入位置j處,一個(gè)數(shù)據(jù)插入完成;(4)有若干個(gè)數(shù)重復(fù)(1)(3)。對(duì)于若干個(gè)數(shù)輸入,只要調(diào)用插入排序過(guò)程即可。,DimnAsIntegerSubinsert(a()AsSingle,ByValx!)Dimi%,j%j=1DoWhileja(j)j=j+1LoopFori=n-1TojStep-1a(i+1)=a(i)Nextia(j)=xEndSub,PrivateSubText1_KeyPress(KeyAsciiAsInteger)Staticbb!(1To20)Dimi%Ifn=20ThenMsgBox數(shù)據(jù)太多!,1,警告EndEndIfIfKeyAscii=13Thenn=n+1Callinsert(bb(),Val(Text1)Picture1.PrintText1Fori=1TonPicture2.Printbb(i);NextiPicture2.PrintText1=EndIfEndSub,數(shù)組的合并排序,從鍵盤讀取數(shù)組a和b(各5個(gè)元素),a,b都是嚴(yán)格遞增的(即元素從小到大排列,且無(wú)重復(fù)元素),將a,b合并成c數(shù)組,使C也嚴(yán)格遞增。若a,b中有相同的元素只保留一個(gè),最后輸出數(shù)組C。編寫通用過(guò)程OutPut,在窗體上打印數(shù)組。,OptionExplicitDima(5)AsInteger,b(5)AsInteger,c()AsIntegerPrivateSuboutput(d()AsInteger)輸出數(shù)組的通用過(guò)程DimiAsIntegerFori=1ToUBound(d)Printd(i);NextiPrintEndSub,PrivateSubCommand1_Click()數(shù)組輸入DimiAsIntegerFori=1To5a(i)=InputBox(“輸入數(shù)組a(“+str(I)+”)”)NextiPrint數(shù)組A:Calloutput(a)Fori=1To5b(i)=InputBox(“輸入數(shù)組b(“+str(I)+”)”)NextiPrint數(shù)組B:Calloutput(b)EndSub,PrivateSubCommand2_Click()數(shù)組合并輸出DimpAsInteger,qAsInteger,rAsIntegerDimiAsIntegerp=1:q=1:r=1DoWhilepb(q)Thenc(r)=b(q)r=r+1q=q+1ElseIfa(p)Asc(z)Theniasc=iasc-26code=code+Chr$(iasc)CaseElse當(dāng)?shù)贗個(gè)字符為其他字符時(shí)不加密code=code+cEndSelectNextiText2=code顯示加密后的字符串EndSub,PrivateSubCommand3_Click()清屏Text1=Text2=Text3=Text1.SetFocusEndSub,(3).字符統(tǒng)計(jì)輸入一串字符,統(tǒng)計(jì)各字母出現(xiàn)的次數(shù),大小寫字母不區(qū)分。分析:1.統(tǒng)計(jì)26個(gè)字母出現(xiàn)的個(gè)數(shù),先聲明一個(gè)具有26個(gè)元素的數(shù)組,每個(gè)元素的下標(biāo)表示對(duì)應(yīng)的字母,元素的值表示對(duì)應(yīng)字母出現(xiàn)的次數(shù)。2.從輸入的字符串中逐一取出字符,轉(zhuǎn)換成大寫字符(使得大小寫不區(qū)分),進(jìn)行判斷。3.運(yùn)行界面:,Privatesubcommand1_ClickDima(1to26)asInteger,casString*1Le=len(text1)ForI=1Tolec=UCase(Mid(Text1,I,1)Ifc=AAndc0thenPicture1.print“”;chr(j+64);“=”;a(j);NextjEndsub,(4).字符串處理編寫一個(gè)英文打字訓(xùn)練的程序.要求如下:(1)在標(biāo)簽框內(nèi)隨機(jī)產(chǎn)生30個(gè)字母的范文;(2)當(dāng)焦點(diǎn)進(jìn)入文本框時(shí)開始計(jì)時(shí),并顯示當(dāng)時(shí)時(shí)間;(3)在鍵入文本框按產(chǎn)生的范文輸入相應(yīng)的字母;(4)當(dāng)鍵入滿了30個(gè)字母結(jié)束計(jì)時(shí),禁止向文本框輸入內(nèi)容,鍵入的字符逐一范文比較,顯示打字的速度和正確率。,PrivateSubCommand1_Click()產(chǎn)生30個(gè)字母的范文RandomizeText1=Fori=1To30a=Chr$(Int(Rnd*25)+65)隨機(jī)產(chǎn)生大寫字母Text1=Text1+a產(chǎn)生的大寫字母送入范文框NextiEndSub,PrivateSubCommand2_Click()EndEndSubPrivateSubText2_GotFocus()輸入文本框獲取焦點(diǎn),開始計(jì)時(shí)t=TimeEndSub,PrivateSubText2_KeyPress(KeyAsciiAsInteger)IfLen(Text2)=30Then輸入滿30個(gè)字符t2=DateDiff(“s”,t,Time)計(jì)算速度Text3=t2&“秒”顯示速度Text2.Locked=True不允許修改y=0:n=0Fori=1To30比較正確率IfMid(Text1,i,1)=Mid(Text2,i,1)Theny=y+1Elsen=n+1EndIfNextiy=y/(y+n)*100Text4=y&%EndIfEndSub,5.密碼翻譯實(shí)驗(yàn)P55實(shí)驗(yàn)6-66.字符串顛倒后輸出實(shí)驗(yàn)P52實(shí)驗(yàn)6-4,四、數(shù)值計(jì)算算法,(1).高次方程求根有牛頓迭代法、二分法、弦截法等(1)牛頓迭代法迭代公式:思想:對(duì)方程給定一個(gè)初值x0作為方程的近似根,利用迭代公式,求得x1,當(dāng)x1為求得的近似根,否則x1作為x0再迭代。,P78例4-9用牛頓迭代法求方程xex-1=0在0.5b附近的根。PrivateSubComma

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論