計(jì)算機(jī)新課件第5章程序設(shè)計(jì)基礎(chǔ)_第1頁(yè)
計(jì)算機(jī)新課件第5章程序設(shè)計(jì)基礎(chǔ)_第2頁(yè)
計(jì)算機(jī)新課件第5章程序設(shè)計(jì)基礎(chǔ)_第3頁(yè)
計(jì)算機(jī)新課件第5章程序設(shè)計(jì)基礎(chǔ)_第4頁(yè)
計(jì)算機(jī)新課件第5章程序設(shè)計(jì)基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩117頁(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)介

1教學(xué)目的了解程序設(shè)計(jì)的基本概念掌握VisualBasic程序的基本結(jié)構(gòu)掌握變量、數(shù)組和表達(dá)式及運(yùn)算符的基本用法掌握控制語(yǔ)句的用法掌握過(guò)程的用法了解面向?qū)ο蟮母拍顬檫M(jìn)一步理解、實(shí)現(xiàn)算法和基本數(shù)據(jù)結(jié)構(gòu)奠定基礎(chǔ)第5章

計(jì)算機(jī)程序設(shè)計(jì)2VB6.0程序設(shè)計(jì)基礎(chǔ)一、VB程序設(shè)計(jì)概述主要學(xué)習(xí)內(nèi)容和過(guò)程需要首先了解的問(wèn)題VB程序格式中的注意點(diǎn)41.主要學(xué)習(xí)內(nèi)容和過(guò)程數(shù)據(jù)表達(dá)數(shù)值、文字、布爾,類型選擇與轉(zhuǎn)換操作方式運(yùn)算符號(hào)、優(yōu)先級(jí)別,類型相關(guān)結(jié)構(gòu)設(shè)計(jì)分支、循環(huán)、子程序、函數(shù)、類52.學(xué)習(xí)VB需首先了解的問(wèn)題IDE

(IntegratedDevelopingEnvironment)菜單,工程,屬性,工具,控件,窗體幫助系統(tǒng)的使用67二、數(shù)據(jù)類型數(shù)據(jù)類型:信息的類別。主要有:數(shù)值數(shù)據(jù),字符數(shù)據(jù),圖像數(shù)據(jù),聲音數(shù)據(jù)等。不同類型的數(shù)據(jù)所占用的存儲(chǔ)空間大小不同。789101.布爾型Boolean占用

16bit(2Byte)存儲(chǔ)空間,常用來(lái)表示邏輯判斷的結(jié)果;取值只能是

True或是False。使用關(guān)鍵字

True和False,將

Boolean變量賦值為這兩個(gè)狀態(tài)中的一個(gè)。注:在將數(shù)值數(shù)據(jù)類型轉(zhuǎn)換為

Boolean值時(shí),0轉(zhuǎn)換為

False,其他所有值轉(zhuǎn)換為

True。在將

Boolean值轉(zhuǎn)換為數(shù)值類型時(shí),F(xiàn)alse將轉(zhuǎn)換為

0,True將轉(zhuǎn)換為

-1。10112.字符串string指用""括起來(lái)的一串字符。包括所有西文字符和漢字。字符串中包含的字符個(gè)數(shù)稱為字符串的長(zhǎng)度。以無(wú)符號(hào)的16bit數(shù)字形式存儲(chǔ),取值范圍為0到65535。每個(gè)數(shù)字代表一個(gè)按Unicode編碼的字符。11123.日期型Date為8字節(jié)整數(shù);日期表示范圍為:100年1月1日-9999年12月31日,時(shí)間表示范圍為:00:00:00-23:59:59必須用#括起。有嚴(yán)格的格式要求:如:#5/31/1993#,#2009–05-30#,#08:30:00AM#,#09/10/200008:30:00AM#輸出時(shí)自動(dòng)轉(zhuǎn)換成年/月/日的形式。12134.數(shù)值型數(shù)據(jù)整型用于存放占不同存儲(chǔ)空間的整數(shù)。指不帶小數(shù)部分的數(shù)。可以表示正整數(shù)、負(fù)整數(shù)、零。由于占用的字節(jié)數(shù)不同,因此可以表示的數(shù)值范圍也不同。整數(shù)運(yùn)算速度快、精確。但表示數(shù)的范圍小。字節(jié)型Byte:1Byte;整型Integer:2Byte;長(zhǎng)整型Long:4Byte1314實(shí)型(浮點(diǎn)數(shù))用于表示不同范圍的帶有小數(shù)部分的實(shí)數(shù)。表示數(shù)的范圍大,但運(yùn)算速度慢。單精度型Single:4Byte;可以用指數(shù)形式來(lái)表示,例:3.24E+8表示3.24108。雙精度型Double:8Byte;也可以用指數(shù)形式來(lái)表示,例:-5.67E-3表示

-5.6710-3。155.數(shù)據(jù)類型的選擇編程時(shí)根據(jù)實(shí)際需要選擇相應(yīng)的數(shù)據(jù)類型;所有數(shù)值型(整型、實(shí)型)的數(shù)據(jù)都有一個(gè)有效范圍,程序中的數(shù)據(jù)如果超出規(guī)定的范圍,就會(huì)出現(xiàn)“溢出”,并顯示出錯(cuò)誤信息。一般有:整型數(shù)據(jù)多選用Integer;字符型則用String;只有兩種狀態(tài)的布爾值只能選用Boolean。1516三、常量、變量及其聲明VB中的數(shù)據(jù)有兩種基本形式:常量變量16171.常量在程序運(yùn)行過(guò)程中始終保持不變的數(shù)值或字符串。通過(guò)聲明和使用常量的標(biāo)識(shí)符,代替一個(gè)在程序執(zhí)行時(shí)不會(huì)改變的值。在程序中直接用數(shù)字或符號(hào)表示。VB中提供了很多內(nèi)部常量,也允許用戶自己建立常量。常量一旦聲明,只能引用而不能改變,即不能對(duì)符號(hào)常量賦新值。如:整型常量1,3,-3,字符型常量:”A”,”ABC”,實(shí)型常量:0.3141593×10,-7.23E+9,&O12,&H96A,#09/7/2007#,true,false。17182.常量的聲明常量的聲明:Const常量名[As類型]=表達(dá)式例:ConstPI=3.14159ConstPI

AsSingle

=3.14159ConstP

AsInteger=&H14AConstA%=100+5018可選193.變量在程序運(yùn)行過(guò)程中其值可變化的量。變量是一個(gè)有名字的內(nèi)存單元。VB進(jìn)行計(jì)算時(shí),使用變量臨時(shí)存放數(shù)據(jù)。變量的數(shù)據(jù)類型用于表示該變量占用的存儲(chǔ)空間大小。使用前需要先聲明其類型,以便為其分配相應(yīng)的內(nèi)存空間。即:“先說(shuō)明,后使用”。19204.變量的聲明每個(gè)變量都有名字和數(shù)據(jù)類型。通過(guò)名字對(duì)變量進(jìn)行引用,實(shí)際是訪問(wèn)內(nèi)存中的數(shù)據(jù)。變量的聲明格式:Dim變量名As類型Dim變量名,變量名,…As類型例:DimmyNameAsStringDimageAsIntegerDimaasinteger,basstring20一條Dim語(yǔ)句可以同時(shí)聲明多個(gè)不同類型變量21變量的有效范圍變量的有效范圍:從聲明起到包含它的程序塊結(jié)束語(yǔ)句止。例:PrivateSubcommand1_Click DimxAsInteger …..EndSubX的有效范圍請(qǐng)注意變量的命名規(guī)則變量的命名規(guī)則必須以字母或漢字開(kāi)頭,由字母、漢字、數(shù)字或下劃線組成,不能含有小數(shù)點(diǎn)、空格等特殊字符。例如:X$Y,?ab,_a1等。變量名的長(zhǎng)度不能超過(guò)255個(gè)字符。不能使用VB中的關(guān)鍵字(語(yǔ)句名,函數(shù)名等)。例如:CONST,Public,Print。VB中不區(qū)分變量名的大小寫。22235.自定義數(shù)據(jù)類型通過(guò)對(duì)已有數(shù)據(jù)類型的組合來(lái)定義需要的數(shù)據(jù)類型,Point屬于自定義數(shù)據(jù)類型。TypePointDimxAsSingleDimyAsSingleEndtypePoint屬于自定義變量,可用Point型的變量聲明自定義類型變量,可用變量名.元素名來(lái)使用。Dimp1AsPoint

p1.x=23.3

p1.y=44.824四、運(yùn)算符和表達(dá)式VB中的運(yùn)算符主要有:賦值運(yùn)算符算術(shù)運(yùn)算符字符串運(yùn)算符邏輯運(yùn)算符關(guān)系運(yùn)算符使用運(yùn)算符時(shí)的注意點(diǎn):運(yùn)算符表達(dá)的含義和功能;運(yùn)算符與運(yùn)算對(duì)象的關(guān)系;運(yùn)算符的優(yōu)先級(jí);運(yùn)算符的書寫。24251.賦值運(yùn)算符格式:變量名=表達(dá)式功能:將右端表達(dá)式的運(yùn)算結(jié)果賦給左邊的變量作用:通過(guò)將運(yùn)算結(jié)果存入等號(hào)左邊的變量,可改變變量的值。例:x=4+5注:賦值運(yùn)算符的左邊必須是變量262.算術(shù)運(yùn)算符運(yùn)算符含義優(yōu)先級(jí)例子結(jié)果^乘方13^29-負(fù)號(hào)2-3-3*乘33*39/除310/33.33333333333333\整除410\33Mod取模510Mod31+加610+313-減63-10-7整除求余運(yùn)算在一個(gè)表達(dá)式中表述負(fù)號(hào)27算術(shù)運(yùn)算符中的優(yōu)先級(jí)表示優(yōu)先級(jí)別的數(shù)字越小,優(yōu)先級(jí)別越高;圓括號(hào)的優(yōu)先級(jí)別最高;運(yùn)算按優(yōu)先級(jí)順序進(jìn)行,在優(yōu)先級(jí)相同的情況下,計(jì)算順序?yàn)樽宰笾劣?。例:表達(dá)式-6+15/5Mod16\4*2+3^2的結(jié)果是多少?2728例:用VB程序計(jì)算以下表達(dá)式:程序語(yǔ)句如下:Dimx1AsSingle:x1=1.5Dimx2AsSingle:x2=2.1Dimy1AsSingle:y1=2.9Dimy2AsSingle:y2=4.7DimLAsSingleL=((x1-x2)^2+(y1-y2)^2)^(1/2)28293.字符串運(yùn)算格式:“字符串1”&“字符串2”“字符串1”+“字符串2”功能:將兩個(gè)字符串拼接起來(lái),形成一個(gè)新的字符串30連接符“&”與“+”“+”:連接符前后的表達(dá)式應(yīng)均為字符串,若均為數(shù)值則進(jìn)行加法運(yùn)算。若一個(gè)為字符串,另一個(gè)為數(shù)值則出錯(cuò)。若一個(gè)為數(shù)值字符串、另一個(gè)為數(shù)值型數(shù)據(jù)則將前者轉(zhuǎn)換為數(shù)值進(jìn)行加法運(yùn)算。“&”:連接符前后的表達(dá)式不管是字符串還是數(shù)值,進(jìn)行連接操作前,系統(tǒng)先將操作數(shù)轉(zhuǎn)換成字符串,然后再連接。3031字符串運(yùn)算符例“高級(jí)”+“編程”“高級(jí)編程”“Thisisa“&“VB.NET““ThisisaVB.NET““aabbcc”出錯(cuò)“aabbcc”&123456“aabbcc123456”31練習(xí):寫出下列表達(dá)式的結(jié)果。32“1000”“1000”+”2000”“Today”+20“Today”+”20”“1000”&”2000”1000&20001000+”200”&20001000&”200”334.關(guān)系運(yùn)算符33運(yùn)算符含義例結(jié)果=等于“ABCDEF”=“ABS”False>

大于“ABCDEF”>”ABS”False>=大于等于“bc”>=”abcdef”True<

小于23<3False<=小于等于23<=3False<>

不等于77<>99TrueLike字符串匹配“ABCDEFG”Like“*DE*”true34關(guān)系運(yùn)算符的規(guī)則如果兩個(gè)表達(dá)式是數(shù)值,則按其大小比較。如果兩個(gè)表達(dá)式是字符或字符串,則按字符的ASCII碼值從左到右一一比較,即首先比較兩個(gè)字符串的第1個(gè)字符,其ASCII碼值大的字符串大,如果第1個(gè)字符相同,則比較第2個(gè)字符,以此類推,直到出現(xiàn)不同的字符為止。關(guān)系運(yùn)算符的優(yōu)先級(jí)相同。355.邏輯運(yùn)算符用于布爾運(yùn)算,結(jié)果僅為兩種:True或False353636運(yùn)算符說(shuō)明優(yōu)先級(jí)說(shuō)明例子結(jié)果Not取反1當(dāng)表達(dá)式為False時(shí),結(jié)果為TrueNotFTrueAnd與2兩個(gè)表達(dá)式均為True時(shí),結(jié)果才為TrueTAndFTAndTFalseTrueOr或3兩個(gè)表達(dá)式中有一個(gè)為True時(shí),結(jié)果為TrueTOrFFOrFTrueFalse例:當(dāng)A=1,B=2,C=3,DS=“A”,CS=“a”時(shí),下列語(yǔ)句的值為什么?A+B<=COrDS<=CSAndDS+CS<“AA”37邏輯運(yùn)算例例:變量Y表示年代,為整數(shù)。判斷Y是否是閏年。如是,表達(dá)式為True,否則為False。程序語(yǔ)句:DimYAsInteger:y=2011DimleapYearAsBooleanleapYear=((YMod4=0)And(YMod100<>0))Or(YMod400=0)37386.表達(dá)式用運(yùn)算符將運(yùn)算對(duì)象連接起來(lái)的、具有合法語(yǔ)義的式子。由常數(shù)、變量、運(yùn)算符和圓括號(hào)按一定規(guī)則組成。表達(dá)式通過(guò)運(yùn)算后有一個(gè)結(jié)果,運(yùn)算結(jié)果的類型由數(shù)據(jù)和運(yùn)算符共同決定。乘號(hào)用“*”表示,并且不能省略。例如a乘以b應(yīng)寫成:a*b。括號(hào)必須成對(duì)出現(xiàn),均使用圓括號(hào)。表達(dá)式從左到右在同一基準(zhǔn)上書寫,無(wú)高低、大小之分。39表達(dá)式中運(yùn)算符的優(yōu)先級(jí)若一個(gè)表達(dá)式中有不同類型運(yùn)算符,其優(yōu)先級(jí)順序?yàn)椋豪ㄌ?hào)>算術(shù)運(yùn)算符>字符連接運(yùn)算符>關(guān)系運(yùn)算符>邏輯運(yùn)算符如果表達(dá)式具有不同的數(shù)據(jù)精度,數(shù)據(jù)類型采用精度高的。按照:Integer<Long<Single<Double例:當(dāng)a=2,b=3,c=4,d=5時(shí),下列表達(dá)式的值為多少?Nota<=COr4*c=b^2Andb<>a+c40表達(dá)式的寫法例1:求一元二次方程2x2-x-1=0的根。分析:一元二次方程ax2+bx+c=0的根為-b±(b2-4ac)1/2/2a求一個(gè)根的表達(dá)式為:Dimx,yAsDoublex=(1.0+(1^2+4*2*1)^(1/2))/(2*2)

Y=(1.0-1^2+4*2*1)^(1/2))/(2*2)例2:輸入半徑R,求球體的體積。分析:球體的體積V=4πR3/3求球體體積的表達(dá)式為:DimVAsDoubleDimRAsDoubleV=4*3.14159*R^3/341程序控制語(yǔ)句42VB程序結(jié)構(gòu)順序結(jié)構(gòu)按書寫順序執(zhí)行的程序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)4344一、條件分支語(yǔ)句當(dāng)滿足一定條件時(shí)程序才能執(zhí)行。包括:?jiǎn)畏种ЫY(jié)構(gòu)兩分支結(jié)構(gòu)多分支結(jié)構(gòu)44451.單分支結(jié)構(gòu)格式:If<條件表達(dá)式>Then

語(yǔ)句塊EndIf式中:條件表達(dá)式的值為Boolean型,不可缺;語(yǔ)句塊可以是一條或多條語(yǔ)句,當(dāng)條件表達(dá)式的值為True時(shí),該語(yǔ)句塊被執(zhí)行。46例:當(dāng)整數(shù)A大于0時(shí),將A的值存入B中。DimAAsIntegerA=-45DimBAsIntegerB=0IfA>0Then B=AEndIfPrintB472.兩分支結(jié)構(gòu)格式:If<條件表達(dá)式>Then<語(yǔ)句塊1>Else<語(yǔ)句塊2>EndIf功能:若表達(dá)式的值=True,執(zhí)行語(yǔ)句塊1;若表達(dá)式的值=False,執(zhí)行語(yǔ)句塊2。48例:設(shè)A和B均為整數(shù)。找出A和B中較大的一個(gè)數(shù)并存入到C中。DimAAsIntegerA=val(text1.text)DimBAsIntegerB=33DimCAsIntegerIfA>BThenC=AElseC=BEndIfPrintc例:輸出兩數(shù)中的大數(shù)。DimaAsIntegerDimbAsIntegera=val(inputbox(“請(qǐng)輸入a:”))b=val(inputbox(“請(qǐng)輸入b:”))

Ifa>bThenprinta

Elseprintb

EndIfInputbox函數(shù)運(yùn)行時(shí)可以產(chǎn)生一個(gè)對(duì)話框,等待用戶向文本框中輸入數(shù)據(jù),當(dāng)用戶單擊確定按鈕時(shí),將輸入的內(nèi)容作為函數(shù)的返回值。49直接從鍵盤輸入兩個(gè)數(shù)進(jìn)行比較503.多分支結(jié)構(gòu)格式:If<條件表達(dá)式1>Then<語(yǔ)句塊1>ElseIf<條件表達(dá)式2>Then<語(yǔ)句塊2>……Else<語(yǔ)句塊n+1>EndIf功能:若條件表達(dá)式1的值=True,執(zhí)行語(yǔ)句塊1;若條件表達(dá)式2的值=True,執(zhí)行語(yǔ)句塊2;….順序?yàn)闂l件表達(dá)式1,條件表達(dá)式2,…….條件表達(dá)式n例:將百分制轉(zhuǎn)換為等級(jí)評(píng)分制。Ifscore>=90thenlevel=“優(yōu)”Elseifscore>80thenlevel=“良”….….Elselevel=“不及格”EndifPrintlevel例:找出三個(gè)數(shù)中的最大數(shù)。(選擇結(jié)構(gòu)的嵌套)52DimA,B,C,maxAsIntegerA=12:B=33:C=8IfA>BThen

IfA>CThenmax=A

Elsemax=C

EndIfElse

IfB>CThenmax=B

Elsemax=C

EndIfEndIfPrint“最大數(shù)是:”,maxSelectCase語(yǔ)句也稱為情況語(yǔ)句。實(shí)現(xiàn)多分支選擇結(jié)構(gòu)的另一種語(yǔ)句。先計(jì)算表達(dá)式的值,將該值依次與Case子句中表達(dá)式列表的值相比較。相匹配則執(zhí)行相應(yīng)語(yǔ)句塊,然后再執(zhí)行Endselect后的語(yǔ)句。格式:Selectcase變量名或表達(dá)式case表達(dá)式列表1語(yǔ)句塊1[case表達(dá)式列表2]語(yǔ)句塊2┇

[caseelse]語(yǔ)句塊nEndselect5354例:根據(jù)百分制成績(jī)轉(zhuǎn)換對(duì)應(yīng)的等級(jí)。SelectCasescore

Case90To100 Level="優(yōu)"

CaseIs>=80 Level="良"

CaseIs>=70 Level="中"

CaseIs>=60‘關(guān)系運(yùn)算符表達(dá)式 Level="及格"

CaseElse Level="不及格"EndSelect55二、循環(huán)語(yǔ)句用于某些需要重復(fù)執(zhí)行的語(yǔ)句。主要有三種循環(huán)控制方式:For…NextWhile…WendDo…Loop循環(huán)語(yǔ)句561.For循環(huán)語(yǔ)句格式:For循環(huán)變量=初值To終值[Step步長(zhǎng)][循環(huán)體][ExitFor][語(yǔ)句塊]Next[循環(huán)變量]執(zhí)行過(guò)程:將初值賦給循環(huán)變量判斷循環(huán)變量值是否超過(guò)終值,若是,退出循環(huán);若否,執(zhí)行循環(huán)體。遇到Next,修改循環(huán)變量值。再去判斷循環(huán)條件是否滿足,繼續(xù)執(zhí)行。類型一般為Integer循環(huán)變量的增量,默認(rèn)值為1說(shuō)明:循環(huán)變量必須為數(shù)值型,用于控制循環(huán)次數(shù)。步長(zhǎng)是循環(huán)變量的增量,步長(zhǎng)可以為正或負(fù),步長(zhǎng)為1時(shí)可省略。步長(zhǎng)為0時(shí),必須在循環(huán)體中有正常退出循環(huán)的出口,可以使用Exitfor。NEXT后的循環(huán)變量用于結(jié)束一次For循環(huán),根據(jù)終值和當(dāng)前循環(huán)變量的值大小關(guān)系決定是否決定執(zhí)行下一次循環(huán)。57例:計(jì)算1+1/2+1/3+…+1/n的值,當(dāng)1/n小于1e-6時(shí)結(jié)束計(jì)算。

DimsumAsSingle:sum=0Dimi%Fori=1To1000000sum=sum+1/i‘If1/i<0.00001ThenExitForNext5859例:計(jì)算1+2+…+100,并將結(jié)果存入變量

sum中。DimI,sumAsIntegersum=0Fori=1To100sum=sum+iIfi=50thenExitforendifNextIPrintsum602.While格式:While<條件表達(dá)式>[語(yǔ)句塊]Wend功能:用于對(duì)條件表達(dá)式進(jìn)行計(jì)算。若表達(dá)式計(jì)算值為True,則執(zhí)行循環(huán)體;若為False,則執(zhí)行wend后的語(yǔ)句。While的循環(huán)次數(shù)取決于條件表達(dá)式的值。為防止出現(xiàn)死循環(huán),應(yīng)確保適當(dāng)時(shí)候使表達(dá)式的值False。條件表達(dá)式的值必須為True或False。61例:計(jì)算1+1/2+1/3+…+1/n的值,當(dāng)1/n小于1e-6時(shí)結(jié)束計(jì)算。DimsumAsSingleDimnAsIntegern=1While1/n>0.000001sum=sum+1/nn=n+1Wend思考:1、如何用while…Wend實(shí)現(xiàn)計(jì)算1+2+…+100。2、判斷一個(gè)數(shù)是不是素?cái)?shù)。62Dimi%,m%,TagAsBooleanm=Val(Text1.Text)Tag=True'假定是素?cái)?shù)

Fori=2Tom-1If(mModi)=0ThenTag=False:exitforNextiIfTagThenPrintm&"是素?cái)?shù)"ElsePrintm&"不是素?cái)?shù)"EndIf6364Do…Loop循環(huán)結(jié)構(gòu)

本章目錄Dimi%,sum%i=11Dowhilei<=10Sum=sum+ii=i+1LoopPrinti,sum65Dimi%,sum%i=11Dosum=sum+ii=i+1LoopWhilei<=10Printi,sum思考:兩段程序的執(zhí)行結(jié)果一樣嗎?66例:求兩數(shù)的最大公約數(shù)Ifm<nThent=m:m=n:n=tr=mmodnDoWhile(r<>0)m=nn=rr=mmodnLoopMsgBox“最大公約數(shù)=”&n67補(bǔ)充實(shí)驗(yàn)題6.2編寫在10個(gè)數(shù)中選出最大數(shù)和最小數(shù)并輸出的程序.68補(bǔ)充實(shí)驗(yàn)題6.3

編寫程序1-1/2+1/3-1/4+…-1/100之和.69補(bǔ)充實(shí)驗(yàn)題6.4百錢買百雞問(wèn)題。(循環(huán)的嵌套)數(shù)組71一、數(shù)組的概念和分類數(shù)組:用一個(gè)變量表示一組相同性質(zhì)的數(shù)據(jù)。每個(gè)數(shù)據(jù)稱為數(shù)組元素,各元素通過(guò)下標(biāo)區(qū)分。例如:求一個(gè)班50名學(xué)生的平均分和該班高于平均分的同學(xué)的成績(jī)。用一個(gè)變量無(wú)法統(tǒng)計(jì),成績(jī)類型相同,人數(shù)確定可用數(shù)組。分類:靜態(tài)數(shù)組動(dòng)態(tài)數(shù)組一維數(shù)組多維數(shù)組72靜態(tài)數(shù)組在聲明數(shù)組時(shí)就確定數(shù)組的維數(shù)及下標(biāo)界限,即數(shù)組的大小,例a(3)。靜態(tài)數(shù)組聲明后,將有確定的內(nèi)存空間。例:Dimt(4)AsInteger動(dòng)態(tài)數(shù)組在利用數(shù)組進(jìn)行程序設(shè)計(jì)時(shí),會(huì)出現(xiàn)數(shù)組長(zhǎng)度在程序中發(fā)生變化的情況。在聲明時(shí),僅指定數(shù)組名及類型。例:Dims()AsInteger一維數(shù)組:數(shù)組中的每個(gè)元素只有一個(gè)下標(biāo)。例如a(1)。多維數(shù)組:當(dāng)數(shù)組的下標(biāo)超過(guò)一個(gè)時(shí),稱為多維數(shù)組。例如:a(1,1),a(1,2)。Dima(1,1)asinteger共包含4個(gè)元素。分別是a(0,0),a(0,1),a(1,0),a(1,1).7374一維靜態(tài)數(shù)組的定義一維數(shù)組格式:Dim數(shù)組名(最大下標(biāo))As類型名說(shuō)明:默認(rèn)最小下標(biāo)為0,若希望下標(biāo)從1開(kāi)始,可在代碼通用部分使用optionbase1語(yǔ)句將下標(biāo)設(shè)為從1開(kāi)始;“類型名”用于指定數(shù)組中每個(gè)元素的數(shù)據(jù)類型;數(shù)組名與簡(jiǎn)單變量的起名方法相同;數(shù)組中元素的數(shù)據(jù)類型可以是任意基本類型;數(shù)組的元素個(gè)數(shù)等于:上界-下界+1;若數(shù)組中的元素為數(shù)值類,則初值為0;若為字符或字符串,則初值為Nothing。75動(dòng)態(tài)數(shù)組動(dòng)態(tài)數(shù)組:在聲明數(shù)組時(shí)不指定數(shù)組的維數(shù)及下標(biāo)界限,在使用時(shí)才通過(guò)ReDim語(yǔ)句數(shù)組的下標(biāo)界限。在程序運(yùn)行時(shí)才為數(shù)組分配內(nèi)存空間。聲明格式:Dim數(shù)組名()As類型名使用方式:ReDim數(shù)組名(下標(biāo)最大變量)76動(dòng)態(tài)數(shù)組聲明定義一個(gè)含100個(gè)元素的動(dòng)態(tài)數(shù)組:DimA()AsIntegerReDimA(99)通過(guò)修改變量的值來(lái)調(diào)整動(dòng)態(tài)數(shù)組的大?。篋imintA()AsIntegerDimintNAsIntegerintN=inputbox(“請(qǐng)輸入intN的值”)ReDimintA(intN)動(dòng)態(tài)數(shù)組補(bǔ)充說(shuō)明可多次使用ReDim語(yǔ)句定義同一個(gè)動(dòng)態(tài)數(shù)組每次使用ReDim語(yǔ)句后會(huì)使原來(lái)數(shù)組中元素的值丟失。若要使數(shù)組中原來(lái)各元素的值不丟失,可用以下語(yǔ)句:Redimpreserve數(shù)組名()77練習(xí):Dima()asintegerreDima(1to2)a(1)=5a(2)=6Printa(1),a(2)Redima(1to3)Printa(1),a(2),a(3)思考:如果把第6句改為:redimpreservea(1to3),那么第7句的執(zhí)行結(jié)果是什么?7879數(shù)組的初始化用法一:利用Array()函數(shù)給動(dòng)態(tài)數(shù)組賦初值,數(shù)組大小由賦值的個(gè)數(shù)決定;Dims()s=Array(98,67,78,99,87,82)用法二:可通過(guò)賦值語(yǔ)句和循環(huán)結(jié)構(gòu)給各元素賦值。Dimscore(1to50)asintegerfori=1to50score(i)=inputbox(“輸入第”&i&”名同學(xué)的成績(jī)”)Nexti80例:設(shè)某數(shù)組中存有6名學(xué)生的考試成績(jī),要求對(duì)數(shù)進(jìn)行如下操作:

每個(gè)分?jǐn)?shù)*0.8+20,再重新存入到數(shù)組中。程序如下:Dims()s=Array(98,67,78,99,87,82)Fori=0To5Prints(i)s(i)=s(i)*0.8+20Prints(i)Next也可用循環(huán)及inputbox語(yǔ)句給數(shù)組賦值。Dims(5)AsIntegerFori=0To5s(i)=InputBox("請(qǐng)輸入分?jǐn)?shù):")NextFori=0To5s(i)=s(i)*0.8+20Prints(i);NextI8182

例:跳水比賽采用7名裁判評(píng)分,分?jǐn)?shù)在0到10之間。最后總分的評(píng)分標(biāo)準(zhǔn)為:

去掉一個(gè)最高分和一個(gè)最低分;

剩下的分?jǐn)?shù)相加后乘以3再除5

然后乘上難度系數(shù)。

編寫程序,輸入以上數(shù)據(jù)并計(jì)算運(yùn)動(dòng)員得分。題目分析:找出最高和最低分的方法:逐個(gè)比較法先排好序再找最大和最小值將第1個(gè)數(shù)既假設(shè)為最大值,同時(shí)也假設(shè)為最小值,再逐個(gè)進(jìn)行比較設(shè)計(jì)思想描述:定義含7個(gè)打分值的數(shù)組及難度系數(shù)將數(shù)組中的第1個(gè)分值作為最大值MAX和最小值MIN,同時(shí)也作為初始總分值SUM取下一個(gè)打分值:若該分值>MAX,則兩數(shù)交換;若該分值<MIN,則兩數(shù)交換;SUM=SUM+該分值判斷所有分值比較完否?若沒(méi)有則轉(zhuǎn)向執(zhí)行③;若比較結(jié)束則繼續(xù)執(zhí)行⑤;最后得分SUM=(SUM-MAX-MIN)*3/5*難度系數(shù)輸出最后得分8384PrivateSubForm_Click()DimdifficultAsSingledifficult=3.1DimScore()Score=Array(8,8.5,8,8.5,9,9.5,8)Dimmax,min,sumAsSinglemax=Score(0)min=Score(0)sum=Score(0)Fori=0To6IfScore(i)>maxThenmax=Score(i)

'找出得分的最大值

EndIfIfScore(i)<minThenmin=Score(i)

‘找最小值

EndIfsum=sum+Score(i)Nextsum=(sum-max-min)*3/5*difficultPrint("運(yùn)動(dòng)員的得分為"),sum

EndSub85冒泡排序(升序排列)算法描述:將待排序的數(shù)存于數(shù)組R中(R的下標(biāo)范圍為0到n)。第1趟掃描:從R的起始處開(kāi)始,依次比較相鄰的兩個(gè)數(shù)值的大小,若發(fā)現(xiàn)小者在下、大者在上,則交換二者的位置。即若R[j]>R[j+1],則交換R[j+1]和R[j]的內(nèi)容。當(dāng)?shù)谝惶藪呙柰戤厱r(shí),最大的數(shù)組元素被放在位置R[n]上。第二趟:按上述方法掃描R[0]到R[n-1],掃描的結(jié)果將使次大的數(shù)存放于R[n-1]中。最后,經(jīng)過(guò)n趟掃描,可以得到排序后的數(shù)組R。OptionBase1'設(shè)數(shù)組下標(biāo)從1開(kāi)始PrivateSubCommand1_Click()Dimi,n,m,kAsIntegerDimsun(),tempAsSingle'數(shù)組,變量定義n=10ReDimsun(n)'重新定義數(shù)組Print"排序前"sun=Array(12.5,34,45,21,67,4,12,45,47,56)'輸入的數(shù)據(jù)Fori=1Ton‘sun(i)=Val(InputBox("隨機(jī)輸入10個(gè)數(shù),準(zhǔn)備排序:第"+Str(i)+"個(gè)","輸入10個(gè)數(shù)"))Printsun(i);'打印輸入的10個(gè)數(shù)Nexti'下面為排序代碼,n個(gè)數(shù)需要n-1次比較Form=1To9'因?yàn)橹恍枰容^n-1次,所以1到9即可Fork=1To10-m‘每趟比較大的數(shù)都沉底,下次只需要比較余下的數(shù)大小If(sun(k)>sun(k+1))Thentemp=sun(k)sun(k)=sun(k+1)sun(k+1)=tempEndIfNextkNextmPrint'輸出空行,與前面輸出分開(kāi)Print"排序后"Fori=1To10Printsun(i);NextiEndSubPrivateSubCommand2_Click()EndEndSub88例6.5

用選擇排序法將N(N=8)個(gè)無(wú)序數(shù)據(jù)(4938659776132750)按升序排列。89例6.6編寫一個(gè)程序,在給定的10個(gè)數(shù){8152134485677818799}的列表中查找數(shù)77。過(guò)程在設(shè)計(jì)規(guī)模較大、功能較復(fù)雜的程序時(shí),VB通過(guò)工程來(lái)管理組成應(yīng)用程序的所有不同模塊文件。模塊文件由若干過(guò)程組成,過(guò)程可以是事件過(guò)程,也可以是用戶自定義的子程序或函數(shù),統(tǒng)稱為通用過(guò)程。引入目的:使同類的操作不重復(fù)(操作方法相同、參數(shù)不同)過(guò)程:完成一定任務(wù)的一個(gè)VisualBasic語(yǔ)句塊,可供其他過(guò)程調(diào)用。1.過(guò)程的優(yōu)點(diǎn)過(guò)程允許將程序分為不連續(xù)的邏輯單元,獨(dú)立單元模塊比整個(gè)程序容易調(diào)試可以代碼共享,被其他程序多次調(diào)用,避免代碼重復(fù)問(wèn)題2.過(guò)程的調(diào)用

從代碼中的其他某處調(diào)用過(guò)程,稱為過(guò)程調(diào)用

3.參數(shù)調(diào)用過(guò)程時(shí),過(guò)程需要處理不同的數(shù)據(jù)(這些數(shù)據(jù)需要傳遞給過(guò)程,這些數(shù)據(jù)就稱之為參數(shù))。過(guò)程可以定義零個(gè)或多個(gè)參數(shù),而每個(gè)參數(shù)都代表過(guò)程希望傳遞給它的一個(gè)值。93過(guò)程的定義一段具有獨(dú)立功能的、在程序中可以被反復(fù)調(diào)用的程序段。被調(diào)用才可以執(zhí)行。根據(jù)是否有返回值,VB中的過(guò)程可分為:子程序過(guò)程(Sub過(guò)程)函數(shù)過(guò)程(Function過(guò)程)94Sub過(guò)程格式:Sub過(guò)程名([參數(shù)表])

語(yǔ)句序列exitsub

語(yǔ)句序列EndSub完成某個(gè)具體功能的過(guò)程體不能與關(guān)鍵字重名形式參數(shù)95過(guò)程添加:①代碼窗口直接定義過(guò)程②”工具”/”添加過(guò)程”實(shí)現(xiàn)添加過(guò)程PublicSubSort()

……EndSub在這些情況下就需要使用Sub過(guò)程在實(shí)際應(yīng)用中,可能希望過(guò)程不返回值,例如,使用過(guò)程打印一個(gè)圖形有時(shí)需要過(guò)程執(zhí)行一系列操作,例如,利用過(guò)程對(duì)一批數(shù)據(jù)進(jìn)行排序Sub過(guò)程例:PublicSubmax(ByValxAsInteger,ByValyAsInteger)DimcAsIntegerIfx>yThenc=xElsec=yEndIfPrintcEndSubPrivateSubForm_Click()Dima,bAsIntegera=InputBox("inputa")b=InputBox("inputb")CallMax(a,b)EndSubPublic和Private表明Sub過(guò)程的有效范圍,Public的有效范圍為整個(gè)工程,Private的有效范圍為當(dāng)前模塊,默認(rèn)為Public。過(guò)程名必須符合變量的命名規(guī)則。過(guò)程必須以EndSub結(jié)束。根據(jù)實(shí)際情況選擇形式參數(shù)的類型和個(gè)數(shù),過(guò)程無(wú)形式參數(shù)時(shí),括號(hào)不能省略。使用ExitSub語(yǔ)句可以強(qiáng)制退出過(guò)程。在VisualBasic中所有的過(guò)程都是并列關(guān)系,不允許在一個(gè)子過(guò)程內(nèi)部再定義一個(gè)子過(guò)程。說(shuō)明過(guò)程的調(diào)用兩種等價(jià)的調(diào)用方式Call過(guò)程名([實(shí)際參數(shù)列表])過(guò)程名實(shí)際參數(shù)列表例如:PrivateSubForm_Click()DimaAsSinglea=InputBox("輸入一個(gè)半徑")

CallArea(a)‘或Areaa

EndSubSubArea(rAsSingle)DimsAsSingles=3.14*r*rMsgBox"area="&sEndSubMsgbox可實(shí)現(xiàn)簡(jiǎn)單信息輸出,格式為:Msgbox提示,按鈕,標(biāo)題。按鈕項(xiàng)缺省為【確定】。說(shuō)明在調(diào)用過(guò)程時(shí),實(shí)際參數(shù)一定要和形式參數(shù)在類型和個(gè)數(shù)上匹配。在使用Call調(diào)用過(guò)程時(shí),一定要用括號(hào)將實(shí)參括起來(lái),除非沒(méi)有參數(shù),Call過(guò)程名(實(shí)參1,實(shí)參2,…)。通過(guò)過(guò)程名直接調(diào)用過(guò)程時(shí),一定要去掉參數(shù)兩邊的括號(hào),通過(guò)空格字符將過(guò)程名與參數(shù)分隔開(kāi)。實(shí)際參數(shù)可以是變量、常量、表達(dá)式或數(shù)組。在調(diào)用過(guò)程時(shí),一定要注意不要形成循環(huán)調(diào)用,即避免定義A過(guò)程時(shí),調(diào)用了B過(guò)程,而定義B過(guò)程時(shí),又調(diào)用了A過(guò)程。101說(shuō)明過(guò)程調(diào)用:在過(guò)程調(diào)用時(shí),實(shí)參將數(shù)據(jù)傳遞給形參,完成形參與實(shí)參的結(jié)合。例如,定義一個(gè)過(guò)程:Subsum(xasinteger,yasinteger)…EndsubPrivateSubForm_Click()…Callsum(a,b)…Endsub102Sub過(guò)程例過(guò)程定義:SubArea(ByRefAAsInteger,ByRefBAsInteger)DimSAsIntegerS=A*BPrint"Theareais:",SEndSub調(diào)用PrivateSubForm_Click()DimxAsInteger:x=5DimyAsInteger:y=7CallArea(x,y)EndSub后面不帶一對(duì)括號(hào)及參數(shù)定義格式如下:[Public|Private]Function過(guò)程名([形式參數(shù)])As<類型><語(yǔ)句塊>ExitFunction<語(yǔ)句塊>

函數(shù)名=返回值<語(yǔ)句塊>EndFunctionFunction過(guò)程定義例如:PublicFunctionmax(ByValxAsInteger,ByValyAsInteger)AsIntegerDimzAsIntegerIfx>yThenz=xElsez=yEndIf

max=z'將最大值返回EndFunctionPrivateSubForm_Click()Dima,bAsIntegera=InputBox("a=")b=InputBox("b=")Print"max=",max(a,b)EndSubFunction過(guò)程有一個(gè)返回值,以表達(dá)式形式調(diào)用。Function過(guò)程可以像其它函數(shù)一樣來(lái)調(diào)用。調(diào)用格式:過(guò)程名([參數(shù)表])Function過(guò)程以Function開(kāi)始,以EndFunction結(jié)束。過(guò)程名必須符合變量的命名規(guī)則,同時(shí)不能與系統(tǒng)函數(shù)或其他過(guò)程同名。105說(shuō)明:說(shuō)明可以通過(guò)ExitFunction強(qiáng)制退出Function過(guò)程。函數(shù)過(guò)程通過(guò)函數(shù)名將返回值返回。因此,函數(shù)過(guò)程名要有數(shù)據(jù)類型,用As(數(shù)據(jù)類型)定義。例如:Publicfunctionfact1(byvalaasinteger)asintegerFunction過(guò)程的實(shí)際返回值的類型應(yīng)該與定義的返回值類型一致。例:調(diào)用計(jì)算階乘的Function過(guò)程Facts:PrivateSubForm_Click()DimmAsInteger:m=12DimyAsLongy=facts(m)PrintyEndSub107108Functionfacts(ByValnAsInteger)AsLongDimiAsIntegerDimresultAsLongresult=1Fori=1Tonresult=result*iNextfacts=resultEndFunction109三、參數(shù)傳遞在過(guò)程調(diào)用中,用實(shí)際參數(shù)代替形式參數(shù)。參數(shù)傳遞的方式:傳值在形式參數(shù)前加:ByVal傳址在形式參數(shù)前加:ByRef參數(shù)項(xiàng)格式:ByVal|ByRef

參數(shù)名[()][As類型名]110按值傳遞按地址傳遞1.傳值方式將實(shí)際參數(shù)的值傳遞給形式參數(shù)傳值方式中,VB給形參分配一個(gè)臨時(shí)的內(nèi)存單元,將實(shí)參的值傳遞到這個(gè)臨時(shí)單元中去,實(shí)參向形參傳遞是單向的,如果在被調(diào)用的過(guò)程中改變了形參的值,則只是臨時(shí)單元的值變動(dòng),不會(huì)修改實(shí)際參數(shù)的值。當(dāng)被調(diào)用過(guò)程結(jié)束返回調(diào)用過(guò)程時(shí),VB將釋放給形分配的臨時(shí)內(nèi)存單元,實(shí)參的值保持不變。111實(shí)際參數(shù)臨時(shí)地址過(guò)程形式參數(shù)傳值方式例定義一個(gè)完成兩個(gè)數(shù)交換的過(guò)程exch:Subexch(ByvalxAsInteger,ByvalyAsInteger)DimtempAsIntegerprint"交換前x和y的值:",x,ytemp=xx=yy=tempprint"交換后x和y的值:",x,yEndSub112PrivateSubForm_Click()DimmAsIntegerDimnAsIntegerm=10:n=20print“調(diào)用exch前:",m,ncallexch(m,n)print"調(diào)用exch后:",m,nEndSub2.傳址(引用)方式將實(shí)際參數(shù)的引用(地址)傳遞給形式參數(shù)傳址方式是指實(shí)參的內(nèi)

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論