數(shù)據(jù)庫應(yīng)用08 vba結(jié)構(gòu)化程序設(shè)計(jì)_第1頁
數(shù)據(jù)庫應(yīng)用08 vba結(jié)構(gòu)化程序設(shè)計(jì)_第2頁
數(shù)據(jù)庫應(yīng)用08 vba結(jié)構(gòu)化程序設(shè)計(jì)_第3頁
數(shù)據(jù)庫應(yīng)用08 vba結(jié)構(gòu)化程序設(shè)計(jì)_第4頁
數(shù)據(jù)庫應(yīng)用08 vba結(jié)構(gòu)化程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩102頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第8章VBA程序設(shè)計(jì)基礎(chǔ)程序概念維基解釋()/zh-cn/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E8%AF%AD%E8%A8%80另一種解釋參見Wiki解釋/wiki?title=%E7%A8%8B%E5%BA%8F&variant=zh-cn計(jì)算機(jī)程序或者軟件程序(通常簡稱程序)是指一組指示計(jì)算機(jī)每一步動(dòng)作的指令,通常用某種程序設(shè)計(jì)語言編寫,運(yùn)行于某種目標(biāo)體系結(jié)構(gòu)上。打個(gè)比方,一個(gè)程序就像一個(gè)用漢語(程序設(shè)計(jì)語言)寫下的紅燒肉菜譜(程序),用于指導(dǎo)懂漢語的人(體系結(jié)構(gòu))來做這個(gè)菜。通常,計(jì)算機(jī)程序要經(jīng)過編譯和鏈接而成為一種人們不易理解而計(jì)算機(jī)理解的格式,然后運(yùn)行。未經(jīng)編譯就可運(yùn)行的程序通常稱之為腳本程序。AJoke(SQL版)某女技術(shù)人員的征婚信息SELECT*FROM男人

WHERE(未婚=trueor離異=true) and窮光蛋=falseand有房=trueand有車=true結(jié)果有人回帖:(0row(s)affected)AJoke(C語言版)姑娘愛小伙(偽C語言版)resultlove(boy,girl){if(boy.有房()andboy.有車()){boy.set(nothing);returngirl.嫁給(boy);}姑娘愛小伙

(搞笑版)if(girl.愿意等()){while(!(boy.賺錢>100,000andgirl.感情>8)){for(day=1;day<=365;day++){if((day==情人節(jié)orday==girl.生日)&andboy.givegirl(玫瑰))girl.感情++;elsegirl.感情--;boy.拼命賺錢();}//for}//while姑娘愛小伙(搞笑版)if(boy.有房()andboy.有車()){boy.set(nothing);returngirl.嫁給(boy);}else{

年齡++;girl.感情--;}returngirl.goto(another_boy);}姑娘愛小伙(搞笑版)完整版resultlove(boy,girl){if(boy.有房()andboy.有車()){boy.set(nothing);returngirl.嫁給(boy);}if(girl.愿意等()){while(!(boy.賺錢>100,000andgirl.感情>8)){for(day=1;day<=365;day++){if((day==情人節(jié)orday==girl.生日)&andboy.givegirl(玫瑰))girl.感情++;elsegirl.感情--;boy.拼命賺錢();}//for}//whileif(boy.有房()andboy.有車()){boy.set(nothing);returngirl.嫁給(boy);}else{

年齡++;girl.感情--;}//if愿意等

returngirl.goto(another_boy);}程序可讀性縮格對(duì)齊注釋8結(jié)構(gòu)化程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)過程算法程序流程圖及示例8.1程序設(shè)計(jì)過程程序設(shè)計(jì)即是計(jì)算機(jī)用戶根據(jù)解決某一問題的步驟,按一定的邏輯關(guān)系,將一系列的指令組合在一起。8.2算法(1)程序的設(shè)計(jì)過程,核心問題是設(shè)計(jì)一個(gè)合理、有效的算法。一般認(rèn)為,算法就是在有限的時(shí)間內(nèi),可以根據(jù)明確規(guī)定的運(yùn)算規(guī)則,在有窮步驟內(nèi)得出確切計(jì)算結(jié)果的機(jī)械步驟或能運(yùn)行的計(jì)算程序。8.2算法(2)算法特性:(1)有序性:每個(gè)步驟被執(zhí)行的順序是確定的。(2)有限性:即解題步驟是有限的,無窮的步驟意味無解。(3)確定性:多次運(yùn)行同樣一個(gè)程序,其結(jié)果相同。此外,算法可以沒有輸入(因?yàn)檩斎胗捎?jì)算機(jī)自動(dòng)產(chǎn)生),但一定要有輸出,輸出用來表示問題是否有解。8.2算法(3)三種基本控制結(jié)構(gòu):順序、分支、循環(huán)順序結(jié)構(gòu)是程序設(shè)計(jì)中最基本的結(jié)構(gòu)。在該結(jié)構(gòu)中,程序的執(zhí)行是按命令出現(xiàn)的先后順序依次執(zhí)行的。分支結(jié)構(gòu)是按給定的選擇條件成立與否來確定程序的走向。分支結(jié)構(gòu)可分為雙重分支選擇和多重分支選擇。在任何條件下,無論分支多少,只能選擇其一。8.2算法(4)三種基本控制結(jié)構(gòu):順序、分支、循環(huán)循環(huán)結(jié)構(gòu)是一種重復(fù)結(jié)構(gòu),即某一程序段將被反復(fù)執(zhí)行若干次。按循環(huán)的嵌套層次,循環(huán)可分為簡單循環(huán)結(jié)構(gòu)和循環(huán)嵌套(也稱為多重循環(huán))結(jié)構(gòu)。按循環(huán)體執(zhí)行的條件性質(zhì),循環(huán)又可分為While循環(huán)和Until循環(huán)。無論何種類型的循環(huán)結(jié)構(gòu),都要確保循環(huán)的重復(fù)執(zhí)行能夠終止。8.2算法(5)結(jié)構(gòu)化程序是指僅由三種基本控制結(jié)構(gòu)組成的程序,它具有以下特點(diǎn):(1)整個(gè)程序模塊化。(2)每個(gè)模塊只有一個(gè)入口和一個(gè)出口。(3)每個(gè)模塊都應(yīng)能單獨(dú)執(zhí)行,且無死循環(huán)。(4)采用黑箱的思想,宏觀地描述任何一個(gè)程序,可以將它看成為順序結(jié)構(gòu)。8.3程序流程圖及示例ANSI流程圖N-S圖1.ANSI流程圖(1)判斷框箭頭:表示程序流向連接符號(hào):表示圖標(biāo)之間相互連接關(guān)系判斷框:表示根據(jù)條件決定程序走向過程:表示該流程部分是一個(gè)過程輸入/輸出框:表示數(shù)據(jù)的輸入、輸出操作處理框:表示對(duì)數(shù)據(jù)進(jìn)行處理起止框:表示程序的開始或結(jié)束1.ANSI流程圖(2)順序結(jié)構(gòu)1.ANSI流程圖(3)條件分支結(jié)構(gòu)1.ANSI流程圖(4)循環(huán)結(jié)構(gòu)Until型循環(huán)結(jié)構(gòu)While型循環(huán)結(jié)構(gòu)1.ANSI流程圖(5)多重條件分支結(jié)構(gòu)2.N-S圖(1)順序結(jié)構(gòu)語句塊1語句塊2語句塊32.N-S圖(2)條件分支結(jié)構(gòu)2.N-S圖(3)多重分支選擇語句2.N-S圖(4)循環(huán)結(jié)構(gòu)Until型循環(huán)結(jié)構(gòu)While型循環(huán)結(jié)構(gòu)8.3程序的控制語句結(jié)構(gòu)順序結(jié)構(gòu)程序分支結(jié)構(gòu)程序循環(huán)結(jié)構(gòu)程序2.分支結(jié)構(gòu)程序(1)雙重分支選擇語句語句格式:If<條件>Then <語句塊1>[Else <語句塊2>]EndIf假真條件語句塊1語句塊22.分支結(jié)構(gòu)程序(2)

語句塊1語句塊2雙重分支選擇語句條件真假語句格式:If<條件>Then <語句塊1>[Else <語句塊2>]EndIf2.分支結(jié)構(gòu)程序(3)多重分支選擇語句If<條件1>Then [<語句塊1>][ElseIf<條件2>Then [<語句塊2>]] ...[ElseIf<條件n>Then [<語句塊n>]][Else [<語句塊>]]EndIf

2.分支結(jié)構(gòu)程序(4)多重分支選擇語句If<條件1>Then [<語句塊1>][ElseIf<條件2>Then [<語句塊2>]] ...[ElseIf<條件n>Then [<語句塊n>]][Else [<語句塊>]]EndIf例:根據(jù)輸入的X值,決定輸出Y的值。Y=1(x>0)0(x=0)-1(x<0)輸入XX>0是否Y=1X=0是否Y=0Y=-1輸出YN---S流程圖.《數(shù)據(jù)庫應(yīng)用》課程組200735PublicSub求Y的值()DimxAsDoublex=InputBox("請輸入x的值","輸入x")Ifx>0ThenDebug.Print"y=1"ElseIfx=0ThenDebug.Print"y=0"ElseDebug.Print"y=-1"EndIfEndSub例:根據(jù)輸入的X值,決定輸出Y的值。PublicSub判斷奇偶性()DimstrxAsStringDimxAsIntegerstrx=InputBox("請輸入x","提示")x=Val(strx)IfxMod2=0ThenDebug.Print"該數(shù)為偶數(shù)!"ElseDebug.Print"該數(shù)為奇數(shù)!"EndIfEndSub例:輸入一個(gè)數(shù),判別其奇偶性。&&這是一個(gè)表示X/2為整數(shù)(即X可被2整除)的方法,另一個(gè)表示方法為:xMOD2=0;另外,表示X能被2整除的方法還有:INT(X/2)=X/2【例1】輸入任意的兩個(gè)數(shù),將它們按升序輸出。方法一:比較大小,按大小順序輸出,,共有多少種輸出??(2種)方法二:能否只有一種輸出??算法應(yīng)用舉例—分支結(jié)構(gòu)

.《數(shù)據(jù)庫應(yīng)用》課程組200738算法應(yīng)用舉例結(jié)束【例】輸入任意的三個(gè)數(shù),將它們按升序輸出。方法一:思想:比較大小,按大小順序輸出。??共有多少種輸出算法應(yīng)用舉例用流程圖表示以下算法a,b,c?a,c,b?c,a,b?Fb<cTFa<cTT?a,b,cFa<bb,a,c?c,b,a?b,c,a?Fa<cTFc<bT輸入任意的三個(gè)數(shù),將它們按升序輸出。(方法一)輸出Y,Z,X輸出Y,X,ZX>YFX>ZFT輸入X,Y,ZTFY>ZT輸出Z,Y,XX>ZTFY>ZFT輸出Z,X,Y輸出X,Y,Z輸出X,Z,Y輸入任意的三個(gè)數(shù),將它們按升序輸出。(方法二:即最終輸出時(shí)按X,Y,Z的順序顯示)XYZ1.X與Y比較,X中放小數(shù),Y中放大數(shù)2.X與Z比較,X中放小數(shù),Z中放大數(shù)3.Y與Z比較,Y中放小數(shù),Z中放大數(shù)第1步與第2步比較,保證了X中放的是最小數(shù);第3步比較保證了Y中放的是次小數(shù)。輸入任意的三個(gè)數(shù),將它們按升序輸出。(P145例8-2)輸入三個(gè)數(shù)X,Y,ZX>YTFX與Y交換X>ZTFX與Z交換Y>ZFTY與Z交換輸出X,Y,ZX為最小數(shù)Y為次小數(shù)如何交換變量對(duì)X,Y的值:1:ZX2:XY3:YZXYZ1232.分支結(jié)構(gòu)程序(5)例6-8:從鍵盤隨機(jī)輸入成績分?jǐn)?shù),根據(jù)成績分?jǐn)?shù)來判斷該成績屬于優(yōu)、良、中還是差。規(guī)定:90≤成績≤100為優(yōu);80≤成績<90為良;60≤成績<80為中;成績<60為差;其它為非法輸入。例4:輸入一個(gè)百分制成績到變量x,輸出對(duì)應(yīng)的等級(jí)A,B,C,D或E。開始結(jié)束x>=90y?Fx>=80TFx>=70Fx>=60Fy=‘A’y=‘B’y=‘C’y=‘D’y=‘E’TTT思考以下問題:①x>100||x<0?稱為異常處理(完備?)②注意條件的書寫順序,一般采用的方法是從一端到另一端的排斥法。

?x開始結(jié)束x>=90y?Fx>=80TFx>=70Fx>=60Fy=‘A’y=‘B’y=‘C’y=‘D’y=‘E’TTTx>100||x<0FTy=‘O’[90,100][80,90)[70,80)[60,70)[0,60)改進(jìn)后的流程圖為:?x2.分支結(jié)構(gòu)程序(6)PublicSubmulticase()DimgradeAsIntegergrade=Val(InputBox("請輸入成績"))Ifgrade<=100Andgrade>=90ThenDebug.PrintStr(grade)&"的成績?yōu)?"&"優(yōu)"'縮格的目的是增加可讀性ElseIfgrade<90Andgrade>=80ThenDebug.PrintStr(grade)&"的成績?yōu)?"&"良"ElseIfgrade<80Andgrade>=60ThenDebug.PrintStr(grade)&"的成績?yōu)?"&"中"ElseIfgrade<60Andgrade>0ThenDebug.PrintStr(grade)&"的成績?yōu)?"&"差"ElseDebug.Print"您輸入的成績不對(duì)!"EndIfEndSub2.分支結(jié)構(gòu)程序(3)多重分支選擇語句SelectCase<測試表達(dá)式> [Case<條件表達(dá)式1> [<語句塊1>]] ... [CaseElse [<語句塊>]]EndSelect

2.分支結(jié)構(gòu)程序(4)多重分支選擇語句SelectCase<測試表達(dá)式> [Case<條件表達(dá)式1> [<語句塊1>]] ... [CaseElse [<語句塊>]]EndSelect例子【例8-4】從鍵盤隨機(jī)輸入成績分?jǐn)?shù),根據(jù)成績分?jǐn)?shù)來判斷該成績屬于優(yōu)、良、中還是差。規(guī)定:90≤成績≤100為優(yōu);80≤成績<90為良;60≤成績<80為中;成績<60為差;其他為非法輸入。PublicSubmulticase()DimgradeAsIntegergrade=Val(InputBox("請輸入成績"))SelectCasegradeCase90To100MsgBox(Str(grade)&"的成績?yōu)?"&"優(yōu)")Case80To90MsgBox(Str(grade)&"的成績?yōu)?"&"良")Case60To80MsgBox(Str(grade)&"的成績?yōu)?"&"中")Case0To60MsgBox(Str(grade)&"的成績?yōu)?"&"差")CaseElseMsgBox("您輸入的成績不對(duì)!")EndSelectEndSub分支嵌套VBA允許在If…Else…EndIf的<語句塊>中使用If…Else…EndIf語句If語句的嵌套【例8-6】隨機(jī)輸入年份,判斷該年是否為閏年。判斷閏年的條件是:年份如能被4整除但不能被100整除,是閏年;若年份能被400整除,則是閏年。分析:當(dāng)隨意輸入一年份時(shí),該年份如不能被4整除,則該年肯定不是閏年。問題是當(dāng)該年份能被4整除時(shí),有可能是閏年,也可能不是閏年。因?yàn)?00是4的倍數(shù),400又是100的倍數(shù)。因此我們首先判斷該年份是否被4整除,再判斷是否被100整除,最后判斷是否被400整除。PublicSubLeapYear1()DimnyearAsIntegernyear=Val(InputBox("請輸入年份"))Ifnyear/4=Int(nyear/4)ThenIfnyear/100=Int(nyear/100)ThenIfnyear/400=Int(nyear/400)ThenDebug.Print"閏年"ElseDebug.Print"非閏年"EndIfElseDebug.Print"閏年"EndIfElseDebug.Print"非閏年"EndIfEndSub課后練習(xí)從鍵盤上輸入一個(gè)數(shù),若它既能被3又能被5整除則輸出該數(shù)。.《數(shù)據(jù)庫應(yīng)用》課程組200757PublicSubt1112()DimaAsIntegera=Val(InputBox("輸入a"))IfaMod3=0ThenIfaMod5=0ThenDebug.PrintaElseDebug.Print"重新輸入"EndIfElseDebug.Print"重新輸入"EndIfEndSubPublicSubt1112()DimaAsIntegera=Val(InputBox("輸入a"))IfaMod3=0AndaMod5=0ThenDebug.PrintaElseDebug.Print"重新輸入"EndIfEndSub3.循環(huán)結(jié)構(gòu)程序DOWHILE循環(huán)DOWHILE循環(huán)語句格式:DoWhile<條件表達(dá)式> <語句塊> [ExitDo]Loop3.循環(huán)結(jié)構(gòu)程序DOWHILE循環(huán)循環(huán)語句的使用要注意下列幾點(diǎn):(1)DoWhile和Loop子句要配對(duì)使用,Loop的作用是使循環(huán)回到循環(huán)的開始,即到DoWhile語句。(2)在第一次執(zhí)行到DoWhile語句時(shí),循環(huán)條件必須為真,才能進(jìn)入循環(huán)體。在執(zhí)行完成循環(huán)體語句后,再判斷循環(huán)條件是否為真,如果為真,則繼續(xù)循環(huán),直到循環(huán)條件為假時(shí),才退出循環(huán)語句,執(zhí)行Loop后面的語句。3.循環(huán)結(jié)構(gòu)程序DOWHILE循環(huán)循環(huán)語句的使用要注意下列幾點(diǎn):(3)循環(huán)體中,一定存在一條或若干條語句在改變循環(huán)條件。如果循環(huán)條件恒為真,則是死循環(huán)。(4)要小心改變循環(huán)條件,如果不適當(dāng)?shù)男薷难h(huán)條件,則循環(huán)將不能按預(yù)先的設(shè)想進(jìn)行,程序也達(dá)不到預(yù)期的效果。(5)為增加程序的可讀性,使程序清晰易懂,必須使用縮格。(6)關(guān)于ExitDo語句使用參見本節(jié)后面的內(nèi)容。3.循環(huán)結(jié)構(gòu)程序DOWHILE循環(huán)例6-11:求1加到10的累加和S=1+2+3+…+8+9+10PublicSubsum_example()s=0'求累加和的變量

i=1'循環(huán)變量賦初值

DoWhilei<=10'循環(huán)條件,使用縮格,提高可讀性

Debug.Printi'此處輸出變量i的值是方便理解循環(huán)的過程

s=s+i

'求累加,即循環(huán)不變式

Debug.Prints;'輸出s的結(jié)果,理解每次累加結(jié)果的變化

i=i+1

'改變循環(huán)變量的值

LoopDebug.Prints'循環(huán)體外輸出結(jié)果EndSub3.循環(huán)結(jié)構(gòu)程序DOWHILE循環(huán)循環(huán)閱讀理解循環(huán)條件是什么?什么時(shí)候進(jìn)入循環(huán)?什么時(shí)候退出循環(huán)?循環(huán)體內(nèi)如何改變循環(huán)條件?循環(huán)變量的作用?2023/4/21.63

求1至N之間的所有自然數(shù)之和。i=1,s=0i<=Ns=s+ii=i+1Y結(jié)束輸出sN開始輸入N1、前后項(xiàng)的關(guān)系2、初始值、循環(huán)條件與循環(huán)體的關(guān)系循環(huán)結(jié)構(gòu)的關(guān)鍵初始值、循環(huán)條件與循環(huán)體是不是唯一的?s=1?i=i+1s=s+ii<N?PublicSubs1()DimnAsInteger

n=Val(InputBox("請輸入一個(gè)正整數(shù):"))s=0i=1DoWhilei<=ns=s+ii=i+1LoopDebug.Printi;sEndSub.《數(shù)據(jù)庫應(yīng)用》課程組2007643.循環(huán)結(jié)構(gòu)程序DOWHILE循環(huán)2023/4/21.65i<=N結(jié)束輸出sNi=1,s=0s=s+1/ii=i+1Y開始輸入N簡單,代碼我會(huì)了!2023/4/21.66開始n=100,m=0Nn<1000?n=n+1n能被3和5整除嗎?YYm=m+1輸出n結(jié)束輸出mN

例:輸出3位數(shù)中所有既能被3整除又能被5整除的數(shù),并統(tǒng)計(jì)其個(gè)數(shù)。循環(huán)?分支?回顧解題思路混合結(jié)構(gòu):循環(huán)中包含分支任何分支結(jié)束后都要為下一次循環(huán)做準(zhǔn)備!PublicSubs1()Dimm,nAsIntegerm=0n=100DoWhilen<=999

IfnMod3=0AndnMod5=0Thenm=m+1Debug.PrintnEndIfn=n+1

LoopDebug.PrintmEndSub67.《數(shù)據(jù)庫應(yīng)用》課程組20073.循環(huán)結(jié)構(gòu)程序DOWHILE循環(huán)PublicSubs1()Dimm,nAsIntegerm=0n=100DoWhilen<=999

IfInt(n/15)=n/15Thenm=m+1Debug.PrintnEndIfn=n+1

LoopDebug.PrintmEndSub課后練習(xí)從鍵盤上輸入一個(gè)數(shù),若它既能被3又能被5整除則輸出該數(shù),否則,最多允許出錯(cuò)3次。.《數(shù)據(jù)庫應(yīng)用》課程組200768PublicSubthree()Dima,b,iAsIntegeri=0DoWhilei<3a=Val(InputBox("pleaseinputanumber"))b=aMod15Ifb=0ThenDebug.Printa,"可以被15整除";

ExitDoElsei=i+1Debug.Printa,"不可以被15整除,請重新輸入"EndIfLoopEndSub3.循環(huán)結(jié)構(gòu)程序For循環(huán)For循環(huán)語句格式:For<循環(huán)變量>=<循環(huán)初值>To<循環(huán)終值>[Step<步長>] <語句塊> [ExitFor]Next求:S=1+2+3+…..+100PublicSubs1for()s=0

Fori=1To100Debug.Printis=s+iDebug.Prints;

NextDebug.PrintsEndSubPublicSubsum_example()s=0

i=1

DoWhile

i<=100

Debug.Printi

s=s+i

Debug.Prints;

i=i+1

LoopDebug.PrintsEndSub3.循環(huán)結(jié)構(gòu)程序For循環(huán)如果在上述FOR循環(huán)體內(nèi)部再添加i=i+1,則輸出結(jié)果將如何呢?s=0

Fori=1To100Debug.Printis=s+iDebug.Prints;

NextDebug.Printss=0

Fori=1To100Debug.Printis=s+Ii=i+1Debug.Prints;

NextDebug.Prints結(jié)果為5050結(jié)果為?25003.循環(huán)結(jié)構(gòu)程序For循環(huán)2023/4/21.72

求N!i=1,p=1i<=Np=p*ii=i+1Y結(jié)束輸出pN開始輸入N3.循環(huán)結(jié)構(gòu)程序For循環(huán)

求s=1!+2!+…..N!例6-15:求N!,即求N的階乘。PublicSub求階乘()Dimi,n,pAsIntegerp=1n=Val(InputBox("請輸入n的值:"))

Fori=1TonStep1'Step1可以省略。

p=p*i'循環(huán)不變式,完成累乘。

NextDebug.PrintStr(n)&"的階乘是:"&Str(p)EndSub3.循環(huán)結(jié)構(gòu)程序For循環(huán)3.循環(huán)結(jié)構(gòu)程序WhileWend循環(huán)While<循環(huán)條件> [<語句塊>]Wend例PublicSubWhileWend()DimiAsIntegerDimsAsDoublei=1

Whilei<=100s=s+(-1)^(i+1)/ii=i+1

WendDebug.Print"s=";sEndSubPublicSubs1()DimiAsIntegerDimsAsDoublei=1

s=1Whilei<=99

s=s+(-1)^i*(1/(i+1))i=i+1WendDebug.Print"s=";sEndSub2023/4/21.76作業(yè)1、求1000以內(nèi)既能被5整除又能被7整除的數(shù)之和,并統(tǒng)計(jì)這些數(shù)的個(gè)數(shù)。

2、求

3、求1+(1+2)+(1+2+3)+……+(1+2+3+…10)。

提示:在循環(huán)中每次計(jì)算(1+2+…+n)

4、求

求1000以內(nèi)既能被5整除又能被7整除的數(shù)之和,并統(tǒng)計(jì)這些數(shù)的個(gè)數(shù)。PublicSub統(tǒng)計(jì)57()Dimn,i,sAsDoublei=0s=0Forn=1To1000IfnMod35=0Theni=i+1s=s+nEndIfNextDebug.Printi,s

EndSub.《數(shù)據(jù)庫應(yīng)用》課程組200777PublicSub統(tǒng)計(jì)57()Dimn,i,sAsStringi=0s=0Forn=35To1000Step35

i=i+1s=s+n

NextDebug.Printi,s

EndSub3.循環(huán)結(jié)構(gòu)程序含EXIT循環(huán)結(jié)構(gòu)中的ExitDo命令DoWhile<循環(huán)條件> <循環(huán)體1> If<條件>

ExitDo EndIf <循環(huán)體2>LoopDoUntil<條件表達(dá)式> <循環(huán)體> [ExitDo]Loop3.循環(huán)結(jié)構(gòu)程序含EXIT循環(huán)的嵌套循環(huán)體內(nèi)又嵌套循環(huán)的情況稱為多重循環(huán)或循環(huán)嵌套。處于循環(huán)體內(nèi)的循環(huán)稱為內(nèi)循環(huán),處于外層的循環(huán)稱為外循環(huán)。內(nèi)外循環(huán)的層次必須分明,不允許有交叉現(xiàn)象出現(xiàn)。內(nèi)外循環(huán)的循環(huán)變量不要同名。在嵌套情況下,ExitDo語句使控制跳到下方離其最近的Loop之后。3.循環(huán)結(jié)構(gòu)程序含EXIT求S=1+2+3+…+8+9+100PublicSubexitdo()s=0i=1

DoWhileTrueIfi>100Then

ExitDoEndIfs=s+ii=i+1LoopDebug.Print"s=";sEndSub3.循環(huán)結(jié)構(gòu)程序含EXITPublicSubsum_example()s=0

i=1

DoWhile

i<=100

s=s+i

i=i+1

LoopDebug.PrintsEndSubPublicSub求階乘()Dimi,n,pAsIntegerp=1n=Val(InputBox("請輸入n的值:"))DoWhileTrueIfn<=0ThenExitDo

EndIf

Fori=1Tonp=p*i

NextDebug.PrintStr(n)&"的階乘是:"&Str(p)ExitDoLoopEndSub從鍵盤上輸入一個(gè)數(shù)n,求p=n!3.循環(huán)結(jié)構(gòu)程序含EXITPublicSub求階乘()Dimi,n,pAsIntegerp=1n=Val(InputBox("請輸入n的值:"))

Fori=1TonStep1

p=p*i

Next

Debug.PrintStr(n)&"的階乘是:"&Str(p)EndSub例如:統(tǒng)計(jì)一次捐款活動(dòng)中捐款人數(shù)和捐款總金額OptionCompareDatabaseOptionExplicitPublicSubaa()Dimn,s,xAsIntegern=0s=0DoWhileTruex=Val(InputBox("請輸入數(shù)據(jù)x"))Ifx>0Thens=s+xn=n+1ElseExitDoEndIfLoopDebug.Print"捐款人數(shù)為:",nDebug.Print"捐款金額為:",sEndSub3.循環(huán)結(jié)構(gòu)程序含EXIT求素?cái)?shù)例8-14:輸入一個(gè)大于1的正整數(shù),判斷該數(shù)是否是素?cái)?shù)。分析:所謂素?cái)?shù)又稱為質(zhì)數(shù),是指只能被1和它自身整除的數(shù)。要判斷x是否能夠被3整除使用條件表達(dá)式:x/3=int(x/3)。3.循環(huán)結(jié)構(gòu)程序含EXIT分析對(duì)于輸入的數(shù)據(jù)x,判斷它是否為素?cái)?shù)的過程,就是修改上面條件表達(dá)式的分母,讓分母的數(shù)值從2變到x-1,如果分母從2到x-1都不能整除x,則x是素?cái)?shù)。實(shí)際上程序可以改進(jìn),只需讓分母從2變到int(x/2)。PublicSub求素?cái)?shù)()DimflagAsBooleanDimi,xAsIntegerflag=True'設(shè)置標(biāo)志,假定為素?cái)?shù)

x=Val(InputBox(“請輸入整數(shù)數(shù)據(jù)”))

Fori=2ToInt(x/2)‘通過循環(huán)將x除以2到int(x/2)的數(shù),如果有整除發(fā)生,則x不是素?cái)?shù),退出循環(huán)。Ifx/i=Int(x/i)Then'另一種條件表達(dá)式為xmodi=0flag=False

ExitForEndIfNextIfflagThen'if語句為輸出結(jié)果,'通過判斷標(biāo)志flag來決定x是否為素?cái)?shù)。

Debug.PrintStr(x)+"是素?cái)?shù)。"ElseDebug.PrintStr(x)+"不是素?cái)?shù)。"EndIfEndSub求水仙花數(shù).《數(shù)據(jù)庫應(yīng)用》課程組200787PublicSubt10()Dima,b,c,nAsIntegerForn=100To999a=Int(n/100)b=Int((nMod100)/10)c=nMod10Ifn=a^3+b^3+c^3ThenDebug.PrintnEndIfNextEndSubPublicSubT10水仙花數(shù)()Forx=1To9Fory=0To9Forz=0To9Ifx*100+y*10+z=x^3+y^3+z^3ThenDebug.Printx*100+y*10+zEndIfNextNextNextEndSub2212①2215②2220③2322④2315⑤2318⑥2523⑦以8個(gè)數(shù)為例說明:

1222152023151825[例]輸入10個(gè)數(shù),要求輸出其中最大的一個(gè)數(shù)??偨Y(jié):1、將第一位置上的數(shù)分別與后面的數(shù)進(jìn)行比較;2、第①個(gè)位置上始終放相對(duì)較大數(shù);3、比較一次,向后移一位數(shù);4、重復(fù)執(zhí)行2、3步的操作;5、若有N個(gè)數(shù),共進(jìn)行N-1次比較?!纠枯斎?0個(gè)數(shù),要求輸出其中最大的一個(gè)數(shù)。①②③④⑤⑥⑦⑧⑨⑩……??:這里選擇的是拿第①個(gè)位置上的數(shù)來比較??刹豢梢赃x擇一個(gè)小的數(shù),如:0,來進(jìn)行比較;??:當(dāng)?shù)冖賯€(gè)位置上的數(shù)與第②個(gè)位置上的數(shù)比較時(shí),若第①個(gè)位置上的數(shù)比第②個(gè)位置上的數(shù)小,這時(shí)第①個(gè)位置上的數(shù)與第②個(gè)位置上的數(shù)是交換,還是只用把第②個(gè)位置上的數(shù)賦值給第①個(gè)位置上的數(shù)即可;??:若為交換需要多少個(gè)變量?若為賦值需要多少個(gè)變量?【例】輸入10個(gè)數(shù),要求輸出其中最大的一個(gè)數(shù)。①②③④⑤⑥⑦⑧⑨⑩……BEGIN輸入第一個(gè)數(shù)給MAXENDN=1N<10N=N+1T輸出MAXF輸入下一個(gè)數(shù)給XX>MAXMAX=XTF【例】任意輸入10個(gè)數(shù),找出并顯示其中最大的一個(gè)數(shù)。PublicSubpx()Dimx,y,iAsIntegeri=0x=Val(InputBox("輸入數(shù)據(jù)"))Debug.PrintxDoWhilei<10y=Val(InputBox("輸入數(shù)據(jù)"))Debug.PrintyIfx<yThenx=yEndIfi=i+1LoopDebug.Print"所輸入數(shù)據(jù)最大值為:"&xEndSub作業(yè)1、求2~100之間所有素?cái)?shù)的和。2、求在0~999之間的水仙花數(shù),這些數(shù)的值等于各位數(shù)字的立方和,如153=1^3+5^3+3^33、求s=1+1/2+2/3+3/5+.....前20項(xiàng)之和.《數(shù)據(jù)庫應(yīng)用》課程組200793PublicSubt9()'2-100間的素?cái)?shù)和s為'Dimi,j,sAsIntegerDimflagAsBooleans=0Fori=2To100

flag=True

Forj=2ToInt(i/2)Ifi/j=Int(i/j)Thenflag=FalseExitForEndIf

NextIfflagThenDebug.Printi;s=s+iEndIfNextDebug.PrintDebug.Print"2-100間的素?cái)?shù)和s為";s.《數(shù)據(jù)庫應(yīng)用》課程組200794求s=1+1/2+2/3+3/5+....前20項(xiàng)之和PublicSubt11()Dimm,n,t,i,sAsDoubles=0m=1n=2Fori=1To20s=s+n/mt=nn=n+mm=tNextDebug.PrintsEndSub.《數(shù)據(jù)庫應(yīng)用》課程組200795

如何采用雙重循環(huán)編程打印有規(guī)則的圖形?小專題:3.循環(huán)結(jié)構(gòu)程序(14)例8-13:打印如圖所示對(duì)稱三角圖形,要求第一行的*在第10列。PublicSub三角狀星型輸出()Dimi,jAsIntegerFori=1To4'控制輸出的行數(shù)

Debug.PrintTab(11-i);"*";'確定每行第一個(gè)*所在的列數(shù)

Forj=1To2*i-2'控制每行除第一個(gè)以外的星號(hào)的個(gè)數(shù)

Debug.Print"*";'輸出后繼的*

NextjDebug.Print'輸出另起一行

NextiEndSub

****************.《數(shù)據(jù)庫應(yīng)用》課程組200798PublicSub三角狀星型輸出1()Dimi,jAsIntegerFori=1To4

Debug.PrintTab(11-i);

Forj=1To2*i-2

Debug.Print"*";

NextjDebug.Print

NextiEndSubPublicSub三角狀星型輸出2()Dimi,jAsIntegerFori=1To4Debug.PrintTab(i);"*";Forj=1To2*(4-i)Debug.Print"*";NextjDebug.PrintNextiEndSub

PublicSub三角狀星型輸出3()Dimi,jAsIntegerFori=1To4

Debug.PrintTab(13-2*i);"*";Forj=1To2*i-2Debug.Print"*";NextjDebug.PrintNextiEndSub

PublicSub三角狀星型輸出4()Dimi,jAsIntegerFori=1To4

Debug.PrintTab(11);"*";Forj=1To2*i-2Debug.Print"*";NextjDebug.PrintNextiEndSub

PublicSub三角狀星型輸出5()Dimi,jAsIntegerFori=1To4Debug.PrintTab(11-i);Str(i);Forj=1To2*i-1Debug.PrintStr(i);NextjDebug.PrintNextiEndSub

PublicSub三角狀星型輸出6()Dimi,jAsIntegerFori=1To4Debug.PrintTab(i);Str(5-i);Forj=1To2*(4-i)+1Debug.PrintStr(5-i);NextjDebug.PrintNextiEndSubPublicSub三角狀星型輸出7()Dimi,jAsIntegerFori=1To4Debug.PrintTab(i);Chr(64+i);Forj=1To2*(4-i)Debug.PrintChr(64+i);NextjDebug.PrintNextiEndSubPublicSub三角狀星型輸出8()Dimi,jAsIntegerFori=1To4Debug.PrintTab(13-i);Chr(64+i);Forj=1To2*i-2Debug.PrintChr(64+i);NextjDebug.PrintNextiEndSub8.3數(shù)組的應(yīng)用數(shù)組在使用之前,必須加以定義,然后才能使用該數(shù)組。數(shù)組定義或數(shù)組說明語句格式為:DIMENSION

<數(shù)組名1>(<數(shù)值表達(dá)式1>[,<數(shù)值表達(dá)式2>,...])

[,<數(shù)組名2>(<數(shù)值表達(dá)式1>[,<數(shù)值表達(dá)式2>,...])...]例子dimensionA(N)dimensionB(n,m)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論