




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
常用算法總結—算法是對某個問題求解過程的描述
一、基本算法1.累加、連乘
1~100的5或7的倍數的和
Sum=0Fori=1To100IfiMod5=0OriMod7=0Then
Sum=Sum+iEndIfNextiPrintSum3~10的乘積
t=1Fori=3To10
t=t*iNextiPrintt思考:若把循環體前面置各變量初值的語句放在循環體內,程序運行時會產生什么情況?例求自然對數e的近似值,要求其誤差小于0.00001,近似公式為:
該例題涉及兩個問題:
(1)用循環結構求級數和的問題。本例根據某項值的精度來控制循環的結束與否。(2)累加:e=e+t循環體外對累加和的變量清零e=0
連乘:n=n*i循環體外對連乘積變量置1n=1
PrivateSubForm_Click()Dimi%,n&,t!,e!e=0:n=1
‘e存放累加和、n存放階乘
i=0:t=1
‘i計數器、t第i項的值
DoWhilet>0.00001e=e+t:i=i+1
‘累加、連乘n=n*i:t=1/n
LoopPrint"計算了";i;"項的和是";eEndSub2.求素數
判別某數m是否為素數最簡單的方法是:對于m從i=2,3,…,m-1判別m能否被i整除,只要有一個能整除,m不是素數,否則m是素數。Form=2To100Fori=2Tom-1
If(mModi)=0ThenexitforNextiifI>m-1then msgboxstr(m)+”是素數”Else msgboxstr(m)+”不是素數”EndIfNextmm是否為素數求100以內的素數3.窮舉法
“窮舉法”也稱為“枚舉法”或“試湊法”,即將可能出現的各種情況一一測試,判斷是否滿足條件,一般采用循環來實現。例百元買百雞問題。假定小雞每只5角,公雞每只2元,母雞每只3元。現在有100元錢要求買100只雞,編程列出所有可能的購雞方案。
設母雞、公雞、小雞各為x、y、z只,根據題目要求,列出方程為:x+y+y=100 3x+2y+0.5z=100三個未知數,兩個方程,此題有若干個解。解決此類問題采用“試湊法”,把每一種情況都考慮到。方法一:最簡單三個未知數利用三重循環來實現。方法二:從三個未知數的關系,利用兩重循環來實現。方法一:PrivateSubForm_click()DimX%,y%,z%ForX=0To100ForY=0To100ForZ=0To100 IfX+y+z=100And3*x+2*y+.5*z=100Then PrintX,y,z EndIfNextZNextYNextXEndsub方法二:ForX=0To33ForY=0To50 Z=100-x-y
If3*x+2*y+.5*z=100Then PrintX,Y,ZEndIfNextYNextX4.遞推法
“遞推法”又稱為“迭代法”,其基本思想是把一個復雜的計算過程轉化為簡單過程的多次重復。每次重復都從舊值的基礎上遞推出新值,并由新值代替舊值。
例猴子吃桃子。小猴在一天摘了若干個桃子,當天吃掉一半多一個;第二天接著吃了剩下的桃子的一半多一個;以后每天都吃尚存桃子的一半零一個,到第7天早上要吃時只剩下一個了,問小猴那天共摘下了多少個桃子?分析:這是一個“遞推”問題,先從最后一天推出倒數第二天的桃子,再從倒數第二天的桃子推出倒數第三天的桃子……。設第n天的桃子為xn,那么它前一天的桃子數是xn
-1。已知:當N=7第7天的桃子數為1,則第6天的桃子數由公式得4個,依次類推,可求得第1天的桃子數。程序如下:Privatesubform_click() DimIasinteger x=1 print“第7天的桃子數為:1只” forI=6to1step–1 x=(x+1)*2 print“第”;I;”天的桃子數為:”;x;”只” nextIEndsub5.最小、最大值在若干個數中求最大值,一般先假設一個較小的數為最大值的初值,若無法估計較小的值,則取第一個數為最大值的初值;然后將每一個數與最大值比較,若該數大于最大值,將該數替換為最大值;依次逐一比較。例隨機產生10個100~200之間的數,求最大值。PrivateSubCommand1_Click()
Max=100Fori=1To10x=Int(Rnd*101)+100Printx;
Ifx>MaxThenMax=xNextiPrintPrint"最大值=";MaxEndSub6、求最大公約數PrivateSubCommand1_Click()Dimm,n,rAsLongm=Val(Text1.Text)‘取數據Mn=Val(Text2.Text)‘取數據N
Ifm<>Int(m)orm<1orn<>Int(n)orn<1Then
Text3.Text="數據錯誤!"
ElseDo
‘求最大公約數
r=mModnm=nn=r
LoopUntilr=0Text3.Text=CStr(m)‘輸出最大公約數
EndIfEndSub判斷數據是否合法PrivateSubForm_Click()Fori=1To9Forj=1To9 Printi;"*";j;"=";i*j;NextjPrintNextiEndSub執行本程序,窗體上將顯示九九乘法表。Forj=1Toi7、關于循環嵌套(一個循環體內又包含了一個完整的循環結構稱為循環的嵌套.)換行!作用?例:xh2.vbpSsfrm.frm思考:打印上三角或下三角程序如何改動?要打印下三角?8.打印圖形見下頁編寫程序打印如右邊圖形:PrivateSubForm_Click()
Fori=1To4PrintSpace(5-i);
Forj=1To2*i-1Print"*";Nextj
PrintNextiPrintEndSub******************************* *外循環用來控制輸出的行數及每行第一個字符的輸出位置內循環用來控制每行輸出的字符個數。例:xh2.vbpshjs.frm9.判斷同構數(復習材料P39第7題)
10.找親密對數P111例5-1011.判斷完數實驗P55實驗7-212.計算多項式的和實驗P51實驗6-313.求一個正整數K的各位數字之和 復習材料P334.4練習題第1題14.報數問題P114例5-1215.判斷回文數復習材料P41第10題 或P81習題416.求自然數的因子
P81習題5PrivateSubCommand1_Click()DimaAsInteger,I%a=InputBox("輸入一個自然數")Label1.Caption=Str(a)+"的所有因子:"ForI=1Toa-1IfaModI=0ThenList1.AddItem(Str(I))EndIfNextEndSub二、數組的算法1.數組元素的賦初值(1)用循環Fori=1To10 A(i)=0Nexti
forI=1to10 forJ=1to10 B(I,J)=0 nextJnexti(2)Array函數
DimibAsVariantib=Array("abc","def","67")Fori=0ToUBound(ib)Picture1.Printib(i);"";Nexti注意:(1)利用Array對數組各元素賦值,聲明的數組是可調數組或連圓括號都可省,并且其類型只能是Variant。(2)數組的下階為零,上界由Array函數括號內的參數個數可決定,也可通過函數Ubound獲得。2.數組的賦值在VB6.0中,提供了數組直接對數組的賦值。例如: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相當于注意:賦值號左邊的數組只能聲明為Variant的可調數組或簡單變量。3.數組的輸出輸出方陣SC中的下三角元素Fori=0To4Forj=0ToI’j=0to4則輸出整個數組sc(i,j)=i*5+jPrintsc(i,j);"";NextjPrint'換行NextI4.將數組中各元素交換(P115習題1)Fori=1To15\2
t=A(i)A(i)=A(10-i+1)A(10-i+1)=tNexti5、對數組的行/列操作(行、列的和)P115習題3:求二維數組每行的和數與每列的和數,數組元素為1—9之間的隨機數。OptionexplicitOptionbase1’生成數組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=Text2&Str(L(J))NextJEndSubPrivateSubCommand3_Click()ForI=1To4H(I)=0ForJ=1To5H(I)=H(I)+A(I,J)NextJText1=Text1&Str(H(I))&vbCrLfNextIEndSub’清除圖片框和文本框PrivateSubCommand4_Click()Picture1.ClsText1=""Text2=""EndSub'求行和6、同維數組對應元素的算術運算(+、-、*、/)OptionexplicitOptionbase1Privatesubform_click()Dim
X%(5,5),Y%(5,5),Z%(5,5)
ForI=1to5 forj=1to5 x(I,j)=int(100*rnd)+1 y(I,j)=int(100*rnd)+1 nextjNextiForI=1to5forJ=1to5Z(I,J)=X(I,J)+
Y(I,J) nextjNexti可改為減法、乘法
存放結果數組也必須定義 ForI=1to5 forJ=1to5 printZ(I,J); nextj print NextIEndsub除法:除法操作必須先判別分母不為零,然后再進行對應元素的除法操作。7、求數組靠邊元素之和,不靠邊元素之和P115習題6Optionbase1Privatesubform_click()Dim
X%(4,5),s%(4),sum%ForI=1to4 s(I)=0 forj=1to5 x(I,j)=i nextjNextiForJ=1to5S(1)=S(1)+X(1,J)S(4)=S(4)+X(4,J)Nextj
11111222223333344444ForI=2to3S(2)=S(2)+X(I,1)S(3)=S(3)+X(I,5)NextiforI=1to4SUM=SUM+S(I)NextiprintSUMEndsub8,求數組對角線元素之積或
和Optionbase1Privatesubform_click()Dim
X%(4,4),S1&,S2&S=1:S2=1ForI=1to4 forj=1to4 x(I,j)=i nextjNextiFori=1to4S1=s1*X(i,i)NextIprintSEndsub
1111
22
2233
33
4444
若為“+”,則為對角線的和,但S1,S2初值為0ForI=1To4ForJ=1To4IfI+J=5ThenS2=S2+A(I,I)EndIfNextJNextIText3=“兩條對角線的積_分別是:"&S1&""&S2EndSubP115習題69.求二維數組中每行/列元素的最大/最小OptionExplicitOptionBase1PrivateSubForm_Click()DimA%(5,8),I%,J%DimMAXI%(5),MAXJ%(8)ForI=1To5ForJ=1To8A(I,J)=Int(90*Rnd)+10PrintA(I,J);NextJPrintNextIForI=1To5MAXI(I)=A(I,1)ForJ=1To8IfMAXI(I)<A(I,J)ThenMAXI(I)=A(I,J)NextJPrint"第";I;"行的最大值是:";MAXI(I), NextIPrint
生成數組并輸出求每行最大并輸出9.求二維數組中每行/列元素的最大/最小 ForJ=1To8 MAXJ(J)=A(1,J) ForI=1To5 IfMAXJ(J)<A(I,J)ThenMAXJ(J)=A(I,J) NextI Print"第";J;"列的最大值是:";MAXJ(J), IfJMod5=0ThenPrintNextJEndSub求每列最大并輸出10求鞍點元素,該元素所在行為最大,所在列為最小P115習題7’生成數組PrivateSubCommand1_Click()DimI%,J%M=InputBox("請輸入數組的行數")N=InputBox("請輸入數組的列數")ReDimA(M,N)ForI=1ToMForJ=1ToNA(I,J)=Int(90*Rnd)+10Picture1.PrintA(I,J);NextJPicture1.PrintNextIEndSub10求鞍點元素,該元素所在行為最大,所在列為最小P115習題7’找鞍點數PrivateSubCommand2_Click()DimI%,J%,Max%,Col%,Flg%ForI=1ToMMax=A(I,1)Col=1ForJ=2ToNIfMax<A(I,J)ThenMax=A(I,J):Col=JNextJForJ=1ToMIfMax>A(J,Col)ThenExitForNextJIfJ>NThenText1.Text="鞍點元素是"&"A("&I&","&Col&")="&A(I,Col)Flg=1EndIfIfFlg=0ThenText1="鞍點元素不存在"NextIEndSub找每行最大值,并記下最在值所在的列將該行最大值,與所在列的各元素比較,是否為該列最小11、矩陣乘法P107例5-6╳***********************************=&&&&&&&&&&&&XYZOptionbase1Privatesubform_click()Dim
X%(4,5),Y%(5,3),Z%(4,3)ForI=1to4 forj=1to5 x(I,j)=int(100*rnd)+1 printx(I,j); nextj printNextiForI=1to5 forj=1to3 y(I,j)=int(100*rnd)+1 printy(I,j) nextj printNexti11、矩陣乘法╳***********************************=&&&&&&&&&&&&XYZForL=1to4forJ=1to3 Z(L,J)=0.0forI=1to5 Z(L,J)=Z(L,J)+X(L,I)*Y(I,J) nextinextjNextLForI=1to4 forj=1to3 printz(I,j); nextj printNextiEndsub12、矩陣轉置P116習題10/復習資料P60第5題OptionExplicitOptionBase1DimA()AsInteger,B()AsInteger,N%PrivateSubCommand1_Click()’生成數組DimI%,J%N=InputBox("")ReDimA(N,N)ForI=1ToNForJ=1ToNA(I,J)=Int(Rnd*100)+1Text1=Text1&Str(A(I,J))NextJText1=Text1&vbCrLfNextIEndSub12、矩陣轉置P116習題10/復習資料P60第5題PrivateSubCommand2_Click()成’矩陣轉置DimI%,J%ReDimB(N,N)ForI=1ToNForJ=1ToNB(J,I)=A(I,J)NextJNextIForI=1ToNForJ=1ToNText2=Text2&Str(B(I,J))NextJText2=Text2&vbCrLfNextIEndSub13.數組排序P103例5-3對已知存放在數組中的n個數,用選擇法按遞增順序排序。(1)從n個數的序列中選出最小的數(遞增),與第1個數交換位置;(2)除第1個數外,其余n-1個數再按(1)的方法選出次小的數,與第2個數交換位置;(3)重復(1)n-1遍,最后構成遞增序列。PrivateSubCommand1_Click()DimSort(10)AsInteger,temp%DimiAsInteger,j%RandomizeFori=1To10Sort(i)=Int(Rnd*99)+1Text1=Text1&Str(Sort(i))NextiFori=1To9Forj=i+1To10IfSort(i)>Sort(j)Thentemp=Sort(i)Sort(i)=Sort(j)Sort(j)=tempEndIfNextjText2=Text2&Str(Sort(i))NextiText2=Text2&Str(Sort(i))'書上少此語句EndSub14.冒泡法排序實驗P62,實驗7-4與選擇排序的區別在于:只對相鄰兩數進行比較,使之大數沉底,小數象氣泡一樣“冒”上來,所以稱為“冒泡法”。例如對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,9第4次比較:3,5,2,8,1,9第5次比較:3,5,2,1,8,9第6次比較:3,5,2,1,8,9第一輪的排序結果;3,5,2,1,8,9第一輪需排序5次,第二輪需排序4次,第三輪需排序3次,第四輪需排序2次,第五輪需排序1次。PrivateSubCommand1_Click()冒泡法排序過程Dimi%,j%,temp%ForI=1ToUBound(a)-1ForJ=1ToUBound(a)-IIfa(J)>a(J+1)Thentemp=a(J):a(J)=a(J+1):a(J+1)=tempEndIfNextNextFori=1ToUBound(a)Printa(i);NextiEndSub例:排序運動員的成績已知8名運動員100米成績,請排出他們的名次(成績相同名次相同,成績由鍵盤輸入)本題的難點并不在排序,可以很輕松地用冒泡法或選擇法排序進行成績從小(快)到大(慢)的排列。問題是排序后的成績對應于哪一個運動員,一維數組是無法記錄的。因此就要定義一個二維數組,其中第一列放運動員的成績,第二列存放成績對應的運動員號。按二維數組的第一列排序后,產生交換不僅要交換第一列的數組元素,還要交換第二列的數組元素,這樣運動員的編號就能跟著成績“跑了”。在輸出名次時,也要注意成績相同、名次相同的問題。排序過程(選擇法排序)PrivateSubsort(cj()AsSingle)DimtempAsSingleFori=1To7Forj=i+1To8Ifcj(i,1)>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輸出名次過程PrivateSuboutput(cj()AsSingle)DimjAsInteger,pAsIntegerp=1Print"第";1;"名是";cj(1,2);"號運動員,成績是:";cj(1,1)Forj=2To8Ifcj(j,1)=cj(j-1,1)ThenPrint"第";p;"名是";cj(j,2);"號運動員,成績是:";cj(j,1)ElsePrint"第";j;"名是";cj(j,2);"號運動員,成績是:";cj(j,1)p=jEndIfNextPrintEndSub窗體事件過程’輸入運動員成績PrivateSubForm_Click()DimiAsIntegerDimproAsString,cj(8,2)AsSingleRandomizeFori=1To8pro="請輸入第"+Str(i)+"位運動員的成績:"cj(i,1)=InputBox(pro)cj(i,2)=iPrintcj(i,1);NextPrintPrintCallsort(cj)Calloutput(cj)EndSub15.數組元素的插入與刪除(1)插入排序復習材料P50第23在有序數組a(1ton)(原有n-1個元素)插入一個值Key元素,算法:查找要插入的位置k(1<=k<=n-1),騰出位置,把最后一個元素開始到第K個元素往后移動一個位置,第k個元素的位置騰出,就可將數據Key插入Privatesubcommand1__clickDima%(11),I%,J%,X%ForI=1to10
a(I)=I*5+1
’通過程序自動生成有規律的數組NextIX=Inputbox(“輸入任意數X:”)ForI=1to
10
‘查找欲插入數X在數組中的位置
ifX<a(I)thenexitfor
’找到插入的位置下標為INextIForJ=11toI+1step–1
’從最后元素開始往后移,騰出位置 a(J)=a(J-1)NextJA(I)=XEndsub
(2)刪除重復元素見P113例5-11首先也是要找到欲刪除的元素的位置k;然后從k+1到n個位置開始向前移動;最后將數組元素減1。例如,要將值為13的元素刪除的過程為:Dima()asinteger’聲明為動態數組…..Redima(1ton)’聲明為有N個元素的數組… ’查找到要刪除的元素下標為K…ForI=k+1toN’從K+1個元素開始往前移 A(I-1)=a(I)NextI ’最后一個元素的位置空出,利用數組重新聲明減少一個元素,但要保留原來值Redimpreservea(1ton-1)排序法有:選擇、冒泡、插入法排序及合并排序等。
前兩種排序欲排序的數據全部輸入后,再進行排序;
插入法排序每輸入一項,馬上插入到數組應在的位置,數組始終有序。用插入排序法輸入不多于20個數,使數組保持遞增的序列。對數組中已有N-1個有序數,當輸入某數X時,插入排序法實現的步驟:(1)輸入欲排序的數據項x;在數組a中找x應所處的位置j;(2)從數組的最后一個元素開始到下標j依次往后移,使j位置空出;(3)將x放入位置j處,一個數據插入完成;(4)有若干個數重復(1)~(3)。對于若干個數輸入,只要調用插入排序過程即可。DimnAsIntegerSubinsert(a()AsSingle,ByValx!)Dimi%,j%j=1DoWhilej<nAndx>a(j)j=j+1LoopFori=n-1TojStep-1a(i+1)=a(i)Nextia(j)=xEndSubPrivateSubText1_KeyPress(KeyAsciiAsInteger)Staticbb!(1To20)Dimi%Ifn=20ThenMsgBox"數據太多!",1,"警告"EndEndIfIfKeyAscii=13Thenn=n+1Callinsert(bb(),Val(Text1))Picture1.PrintText1Fori=1TonPicture2.Printbb(i);NextiPicture2.PrintText1=""EndIfEndSub數組的合并排序從鍵盤讀取數組a和b(各5個元素),a,b都是嚴格遞增的(即元素從小到大排列,且無重復元素),將a,b合并成c數組,使C也嚴格遞增。若a,b中有相同的元素只保留一個,最后輸出數組C。編寫通用過程OutPut,在窗體上打印數組。OptionExplicitDima(5)AsInteger,b(5)AsInteger,c()AsIntegerPrivateSuboutput(d()AsInteger)’輸出數組的通用過程DimiAsIntegerFori=1ToUBound(d)Printd(i);NextiPrintEndSubPrivateSubCommand1_Click()'數組輸入DimiAsIntegerFori=1To5 a(i)=InputBox(“輸入數組a(“+str(I)+”)”)NextiPrint"數組A:"Calloutput(a)Fori=1To5b(i)=InputBox(“輸入數組b(“+str(I)+”)”)NextiPrint"數組B:"Calloutput(b)EndSubPrivateSubCommand2_Click()'數組合并輸出DimpAsInteger,qAsInteger,rAsIntegerDimiAsIntegerp=1:q=1:r=1DoWhilep<5Andq<5ReDimPreservec(r)Ifa(p)>b(q)Thenc(r)=b(q)r=r+1q=q+1ElseIfa(p)<b(q)Thenc(r)=a(p)r=r+1:p=p+1Elsec(r)=a(p)r=r+1:p=p+1:q=q+1EndIfLoop
Ifp=5ThenReDimPreservec(r)Fori=q+1To5c(r)=b(i):r=r+1NextiEndIfIfq=5ThenReDimPreservec(r)Fori=p+1To5c(r)=a(i):r=r+1NextiEndIfCalloutput(c)EndSub
16、查找:
(1).順序查找[P104例5-4]順序撿索
撿索(search):又稱為查找,就是從一組數據中找出所需的具有某種特征的數據項。
它是數據處理中應用很廣泛的一種操作,最簡單的檢索方法是順序撿索。其方法是從一組數據的第一項開始逐個比較,直到找到該數據項,或全部數據都比較完也沒找到該數據為止。OptionExplicit
PrivateSubForm_Click()
DimSearch(10)AsInteger,IAsInteger
DimSAsInteger
ForI=1To10
Search(I)=Int(Rnd*100)+1
PrintSearch(I)
NextI
S=Val(InputBox("輸入要查找的數"))
ForI=1To10
IfSearch(I)=SThenExitFor
NextI
IfI<=10Then
Print"要找的數是Search(";I;")"
Else
Print"沒找到!"
EndIf
EndSub(2)二分查找P106例5-5其方法是:
1)、找出中間位置Mid,判斷查找數椐K與A(Mid)
是否相等,若相等則已找到。
(2)、如果K>A(Mid)則表明K可能在A(Mid)與A(Bot)區間內,因此重新設置:Top=Mid+1
(3)、如果K<A(Mid)則表明K可能在A(Top)與A(Mid)區間內,因此重新設置:Bot=Mid-1
重復以上步驟,每次查找區間減少一半,如此反復,其結果是查到此數,或查不到此數。
PrivateSubCmd生成數組_Click()DimVAsVariantSearch=Array(12,17,23,28,30,39,_41,46,57,61,78,83,85,89,93)ForEachVInSearchText1=Text1&Str(V)NextVEndSubPrivateSubCmd二分法查找_Click()DimLeftAsInteger,RightAsIntegerDimMidAsInteger,FlgAsBooleanDimFindAsIntegerFind=InputBox("輸入要查找的數")Left=1:Right=UBound(Search)Flg=FalseDoWhileLeft<=RightMid=(Right+Left)/2IfSearch(Mid)=FindThenFlg=TrueExitDoElseIfFind>Search(Mid)ThenLeft=Mid+1ElseRight=Mid-1EndIfLoopIfFlgThenText2="要查找的數"&Str(Find)&"在Search("&Str(Mid)&")中"ElseText2=Str(Find)&"不在數組中"EndIfEndSub
(1).數制轉換
例將一個十進制整數m轉換成r(2-16)進制字符串。方法:將m不斷除r取余數,直到商為零,以反序得到結果。三、字符算法把一個任意十進制正整數轉換成N進制數(N<=16)
1.使用的對象:2151111NNumChDimNAsInteger,NumAsLong
PrivateSubCmd1_Click()
DimChAsString,IAsInteger
DimChar(15)AsString
DimBin()AsString
ForI=0To9
Char(I)=Str$(I)
NextI
ForI=0To5
Char(10+I)=Chr$(Asc("A")+I)
NextI
ReDimBin(1)
CallTrans(Bin,Char)
ForI=UBound(Bin)To1Step-1
Ch=Ch+Bin(I)
NextI
Text3.Text=Ch
EndSubPrivateSubCmd2_Click()
End
EndSub
PrivateSubText1_Change()
N=Val(Text1.Text)
Lab4.Caption=Str$(N)+"進制數"
EndSub
PrivateSubText2_Change()
Num=Val(Text2.Text)
EndSubPrivateSubTrans
(Vary()AsString,St()AsString)
DimRAsInteger
DimKAsInteger
K=0
DoUntilNum=0
R=NumModN
K=K+1
ReDimPreserveVary(K)
Vary(K)=St(R)
Num=Num\N
Loop
EndSub(2).加密和解密簡單加密的思想是:將每個字母C加一序數K,式子c=chr(Asc(c)+k),例如序數k為5,這時“A”“F”,“a”“f”,“B”“G”…當加序數后的字母超過“Z”或“z”則c=hr(Asc(c)+k-26)。解密為加密的逆過程。PrivateSubCommand1_Click()’加密Dimstrinput$,code$,record$,cAsString*1Dimi%,length%,iasc%strinput=Text1length=Len(RTrim(strinput))‘去掉字符串右邊空格,求真正的長度code=""Fori=1Tolengthc=Mid$(strinput,i,1)’取第I個字符SelectCasecCase“A”To“Z“‘大寫字母加序數5加密iasc=Asc(c)+5Ifiasc>Asc(“Z”)Theniasc=iasc–26’加密后字母超過Zcode=code+Chr$(iasc)
Case“a”To“z“‘小寫字母加序數5加密iasc=Asc(c)+5Ifiasc>Asc("z")Theniasc=iasc-26code=code+Chr$(iasc)CaseElse ’當第I個字符為其他字符時不加密code=code+cEndSelectNextiText2=code‘顯示加密后的字符串EndSubPrivateSubCommand3_Click()’清屏Text1=""Text2=""Text3=""Text1.SetFocusEndSub(3).字符統計輸入一串字符,統計各字母出現的次數,大小寫字母不區分。分析:1.統計26個字母出現的個數,先聲明一個具有26個元素的數組,每個元素的下標表示對應的字母,元素的值表示對應字母出現的次數。2.從輸入的字符串中逐一取出字符,轉換成大寫字符(使得大小寫不區分),進行判斷。3.運行界面:Privatesubcommand1_ClickDima(1to26)asInteger,casString*1Le=len(text1)ForI=1Tolec=UCase(Mid(Text1,I,1))Ifc>="A"Andc<="Z"Thenj=Asc(c)-65+1a(j)=a(j)+1EndIfNextIForj=1to26 ifa(j)>0thenPicture1.print“”;chr(j+64);“=”;a(j);NextjEndsub(4).字符串處理編寫一個英文打字訓練的程序.要求如下:(1)在標簽框內隨機產生30個字母的范文;(2)當焦點進入文本框時開始計時,并顯示當時時間;(3)在鍵入文本框按產生的范文輸入相應的字母;(4)當鍵入滿了30個字母結束計時,禁止向文本框輸入內容,鍵入的字符逐一范文比較,顯示打字的速度和正確率。PrivateSubCommand1_Click()‘產生30個字母的范文RandomizeText1=""Fori=1To30a=Chr$(Int(Rnd*25)+65)’隨機產生大寫字母Text1=Text1+a‘產生的大寫字母送入范文框NextiEndSubPrivateSubCommand2_Click()EndEndSubPrivateSubText2_GotFocus()‘輸入文本框獲取焦點,開始計時t=TimeEndSubPrivateSubText2_KeyPress(KeyAsciiAsInteger)IfLen(Text2)=30Then ’輸入滿30
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安裝防盜門合同協議書
- 男友同意協議書
- 確權界線協議書
- 聯防共建協議書
- 旅行社聘用員工協議書
- 賠償劃分協議書
- 安徽師范生就業協議書
- 脫貧開發協議書
- 股權出資協議書
- 確權修正協議書
- 2025年壓力容器作業證理論全國考試題庫(含答案)
- 2025醫院內部審計工作計劃范文
- 管道閉水試驗(自動計算)
- 國開(河北)2024年秋《現代產權法律制度專題》形考作業1-4答案
- 林業專業知識考試試題及答案
- 社區居民積分制管理實施方案
- 2024年二建《法規》真題及參考答案
- 高中生物教材易錯易混概念辨析(新人教版2019)
- 微觀經濟學課后習題答案-微觀經濟學課后習題
- 掬水月在手-古典詩詞與現代人生智慧樹知到期末考試答案章節答案2024年南開大學
- 2024年中級咖啡師技能鑒定考試題庫大全-下(判斷題)
評論
0/150
提交評論