Visual-Basic程序設(shè)計-第四章課件_第1頁
Visual-Basic程序設(shè)計-第四章課件_第2頁
Visual-Basic程序設(shè)計-第四章課件_第3頁
Visual-Basic程序設(shè)計-第四章課件_第4頁
Visual-Basic程序設(shè)計-第四章課件_第5頁
已閱讀5頁,還剩159頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四章VB算法基礎(chǔ)及基本語句第四章VB算法基礎(chǔ)及基本語句主要內(nèi)容三種程序結(jié)構(gòu)(順序,分支,循環(huán))賦值語句條件分支語句(共五種)筆記、作業(yè)、實驗主要內(nèi)容三種程序結(jié)構(gòu)(順序,分支,循環(huán))筆記、作業(yè)、實驗求兩個自然數(shù)的最大公約數(shù)的算法 (歐幾里德算法) S1.輸入兩個自然數(shù)M、N S2.求M除以N的余數(shù)R S3.使M=N,即用N代換M S4.使N=R,即用R代換N S5.若R≠0,則重復執(zhí)行S2、S3、S4(循環(huán)),否則轉(zhuǎn)S6 S6.輸出M,M即為M和N的最大公約數(shù)求兩個自然數(shù)的最大公約數(shù)的算法基本算法結(jié)構(gòu)圖順序分支循環(huán)基本算法結(jié)構(gòu)圖順序分支循環(huán)4.2.1賦值語句1、形式Var=<表達式>如:s=“Thisisaflower”Number%=72Text.font.size=12Y=(a+b)/2作用:將表達式的值賦值給變量名。一般用于給變量賦值或?qū)丶O(shè)定屬性值。4.2.1賦值語句1、形式2.不同數(shù)據(jù)類型數(shù)據(jù)的賦值當表達式的類型與變量的類型不一致時,強制轉(zhuǎn)換成左邊的精度,如iA%=10/3iA中的結(jié)果為3

注意:雖然賦值號與關(guān)系運算符“等號”都用“=”表示,VB系統(tǒng)會根據(jù)所處的位置自動判斷是何種意義的符號。注意點:P59-602.不同數(shù)據(jù)類型數(shù)據(jù)的賦值4.2.2InputBox函數(shù)InputBox函數(shù) 作用:

用來接受用戶通過鍵盤輸入的數(shù)據(jù)。形式:V=InputBox(Prompt[,Title][,Default]

[,x,y][,helpfile,context])其中:提示:

提示信息;標題:

對話框標題;缺?。狠斎?yún)^(qū)缺省值函數(shù)返回字符類型。舉例:下頁4.2.2InputBox函數(shù)InputBox函數(shù)PrivateSubForm_Click()

PassWord=InputBox("輸入你的口令:","程序示例")IfPassWord="123456"ThenPrint"OK!"ElsePrint"Error!"EndIfEndSub函數(shù)返回值PrivateSubForm_Click()函數(shù)返回值4.2.3MsgBox函數(shù)作用: MsgBox函數(shù)用于向用戶發(fā)布提示信息,并要求用戶作出必要的響應。形式是: MsgBox(Prompt[,button][,title]

[,helpfile,context])P724.2.3MsgBox函數(shù)作用:P72button:這是一個由4個數(shù)值常量組成的式子,形式為c1+c2+c3+c4,button:

PrintMsgBox("非法數(shù)據(jù)!",vbOKOnly+48+0,"提示信息")

PrintMsgBox(“請輸入X值!”,16+vbOKOnly,”ex4_6")PrintMsgBox("非法數(shù)據(jù)!",vbOKOnlMsgBox函數(shù)根據(jù)用戶選擇單擊的按鈕而返回不同的值:參見P63表4-3。MsgBox函數(shù)根據(jù)用戶選擇單擊的按鈕而返回不同的值:參見P順序結(jié)構(gòu)順序結(jié)構(gòu)4.3分支結(jié)構(gòu)和分支結(jié)構(gòu)語句結(jié)構(gòu)示意圖4.3分支結(jié)構(gòu)和分支結(jié)構(gòu)語句結(jié)構(gòu)示意圖1、IF條件THEN一條語句2、if條件THEN

語句組(多條語句)

end

if3、if條件then

語句組1

else

語句組2

end

if4、if條件1then 語句組1 elseif條件2then

語句組2 elseif條件3then

語句組3……[else

語句組n]endif1、IF條件THEN一條語句4、if條件1the

1.If…Then語句(單分支結(jié)構(gòu))

If<表達式>Then語句塊EndIf

If<表達式>Then<語句>

例:已知兩個數(shù)x和y,比較它們的大小,使得x大于y.

Ifx<yThent=xx=yy=tEndIf

或Ifx<yThent=x:x=y:y=t重要的是學會兩個數(shù)的交換,若上述語句次序變一下,結(jié)果如何?例:已知兩個數(shù)x和y,比較它們的大小,2.If…Then…Else語句(雙分支結(jié)構(gòu))

If<表達式>Then<語句塊1>Else<語句塊2>EndIf

If<表達式>Then<語句1>Else<語句2>

計算分段函數(shù):單分支結(jié)構(gòu)實現(xiàn):

y=cos(x)-x^3+3*xIfx<>0Theny=sin(x)+sqr(x*x+1)

雙分支結(jié)構(gòu)實現(xiàn):

Ifx<>0Theny=sin(x)+sqr(x*x+1)Elsey=cos(x)-x^3+3*xEndIf2.If…Then…Else語句(雙分支結(jié)構(gòu))單分支結(jié)構(gòu)實3.If…Then…ElseIf語句(多分支結(jié)構(gòu))

形式:

If<表達式1>Then <語句塊1>ElseIf<表達式2>Then <語句塊2>

[Else

語句塊n+1

]EndIf3.If…Then…ElseIf語句(多分支結(jié)構(gòu))PrivateSubCommand1_Click()DimxAsIntegerx=Val(Text1.Text)

Ifx<1ThenText2.Text=“小于1的數(shù)”

ElseIfx<=10ThenText2.Text=“1到10之間”

ElseText2.Text=”大于10的數(shù)”

EndIfEndSub輸入判斷PrivateSubCommand1_Click()輸入例已知變量strC中存放了一個字符,判斷該字符是字母字符、數(shù)字字符還是其他字符。用多分支結(jié)構(gòu)實現(xiàn):

不管有幾個分支,依次判斷,當某條件滿足,執(zhí)行相應的語句,其余分支不再執(zhí)行;若條件都不滿足,且有Else子句,則執(zhí)行該語句塊,否則什么也不執(zhí)行。.

ElseIf不能寫成ElseIf。IfUcase(strC)>="A"AndUcase(strC)<="Z"Then

PrintstrC+"是字母字符"ElseIfstrC>="0"AndstrC<="9"Then PrintstrC+"是數(shù)字字符"Else PrintstrC+"其他字符"EndIf例已知變量strC中存放了一個字符,判斷該字符是字母字符、數(shù)4.If語句的嵌套

If語句的嵌套是指If或Else后面的語句塊中又包含If語句。形式如下:

If<表達式1>Then

If<表達式11>Then…EndIf…EndIf

例:已知x,y,z三個數(shù),使得x>y>z用一個IF語句和一個嵌套的IF語句實現(xiàn)Ifx<yThent=x:x=y:y=t

Ify<zThent=y:y=z:z=t

Ifx<yThent=x:x=y:y=tEndIf

EndIfIf語句的嵌套注意事項:書寫鋸齒型;If與EndIf配對。4.If語句的嵌套例:已知x,y,z三個數(shù),使得x>y>z5、Select-Case-EndSelect結(jié)構(gòu)語句Select

Casee

Casec1A組語句

Casec2B組語句...

Case

Elsen組語句

EndSelecte稱為測試表達式,

c1,c2,...是測試項它們可取三種形式:(1)具體取值:

如:3、5、7.2等;(2)連續(xù)的數(shù)據(jù)范圍:

如:8To20;”B”To“H”等;(3)滿足某個判決條件:

如:Is>20;Is<="P"等。測試項還可以是這三中形式的組合,如4,7To9,Is>305、Select-Case-EndSelect結(jié)構(gòu)語句表達式列表1……語句塊1……語句塊n+1……表達式列表2表達式列表n語句塊2語句塊nTTTFFF表達式列表1……語句塊1……語句塊n+1……表達式列表2表達PrivateSubCommand1_Click()DimxAsIntegerx=Val(text1.Text)

Select

Casex

CaseIs<1Text2.text="這是小于1的數(shù)"

Case1To10Text2.Text="這是1到10之間的數(shù)"

CaseElseText2.Text="這是大于10的數(shù)"

EndSelectEndSubPrivateSubCommand1_Click()例變量strC中存放了一個字符,判斷該字符類型。在前面例中用多分支結(jié)構(gòu)實現(xiàn):

IfUcase(strC)>="A"AndUcase(strC)<="Z"Then PrintstrC+"是字母字符"ElseIfstrC>="0"AndstrC<="9"Then PrintstrC+"是數(shù)字字符"Else PrintstrC+"其他字符"EndIf用SelectCase語句實現(xiàn):

SelectCasestrC Case"a"To"z","A"To"Z" PrintstrC+"是字母字符"

Case"0"To"9" PrintstrC+"是數(shù)字字符"

CaseElse PrintstrC+"其他字符"

EndSelect例變量strC中存放了一個字符,判斷該字符類型。

DimxAsSingle,yAsSinglex=Val(Text1.Text)Ifx>=0Theny=1+xElsey=1-2*xEndIfText2.Text=y輸入x,計算y的值。其中 1+x(x≥0)Y=1-2x(x<0)思考題:DimxAsSingle,yAsSingle1、學校對學習成績優(yōu)良的學生進行獎勵,獲獎的條件如下:(1)所考5門課的成績都在88分以上。(2)前3門(主課)的成績都在95分以上,其他兩門(非主課)的成績都在80分以上。輸入某學生5門課的成績s1、s2、s3、s4、s5,判斷他是否能夠獲獎。1、學校對學習成績優(yōu)良的學生進行獎勵,獲獎的條件如下:2、利用輸入框函數(shù)輸入3個不同的數(shù),選出其中最大的數(shù)。2、利用輸入框函數(shù)輸入3個不同的數(shù),選出其中最大的數(shù)。3、鐵路托運行李,從甲地到乙地,規(guī)定每張客票托運費計算方法是行李重量不超過50kg時,0.25元/kg,超過50kg而不超過100kg時,其超過部分按0.35元/kg收費,超過100kg時,其超過部分按0.45元/kg收費。編寫程序,輸入行李重量,計算并輸出托運的費用。設(shè)行李重量為wkg,應付運費為x元,則運費公式為:0.25*w(w<=50)X=0.25*50+0.35*(w-50)(50<w<=100)0.25*50+0.35*50+0.45*(w-100)(w>100)3、鐵路托運行李,從甲地到乙地,規(guī)定每張客4、某百貨公司為了促銷,采用購物打折扣的優(yōu)惠辦法:每位顧客一次購物(1)在1000元以上者,按九五折優(yōu)惠;(2)在2000元以上者,按九折優(yōu)惠;(3)在3000元以上者,按八五折優(yōu)惠;(4)在5000元以上者,按八折優(yōu)惠;編寫程序,輸入購物款數(shù),計算并輸出優(yōu)惠價。4、某百貨公司為了促銷,采用購物打折扣的優(yōu)惠5、已知兩個變量x和y,比較它們的大小,使得x中的值大于y,下面那個方法能實現(xiàn)?Ifx<ythenA、x=y:y=xB、x=t:t=y:y=tC、t=y:y=x:x=tD、x=y:t=y:x=t5、已知兩個變量x和y,比較它們的大小,使得常見錯誤1.在選擇結(jié)構(gòu)中缺少配對的結(jié)束語句對多行式的If塊語句中,應有配對的EndIf語句結(jié)束。2.多邊選擇ElseIf關(guān)鍵字的書寫和條件表達式的表示ElseIf不要寫成ElseIf;多個條件表達式次序問題。3.SelectCase語句的使用SelectCase后不能出現(xiàn)多個變量;Case子句后不能出現(xiàn)變量。常見錯誤例:已知百分制成績mark,顯示對應的五級制成績哪些正確,哪些錯誤?例:已知百分制成績mark,顯示對應的五級制成績例:已知坐標點(x,y),判斷其落在哪個象限。

方法一

Ifx>0Andy>0ThenPrint"在第一象限"

ElseIfx<0Andy>0ThenPrint"在第二象限"

ElseIfx<0Andy<0ThenPrint"在第三象限"

ElseIfx>0Andy<0ThenPrint"在第四象限"

EndIf

方法二SelectCasex,yCasex>0Andy>0 Print"在第一象限"Casex<0Andy>0 Print"在第二象限"Casex<0Andy<0 Print"在第三象限"Casex>0Andy<0 Print"在第四象限"EndSelect哪個能實現(xiàn),哪個不能實現(xiàn)?方法二代碼錯誤:1.SelectCase后不能出現(xiàn)多個變量;2.Case后不能出現(xiàn)變量及有關(guān)運算符。例:已知坐標點(x,y),判斷其落在哪個象限。方法一 習題:1.下面程序運行后輸出的結(jié)果是_____X=Int(Rnd)+3Ifx^2>8theny=x^2+1Ifx^2=9theny=x^2-2Ifx^2<8theny=x^3Printy習題:1.下面程序運行后輸出的結(jié)果是_____2.下面的程序段是檢查輸入的算術(shù)表達式中圓括號是否配對,并顯示相應的結(jié)果。本程序在文本框輸入表達式,邊輸入,邊統(tǒng)計,以輸入回車符作為表達式輸入結(jié)束,然后顯示結(jié)果。2.下面的程序段是檢查輸入的算術(shù)表達式中圓括號是否配對,并顯Dimcount1%PrivateSubText1_KeyPress(KeyAsciiAsInteger)If__1__=“(”Thencount1=count1+1ElseIf__2__=“)”Then__3__EndIfIfKeyAscii=13ThenIf__4__ThenPrint“左右括號配對”ElseIf__5__ThenPrint“左括號多于右括號”;count1;”個”ElsePrint“右括號多于左括號”;-count1;”個”EndIfEndIfEndSubDimcount1%四、循環(huán)結(jié)構(gòu)及循環(huán)語句1、DO-LOOP語句及其對應的四種循環(huán)結(jié)構(gòu)注意:先判后做先做后判保證:不多做一次,不少做一次!P68—P69四、循環(huán)結(jié)構(gòu)及循環(huán)語句1、DO-LOOP語句及其對應的四種循Visual-Basic程序設(shè)計-第四章課件

DoWhile條件Do......[ExitDo][ExitDo]......LoopLoopWhile條件條件為TRUE——循環(huán);條件為FALSE——退出循環(huán)DoWhile條件Do條DoDoUntil條件......[ExitDo][ExitDo]...…LoopUntil

條件Loop條件為FALSE——循環(huán);條件為TRUE——退出循環(huán)Do 在Do語句和Loop語句之間的語句即為循環(huán)體語句。 ExitDo語句時,就會直接退出本層循環(huán),轉(zhuǎn)而執(zhí)行Loop語句的下一條語句。 此語句最常用的形式是與If-Then語句相結(jié)合,即:IfeThenExitDo 在Do語句和Loop語句之間的語句即為循環(huán)體語句。 Exi求兩個自然數(shù)的最大公約數(shù)的算法 (歐幾里德算法) S1.輸入兩個自然數(shù)M、N S2.求M除以N的余數(shù)R S3.使M=N,即用N代換M S4.使N=R,即用R代換N S5.若R≠0,則重復執(zhí)行S2、S3、S4(循環(huán)),否則轉(zhuǎn)S6 S6.輸出M,M即為M和N的最大公約數(shù)求兩個自然數(shù)的最大公約數(shù)的算法Visual-Basic程序設(shè)計-第四章課件PrivateSubCommand1_Click()Dimmaslong,naslong,rAsLongm=Val(Text1.Text)‘取數(shù)據(jù)Mn=Val(Text2.Text)‘取數(shù)據(jù)N

Ifm<>Int(m)orm<1orn<>Int(n)orn<1Then

Text3.Text="數(shù)據(jù)錯誤!"

Else

Ifm<nThent=m:m=n:n=t

Do‘求最大公約數(shù)

r=mModnm=nn=r

LoopUntilr=0Text3.Text=CStr(m)‘輸出最大公約數(shù)

EndIfEndSub判斷數(shù)據(jù)是否合法PrivateSubCommand1_Click()判斷r=1Dountilr=0r=mModnm=nn=rLoop求最大公約數(shù)Dor=mModnm=nn=rLoopUntilr=0r=1Dowhiler<>0r=mModnm=nn=rLoopDor=mModnm=nn=rLoopwhiler<>01234whiler<>0whiler<>0r=1求最大公約數(shù)Dor=1Do1234whiler<例:

我國有13億人口,按人口年增長0.8%計算,多少年后我國人口超過26億。PrivateSubCommand1_Click()x=13n=0DoWhilex<26x=x*1.008n=n+1LoopPrintn,xEndSub例:我國有13億人口,按人口年增長0.8%計算,多少年后2、計數(shù)型循環(huán)語句一般形式是:

Forv=e1Toe2[Stepe3]...[ExitFor]...

Nextvv是循環(huán)控制變量,應為整型或單精度型;循環(huán)體2、計數(shù)型循環(huán)語句一般形式是:循環(huán)體e1、e2和e3是控制循環(huán)的參數(shù)。e1為初值、e2為終值、e3為步長。當e3=1時,stepe3部分可以省略。e1、e2和e3是控制循環(huán)的參數(shù)。e1為初值、e2為終值、eFor-Next循環(huán)結(jié)構(gòu)語句的執(zhí)行方式計算e1、e2和e3的值(如果e1、e2、e3為算術(shù)表達式);給v賦初值;進行判別:判別v是否超過e2,超過則退出循環(huán),執(zhí)行Next下一語句;執(zhí)行Next語句,系統(tǒng)執(zhí)行下述操作:v增加一個步長,即執(zhí)行v=v+e3,轉(zhuǎn)而執(zhí)行判別操作。For-Next循環(huán)的正常循環(huán)次數(shù)用下式計算:

Int((e2-e1)/e3)+1

循環(huán)變量<=終值

語句塊

ExitFor

語句塊

循環(huán)變量加步長

T

F

循環(huán)變量得初值

For-Next循環(huán)結(jié)構(gòu)語句的執(zhí)行方式計算e1、e2和e3的For-Next示例1、用For語句寫程序,在一行上輸出60個“*”號……Fori=1To60Print"*";NextI……For-Next示例1、用For語句寫程序,在一行上輸出PrivateSubForm_Click()

Fori=1To10Step2Printi;

NextiPrint"i=";iEndSub注意:PrintI與PrintI;的區(qū)別!PrivateSubForm_Click()注意:例計算1~100的奇數(shù)和,程序段如下:Dimi%,s%S=0Fori=1To100step2 s=s+i Nexti

例計算1~100的奇數(shù)和,程序段如下:For-Next示例1、求N!(N為自然數(shù))由階乘定義可知:N!=1*2*3*······*(N-2)*(N-1)*N =(N-1)!*Nk=1Fori=1Tonk=k*iNextik=1Fori=nTo1step-1k=k*iNexti

For-Next示例1、求N!(N為自然數(shù))由階乘定義For-Next示例 控制變量的“初值”、“終值”和“步長”在進入For循環(huán)時,就被系統(tǒng)“記住”了,并不會因為循環(huán)體內(nèi)對它的修改而影響循環(huán)執(zhí)行的次數(shù)。例如:……x=2:y=8:z=3Fora=xToyStepzx=1:y=11:z=2Printa;Nexta……輸出結(jié)果是:258循環(huán)體內(nèi)雖然對x,y,z重新賦值,但程序仍按原來設(shè)定的初值、終值和步長去運行For-Next示例 控制變量的“初值”、“終值”和“步ForI=1to10step2printI;nextiI=1doprintI;I=I+2loopuntilI>10分析:兩段程序的功能一樣?兩種語句的特點?那種較為合適?ForI=1to10step2I=1分析:例:改變循環(huán)控制變量對循環(huán)的影響。PrivateSubCommand1_Click()j=0Fori=1To20Step2i=i+3j=j+1Print"第";j;"次循環(huán)i=";iNextiPrint"退出循環(huán)后i=";iEndSub正常情況:i=1,3,5,7,9,11,13,15,17,19現(xiàn)在:i=4,9,14,19在循環(huán)體內(nèi)對循環(huán)控制變量可多次引用;但最好不要對其賦值,否則影響原來的循環(huán)控制規(guī)律。例:改變循環(huán)控制變量對循環(huán)的影響。在循環(huán)體內(nèi)對循環(huán)控制A=1:b=0Dowhilea<=5b=b+a*aa=a+1LoopPrinta,bDimchasstring,IasintegerCh=“DEF”ForI=1tolen(ch)ch=mid(ch,2*I-1,1)&left(ch,len(ch))printchNextiA=1:b=0Dimchasstring,Iasi關(guān)于循環(huán)嵌套一個循環(huán)體內(nèi)又包含了一個完整的循環(huán)結(jié)構(gòu)稱為循環(huán)的嵌套.例:九九乘法表的實現(xiàn)。關(guān)于循環(huán)嵌套一個循環(huán)體內(nèi)又包含了一個完整的循環(huán)結(jié)構(gòu)稱為循環(huán)的PrivateSubCommand1_Click()

Fori=1To9Forj=1To9se=i&"×"&j&"="&i*jPicture1.PrintTab((j-1)*9+1);se;NextjPicture1.PrintNextiEndSub執(zhí)行本程序,圖片框上將顯示九九乘法表。換行!作用?PrivateSubCommand1_Click()換行

Forii=1To10Forjj=1To20… Nextii Nextjj

Forii=1To10Forii=1To20… Nextii Nextii

Forii=1To10Forjj=1To20… NextjjNextii

Forii=1To10…NextiiForii=1To10…Nextii

對于循環(huán)的嵌套,要注意以下事項:內(nèi)循環(huán)變量與外循環(huán)變量不能同名;外循環(huán)必須完全包含內(nèi)循環(huán),不能交叉;不能從循環(huán)體外轉(zhuǎn)向循環(huán)體內(nèi),反之則可以。正確

錯誤Forii=1To103、設(shè)計循環(huán)程序的關(guān)鍵需要解決的問題有規(guī)律?哪個變?怎么變?確定控制變量;了解兩種循環(huán)語句的功能與特點, 選擇合適的循環(huán)語句。保證不多做一次,不少做一次嘗試編寫循環(huán)體語句靜態(tài)走一遍;結(jié)果?調(diào)試….最后正確。3、設(shè)計循環(huán)程序的關(guān)鍵需要解決的問題有規(guī)律?哪個變?怎么變?其他輔助控制語句

1.GoTo語句形式:GoTo{標號|行號}作用:無條件地轉(zhuǎn)移到標號或行號指定的那行語句.標號是一個字符序列,行號是一個數(shù)字序列.2.Exit語句多種形式:ExitFor、ExitDo、ExitSub、ExitFunction等。作用:退出某種控制結(jié)構(gòu)的執(zhí)行。3.End語句多種形式:End、EndIf、EndSelect、EndWith、EndType、 EndSub、EndFunction、

作用:End結(jié)束一個程序的運行;其余表示某個結(jié)構(gòu)的結(jié)束,與對應的結(jié)構(gòu)語句配對出現(xiàn)。其他輔助控制語句PrivateSubCommand1_Click()Dimintranum,i,j,aAsInteger

Randomize‘隨機化語句

Fori=1To1000intranum=Int(100*Rnd)+1‘產(chǎn)生1~100間隨機數(shù)a=0

Forj=1To10000‘延時a=a+1

NextjText1.Text=CStr(intranum)Text1.Refresh‘文本框刷新

NextiText1.Text=CStr(intranum)EndSub4、舉例PrivateSubCommand1_Click()4、4.5常用算法算法是對某個問題求解過程的描述

1.累加、連乘

1~100的5或7的倍數(shù)的和

Sum=0Fori=1To100IfiMod5=0OriMod7=0Then

Sum=Sum+iEndIfNextiPrintSum3~10的乘積

t=1Fori=3To10

t=t*iNextiPrintt思考:若把循環(huán)體前面置各變量初值的語句放在循環(huán)體內(nèi),程序運行時會產(chǎn)生什么情況?4.5常用算法算法是對某個問題求解過程的描述1~100例:求自然對數(shù)e的近似值,要求其誤差小于0.00001,近似公式為:

該例題涉及兩個問題:

(1)用循環(huán)結(jié)構(gòu)求級數(shù)和的問題。本例根據(jù)某項值的精度來控制循環(huán)的結(jié)束與否。(2)累加:s=s+t循環(huán)體外對累加和的變量清零s=0

連乘:n=n*i循環(huán)體外對連乘積變量置1n=1

PrivateSubForm_Click()Dimi%,n&,t!,s!s=0:n=1‘s存放累加和、n存放階乘i=0:t=1‘i計數(shù)器、t第i項的值DoWhilet>0.00001s=s+t:i=i+1‘累加、連乘n=n*i:t=1/nLoopPrint"計算了";i;"項的和是";eEndSub例:求自然對數(shù)e的近似值,要求其誤差小于0.00001,近似用以下公式計算sin(x)的值。當最后一項的絕對值小于10-7時,停止計算。X的值由鍵盤輸入。分析:設(shè)變量t用于存放中間項的計算結(jié)果,并且當?shù)趎項值<10-7時結(jié)束計算,即循環(huán)結(jié)束條件為t的絕對值<1E-7;可以把算法描述為:再看和式中第n項tn

的值與第n-1項的遞推關(guān)系:t=第1項值:s=t:n=1DoUntilAbs(t)<1E-7n=n+1t=第n項值s=s+tLoop用以下公式計算sin(x)的值。當最后一項的絕對值小于10-2.求素數(shù)素數(shù)是一個大于2,且不能被1和本身以外的整數(shù)整除的整數(shù)。

判別某數(shù)m是否為素數(shù)最簡單的方法是:對于m從i=2,3,…,m-1判別m能否被i整除,只要有一個能整除,m不是素數(shù),否則m是素數(shù)。

求100以內(nèi)素數(shù)的代碼:

PrivateSubCommand1_Click()

DimIasinteger,masinteger,flagasboolean

Form=2To100

flag=trueFori=2Tom-1

If(mModi)=0Thenflag=falseNextiIfflagthenPrintmNextmEndSub2.求素數(shù)3.窮舉法

“窮舉法”也稱為“枚舉法”或“試湊法”,即將可能出現(xiàn)的各種情況一一測試,判斷是否滿足條件,一般采用循環(huán)來實現(xiàn)。

百元買百雞問題。假定小雞每只5角,公雞每只2元,母雞每只3元。現(xiàn)在有100元錢要求買100只雞,編程列出所有可能的購雞方案。設(shè)母雞、公雞、小雞各為x、y、z只,根據(jù)題目要求,列出方程為:x+y+z=1003x+2y+0.5z=100三個未知數(shù),兩個方程,此題有若干個解。解決此類問題采用“試湊法”,把每一種情況都考慮到。方法一:最簡單三個未知數(shù)利用三重循環(huán)來實現(xiàn)。方法二:從三個未知數(shù)的關(guān)系,利用兩重循環(huán)來實現(xiàn)。3.窮舉法PrivateSubForm_Click()dimxasinteger,yasinteger,zasintegerEndSub改進:Forx=0to33fory=0to50if3*x+2*y+0.5*(100-x-y)=100thenprintx,y,100-x-yendifnextyNextxforx=0to100fory=0to100forz=0to100ifx+y+z=100and3*x+2*y+0.5*z=100thenprintx,y,zendifnextznextynextxPrivateSubForm_Click()改進:for4.遞推法

“遞推法”又稱為“迭代法”,其基本思想是把一個復雜的計算過程轉(zhuǎn)化為簡單過程的多次重復。每次重復都從舊值的基礎(chǔ)上遞推出新值,并由新值代替舊值。

猴子吃桃子。小猴在某天摘桃若干個,當天吃掉一半多一個;第二天吃了剩下的桃子的一半多一個;以后每天都吃尚存桃子的一半多一個,到第7天要吃時只剩下一個,問小猴共摘下了多少個桃子?分析:這是一個“遞推”問題,先從最后一天推出倒數(shù)第二天的桃子,再從倒數(shù)第二天的桃子推出倒數(shù)第三天的桃子……。設(shè)第n天的桃子為xn,那么它是前一天的桃子數(shù)的xn-1的一半減1,即xn

=(xn-1+1)×24.遞推法PrivateSubForm_Click()dimnasinteger,Iasintegerx=1print“第7天的桃子數(shù)為:1只”forI=6to1step–1x=(x+1)*2print“第”;I;”天的桃子數(shù)為:”;x;”只”nextiEndSubPrivateSubForm_Click()5.最小、最大值在若干個數(shù)中求最大值,一般先假設(shè)一個較小的數(shù)為最大值的初值,若無法估計較小的值,則取第一個數(shù)為最大值的初值;然后將每一個數(shù)與最大值比較,若該數(shù)大于最大值,將該數(shù)替換為最大值;依次逐一比較。例隨機產(chǎn)生10個100~200之間的數(shù),求最大值。PrivateSubCommand1_Click()

Max=100Fori=1To10x=Int(Rnd*101+100)Printx;

Ifx>MaxThenMax=xNextiPrintPrint"最大值=";MaxEndSub5.最小、最大值PrivateSubCommand1_C

實際應用,求最短殘料。有一根長度為321米的鋼材料,要將它截取成兩種規(guī)格a、b的長度分別為17米和27米的短料,每種至少1段,問分隔成a,b各多少段后,剩余的殘料r最少?分析,該題利用“試湊法”通過二重循環(huán)求殘料r的最小值正數(shù),殘料不可能是負數(shù)。程序如下:PrivateSubCommand1_Click()Dima%,b%,min!,ia%,ib%min=321 ‘最小值初值取鋼材料的長度Forb=1To321\27 ‘b最多的段數(shù)Fora=1To321\17 ‘a(chǎn)最多的段數(shù)t=321-b*27-a*17 ‘當前的殘料Ift>0Andt<minThen min=t ‘求最短的殘料ia=a ‘最短殘料時a的段數(shù)ib=b ‘最短殘料時b的段數(shù)EndIfNextaNextbPrintia,ib,rEndSub實際應用,求最短殘料。PrivateSubCom二級真題練習

閱讀下面程序,單擊窗體后在窗體上顯示的內(nèi)容是________,若將程序中的A語句與B語句的位置互換,再次執(zhí)行程序,顯示內(nèi)容是________。(02春)OptionExplicitPrivateSubForm_Click()DimsumAsInteger,iAsIntegerFori=7To4Step-1SelectCaseiCase4,7sum=sum+i‘A語句

Case3,5sum=sum+2‘B語句CaseElsesum=sum+1EndSelectNextiPrint"sum=";sumEndSub二級真題練習

閱讀下面程序,單擊窗體后在窗體上顯示的內(nèi)容是執(zhí)行以下語句后,a的值是______(02春)DimaAsIntegera=1DoUntila=100a=a+2LoopA、99B、100C、溢出D、101執(zhí)行以下語句后,a的值是______(02春)求出1-100之內(nèi)的所有勾股數(shù)(若a2+b2=c2,a,b,c為自然數(shù),其中a<>b,則a,b,c稱為一對勾股數(shù))。編程題:求出1-100之內(nèi)的所有勾股數(shù)(若a2+b2=練習題1、下列循環(huán)語句能正常結(jié)束的循環(huán)是_____。A、I=5doI=I+1loopuntilI<0B、I=1doI=I+2loopuntilI=10C、I=10doI=I-2loopuntilI<0D、I=6doI=I-4loopuntilI=0練習題1、下列循環(huán)語句能正常結(jié)束的循環(huán)是_____。B、I=2、下面程序段運行結(jié)果為______。ForI=3to1step–1printspc(5-I);forj=1to2*I-1print“*”;nextjprintNextiA、*********B、*********C、*********D、*********2、下面程序段運行結(jié)果為______。A、*B執(zhí)行下面程序,當單擊窗體時,顯示在窗體上的第一行的內(nèi)容是_______,第二行的內(nèi)容是_______Privatesubform_click()dimIasinteger,sumasintegerforI=0.5to8.5step2.5sum=sum+I*10nextIprintsumprintIEndsub執(zhí)行下面程序,當單擊窗體時,顯示在窗體上的第一行的內(nèi)容是__3、執(zhí)行下面程序,打印結(jié)果是_______。optionexplicitprivatesubform_click()dimIasinteger,jasintegerj=10forI=1tojstep2I=I+1j=j-inextIprintI,jendsub3、執(zhí)行下面程序,打印結(jié)果是_______。4、將一個正整數(shù)分解為質(zhì)因數(shù)乘積。例如:234=2*3*3*13。Privatesubcommand1_click()dimn%,factor%,firstasbooleann=inputbox(“輸入一個正整數(shù)”)factor=2first=truedodowhile____iffirstthenprintn;”=”;factor;elseprint“*”;factor;endif_____first=falseloopfactor=factor+1Loopuntilfactor>nEndsub4、將一個正整數(shù)分解為質(zhì)因數(shù)乘積。例如:234=2*3*3*第四章VB算法基礎(chǔ)及基本語句第四章VB算法基礎(chǔ)及基本語句主要內(nèi)容三種程序結(jié)構(gòu)(順序,分支,循環(huán))賦值語句條件分支語句(共五種)筆記、作業(yè)、實驗主要內(nèi)容三種程序結(jié)構(gòu)(順序,分支,循環(huán))筆記、作業(yè)、實驗求兩個自然數(shù)的最大公約數(shù)的算法 (歐幾里德算法) S1.輸入兩個自然數(shù)M、N S2.求M除以N的余數(shù)R S3.使M=N,即用N代換M S4.使N=R,即用R代換N S5.若R≠0,則重復執(zhí)行S2、S3、S4(循環(huán)),否則轉(zhuǎn)S6 S6.輸出M,M即為M和N的最大公約數(shù)求兩個自然數(shù)的最大公約數(shù)的算法基本算法結(jié)構(gòu)圖順序分支循環(huán)基本算法結(jié)構(gòu)圖順序分支循環(huán)4.2.1賦值語句1、形式Var=<表達式>如:s=“Thisisaflower”Number%=72Text.font.size=12Y=(a+b)/2作用:將表達式的值賦值給變量名。一般用于給變量賦值或?qū)丶O(shè)定屬性值。4.2.1賦值語句1、形式2.不同數(shù)據(jù)類型數(shù)據(jù)的賦值當表達式的類型與變量的類型不一致時,強制轉(zhuǎn)換成左邊的精度,如iA%=10/3iA中的結(jié)果為3

注意:雖然賦值號與關(guān)系運算符“等號”都用“=”表示,VB系統(tǒng)會根據(jù)所處的位置自動判斷是何種意義的符號。注意點:P59-602.不同數(shù)據(jù)類型數(shù)據(jù)的賦值4.2.2InputBox函數(shù)InputBox函數(shù) 作用:

用來接受用戶通過鍵盤輸入的數(shù)據(jù)。形式:V=InputBox(Prompt[,Title][,Default]

[,x,y][,helpfile,context])其中:提示:

提示信息;標題:

對話框標題;缺?。狠斎?yún)^(qū)缺省值函數(shù)返回字符類型。舉例:下頁4.2.2InputBox函數(shù)InputBox函數(shù)PrivateSubForm_Click()

PassWord=InputBox("輸入你的口令:","程序示例")IfPassWord="123456"ThenPrint"OK!"ElsePrint"Error!"EndIfEndSub函數(shù)返回值PrivateSubForm_Click()函數(shù)返回值4.2.3MsgBox函數(shù)作用: MsgBox函數(shù)用于向用戶發(fā)布提示信息,并要求用戶作出必要的響應。形式是: MsgBox(Prompt[,button][,title]

[,helpfile,context])P724.2.3MsgBox函數(shù)作用:P72button:這是一個由4個數(shù)值常量組成的式子,形式為c1+c2+c3+c4,button:

PrintMsgBox("非法數(shù)據(jù)!",vbOKOnly+48+0,"提示信息")

PrintMsgBox(“請輸入X值!”,16+vbOKOnly,”ex4_6")PrintMsgBox("非法數(shù)據(jù)!",vbOKOnlMsgBox函數(shù)根據(jù)用戶選擇單擊的按鈕而返回不同的值:參見P63表4-3。MsgBox函數(shù)根據(jù)用戶選擇單擊的按鈕而返回不同的值:參見P順序結(jié)構(gòu)順序結(jié)構(gòu)4.3分支結(jié)構(gòu)和分支結(jié)構(gòu)語句結(jié)構(gòu)示意圖4.3分支結(jié)構(gòu)和分支結(jié)構(gòu)語句結(jié)構(gòu)示意圖1、IF條件THEN一條語句2、if條件THEN

語句組(多條語句)

end

if3、if條件then

語句組1

else

語句組2

end

if4、if條件1then 語句組1 elseif條件2then

語句組2 elseif條件3then

語句組3……[else

語句組n]endif1、IF條件THEN一條語句4、if條件1the

1.If…Then語句(單分支結(jié)構(gòu))

If<表達式>Then語句塊EndIf

If<表達式>Then<語句>

例:已知兩個數(shù)x和y,比較它們的大小,使得x大于y.

Ifx<yThent=xx=yy=tEndIf

或Ifx<yThent=x:x=y:y=t重要的是學會兩個數(shù)的交換,若上述語句次序變一下,結(jié)果如何?例:已知兩個數(shù)x和y,比較它們的大小,2.If…Then…Else語句(雙分支結(jié)構(gòu))

If<表達式>Then<語句塊1>Else<語句塊2>EndIf

If<表達式>Then<語句1>Else<語句2>

計算分段函數(shù):單分支結(jié)構(gòu)實現(xiàn):

y=cos(x)-x^3+3*xIfx<>0Theny=sin(x)+sqr(x*x+1)

雙分支結(jié)構(gòu)實現(xiàn):

Ifx<>0Theny=sin(x)+sqr(x*x+1)Elsey=cos(x)-x^3+3*xEndIf2.If…Then…Else語句(雙分支結(jié)構(gòu))單分支結(jié)構(gòu)實3.If…Then…ElseIf語句(多分支結(jié)構(gòu))

形式:

If<表達式1>Then <語句塊1>ElseIf<表達式2>Then <語句塊2>

[Else

語句塊n+1

]EndIf3.If…Then…ElseIf語句(多分支結(jié)構(gòu))PrivateSubCommand1_Click()DimxAsIntegerx=Val(Text1.Text)

Ifx<1ThenText2.Text=“小于1的數(shù)”

ElseIfx<=10ThenText2.Text=“1到10之間”

ElseText2.Text=”大于10的數(shù)”

EndIfEndSub輸入判斷PrivateSubCommand1_Click()輸入例已知變量strC中存放了一個字符,判斷該字符是字母字符、數(shù)字字符還是其他字符。用多分支結(jié)構(gòu)實現(xiàn):

不管有幾個分支,依次判斷,當某條件滿足,執(zhí)行相應的語句,其余分支不再執(zhí)行;若條件都不滿足,且有Else子句,則執(zhí)行該語句塊,否則什么也不執(zhí)行。.

ElseIf不能寫成ElseIf。IfUcase(strC)>="A"AndUcase(strC)<="Z"Then

PrintstrC+"是字母字符"ElseIfstrC>="0"AndstrC<="9"Then PrintstrC+"是數(shù)字字符"Else PrintstrC+"其他字符"EndIf例已知變量strC中存放了一個字符,判斷該字符是字母字符、數(shù)4.If語句的嵌套

If語句的嵌套是指If或Else后面的語句塊中又包含If語句。形式如下:

If<表達式1>Then

If<表達式11>Then…EndIf…EndIf

例:已知x,y,z三個數(shù),使得x>y>z用一個IF語句和一個嵌套的IF語句實現(xiàn)Ifx<yThent=x:x=y:y=t

Ify<zThent=y:y=z:z=t

Ifx<yThent=x:x=y:y=tEndIf

EndIfIf語句的嵌套注意事項:書寫鋸齒型;If與EndIf配對。4.If語句的嵌套例:已知x,y,z三個數(shù),使得x>y>z5、Select-Case-EndSelect結(jié)構(gòu)語句Select

Casee

Casec1A組語句

Casec2B組語句...

Case

Elsen組語句

EndSelecte稱為測試表達式,

c1,c2,...是測試項它們可取三種形式:(1)具體取值:

如:3、5、7.2等;(2)連續(xù)的數(shù)據(jù)范圍:

如:8To20;”B”To“H”等;(3)滿足某個判決條件:

如:Is>20;Is<="P"等。測試項還可以是這三中形式的組合,如4,7To9,Is>305、Select-Case-EndSelect結(jié)構(gòu)語句表達式列表1……語句塊1……語句塊n+1……表達式列表2表達式列表n語句塊2語句塊nTTTFFF表達式列表1……語句塊1……語句塊n+1……表達式列表2表達PrivateSubCommand1_Click()DimxAsIntegerx=Val(text1.Text)

Select

Casex

CaseIs<1Text2.text="這是小于1的數(shù)"

Case1To10Text2.Text="這是1到10之間的數(shù)"

CaseElseText2.Text="這是大于10的數(shù)"

EndSelectEndSubPrivateSubCommand1_Click()例變量strC中存放了一個字符,判斷該字符類型。在前面例中用多分支結(jié)構(gòu)實現(xiàn):

IfUcase(strC)>="A"AndUcase(strC)<="Z"Then PrintstrC+"是字母字符"ElseIfstrC>="0"AndstrC<="9"Then PrintstrC+"是數(shù)字字符"Else PrintstrC+"其他字符"EndIf用SelectCase語句實現(xiàn):

SelectCasestrC Case"a"To"z","A"To"Z" PrintstrC+"是字母字符"

Case"0"To"9" PrintstrC+"是數(shù)字字符"

CaseElse PrintstrC+"其他字符"

EndSelect例變量strC中存放了一個字符,判斷該字符類型。

DimxAsSingle,yAsSinglex=Val(Text1.Text)Ifx>=0Theny=1+xElsey=1-2*xEndIfText2.Text=y輸入x,計算y的值。其中 1+x(x≥0)Y=1-2x(x<0)思考題:DimxAsSingle,yAsSingle1、學校對學習成績優(yōu)良的學生進行獎勵,獲獎的條件如下:(1)所考5門課的成績都在88分以上。(2)前3門(主課)的成績都在95分以上,其他兩門(非主課)的成績都在80分以上。輸入某學生5門課的成績s1、s2、s3、s4、s5,判斷他是否能夠獲獎。1、學校對學習成績優(yōu)良的學生進行獎勵,獲獎的條件如下:2、利用輸入框函數(shù)輸入3個不同的數(shù),選出其中最大的數(shù)。2、利用輸入框函數(shù)輸入3個不同的數(shù),選出其中最大的數(shù)。3、鐵路托運行李,從甲地到乙地,規(guī)定每張客票托運費計算方法是行李重量不超過50kg時,0.25元/kg,超過50kg而不超過100kg時,其超過部分按0.35元/kg收費,超過100kg時,其超過部分按0.45元/kg收費。編寫程序,輸入行李重量,計算并輸出托運的費用。設(shè)行李重量為wkg,應付運費為x元,則運費公式為:0.25*w(w<=50)X=0.25*50+0.35*(w-50)(50<w<=100)0.25*50+0.35*50+0.45*(w-100)(w>100)3、鐵路托運行李,從甲地到乙地,規(guī)定每張客4、某百貨公司為了促銷,采用購物打折扣的優(yōu)惠辦法:每位顧客一次購物(1)在1000元以上者,按九五折優(yōu)惠;(2)在2000元以上者,按九折優(yōu)惠;(3)在3000元以上者,按八五折優(yōu)惠;(4)在5000元以上者,按八折優(yōu)惠;編寫程序,輸入購物款數(shù),計算并輸出優(yōu)惠價。4、某百貨公司為了促銷,采用購物打折扣的優(yōu)惠5、已知兩個變量x和y,比較它們的大小,使得x中的值大于y,下面那個方法能實現(xiàn)?Ifx<ythenA、x=y:y=xB、x=t:t=y:y=tC、t=y:y=x:x=tD、x=y:t=y:x=t5、已知兩個變量x和y,比較它們的大小,使得常見錯誤1.在選擇結(jié)構(gòu)中缺少配對的結(jié)束語句對多行式的If塊語句中,應有配對的EndIf語句結(jié)束。2.多邊選擇ElseIf關(guān)鍵字的書寫和條件表達式的表示ElseIf不要寫成ElseIf;多個條件表達式次序問題。3.SelectCase語句的使用SelectCase后不能出現(xiàn)多個變量;Case子句后不能出現(xiàn)變量。常見錯誤例:已知百分制成績mark,顯示對應

溫馨提示

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

評論

0/150

提交評論