VB第3章語言基礎_第1頁
VB第3章語言基礎_第2頁
VB第3章語言基礎_第3頁
VB第3章語言基礎_第4頁
VB第3章語言基礎_第5頁
已閱讀5頁,還剩152頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第3章VisualBasic.NET語言基礎

3.1基本數據類型3.2數據的運算3.3VB.NET語句的結構3.4函數及其應用3.5數組3.6面向過程VisualBasic.NET程序3.7應用舉例——數制轉換器3.1基本數據類型表3.1列出了所有的基本數據類型。3.1.1數值數據類型1.字節型(Byte)字節型是無符號整型數據類型,用1字節(8位)來存儲數值,可存儲0~255(=28-1)范圍內的整數。例如,下面的語句將128賦值給bytMyByte變量:DimbytMyByteAsBytebytMyByte=1282.短整型(Short)短整型是整型數據類型,用2字節(16位)來存儲帶符號整數,其可表示的整數范圍是-32768~+32767,即-215~+215-1。例如,下面的語句將-20128賦值給shoMyShort變量:DimshoMyShortAsShortshoMyShort=-201283.1.1數值數據類型3.整型(Integer)整型也用于存儲帶符號整數,它用4字節(32位)來存儲數值,其可表示的整數范圍是-2147483648~+2147483647,即-231~+231-1。例如,下面的語句將200012賦值給intMyInteger變量:DimintMyIntegerAsIntegerintMyInteger=2000124.長整型(Long)長整型以8字節(64位)來存儲帶符號整數,其可表示的整數范圍是-9223372036854775808~+9223372036854775807,即-263~+263-1。例如,下面的語句將200012012812賦值給lngMyLong變量:DimlngMyLongAsLonglngMyLong=2000120128123.1.1數值數據類型5.小數型(Decimal)小數型是非整型數據類型,用來存儲小數,它以16字節來存儲數值。當小數位為0時,最大可能值為+/-79228162514264337593543950335。對于28位小數,最大支持數非常小,為+/-7.9228162514264337593543950335,而最小的非0值為+/-0.0000000000000000000000000001(28位小數)。例如,下面的語句將0.00012賦值給decMyDecimal變量:DimdecMyDecimalAsDecimaldecMyDecimal=0.00012

3.1.1數值數據類型6.單精度浮點型(Single)單精度浮點型用來存儲單精度浮點數,它用以4字節來存儲數值,其中符號占1位,指數占8位,其余23位表示尾數。單精度浮點型比小數型支持的有效位少,且可能導致四舍五入的誤差,但它可以表示的數的范圍比小數型要大。單精度浮點數可以精確到7位十進制數,其負數的取值范圍為-3.402823E+38~-1.401298E-45,正數的取值范圍為1.401298E-45~3.402823E+38。例如,下面的語句將-1.4E06賦值給sngMySingle變量:DimsngMySingleAsSinglesngMySingle=-1.4E063.1.1數值數據類型7.雙精度浮點型(Double)雙精度浮點型用來存儲雙精度浮點數,它用8字節(64位)來存儲數值,其中符號占1位,指數占11位,其余52位表示尾數。雙精度浮點數比單精度浮點數支持更大的數據范圍,它可以精確到15或16位十進制數,其負數的取值范圍為-1.79769313486232E+308~-4.94065645841247E-324,正數的取值范圍為4.94065645841247E-324~1.79769313486232E+

308。例如,下面的語句將1.4000123E106賦值給dblMyDouble變量:DimdblMyDoubleAsDoubledblMyDouble=1.4000123E1063.1.2字符數據類型1.字符型(Char)一般來說,Char數據類型用于存儲單個字符,如下面的語句將字符“A”賦值給chrMyChar變量:DimchrMyCharAsCharchrMyChar="A"2.字符串型(String)String類型的字符串放在一對西文雙引號內,其中長度為0的字符串(不含任何字符)稱為空字符串。例如,下面的一組語句將“張三”賦值給strMyName變量,為strMyStr變量賦值為空字符串,將“2.0”賦值給strMyNumStr變量:DimstrMyNameAsStringDimstrMyStrAsStringDimstrMyNumStrAsStringstrMyName="張三"strMyStr=""strMyNumStr="2.0"3.1.3其他數據類型1.布爾型(Boolean)布爾型變量用2字節(16位)的數值形式存儲邏輯值,其值只能是True或False。在VisualBasic.NET中,如果將這兩個邏輯值轉換成數值類型,對應的值分別為-1和0。當將數值類型轉換為布爾值時,0轉換為False,其他值則轉換為True。布爾變量的值可用于記錄布爾型變量的狀態,一個布爾型變量的狀態不是True就是False。當用戶要完成某一任務(如打開一個窗口)時,可將變量設置成布爾型,并通過變量的值確定執行哪個操作。3.1.3其他數據類型例如,下面的代碼根據布爾型變量blnMyBoolean的值確定執行A操作或B操作:DimblnMyBooleanAsBooleanblnMyBoolean=FalseIfblnMyBoolean=FalseThen '執行A操作Else '執行B操作EndIf3.1.3其他數據類型2.日期型(Date)日期型變量用8字節(64位)的整數值形式存儲。VB.NET把對Date類型的處理與數值類型區分開來。Date類型必須以mm/dd/yyyy(月/日/年)的格式定義,如12/22/2012。文字串必須以一對“#”括起來,如#12/22/2012#,該類型可表示的日期范圍從公元1年1月1日到公元9999年12月31日。例如,可以按以下方式定義存儲日期變量:DimdatMyDate1AsDatedatMyDate1=#12/22/2012#3.1.3其他數據類型Date數據類型也用于存儲時間信息,所存儲的時間范圍可以是00:00:00到23:59:59之間的任意值,時間數據必須以hh:mm:ss(小時:分鐘:秒)格式定義,如16:20:09。例如,可以按以下方式定義時間變量:DimdatMyDate2AsDatedatMyDate2=#16:20:09#

Date數據類型也可同時存儲日期和時間信息,數據必須以“mm/dd/yyyyhh:mm:ss”(月/日/年小時:分鐘:秒)格式定義。例如,可以按以下方式定義日期時間變量:DimdatMyDate3AsDatedatMyDate3=#12/6/200410:30:05#3.1.3其他數據類型3.對象型(Object)對象型變量用4字節(32位)地址形式存儲,該地址為對象引用。可以為聲明是Object類型的變量分配任何引用類型(字符串、數組、類或接口),Object變量也可引用其他任何數據類型的數據(數值型、布爾型、字符型、日期型、結構型或枚舉型)。3.2數據的運算3.2.1常量和變量1.常量在VB.NET中常量分為一般常量和符號常量。(1)一般常量一般常量包括:數值常量、字符常量、邏輯常量和日期常量。先來看幾個一般常量的實例:數值常量(由正/負號、數字和小數點組成):123,-265,-75.32。字符常量(用雙引號括起來):"abC","李明","你好!"。邏輯常量(只有兩個):True(真),False(假)。日期常量(用“#”括起來):#23/8/2003#,#January1,1999#。數值整數大多數都是十進制數(基數為10),但有時也用十六進制數(基數為16)或八進制數(基數為8)表示。3.2.1常量和變量各種數值整數表示的實例如下:十進制數:如123,-456,0。八進制數:用前綴&O表示,如&O123。十六進制數:用前綴&H表示,如&H123。表3.2為十進制、八進制和十六進制整數的5個實例的對應關系表。浮點數:用尾數、指數符號、指數來表示,用指數符號E表示單精度浮點數,用D表示雙精度浮點數。3.2.1常量和變量例如,123.45E-3表示單精度浮點數,它的值為123.45×10-3;236D5表示雙精度浮點數,它的值為236×105。VB.NET根據輸入常量的形式來決定使用什么數據類型來保存它。在默認情況下,把整數常量作為Integer類型處理,把小數常量作為Double類型處理。例如,根據輸入值的形式來決定數據類型:Var1=30 '

此值為Integer類型Var2=18.4 '

此值為Double類型Var3=True '

此值為Boolean類型3.2.1常量和變量顯式地指定常量的類型,可以用VB.NET提供的值類型字符,方法是在值的后面加上類型字符。表3.3列出了值類型字符及用法示例。3.2.1常量和變量(2)符號常量在VB.NET中,可以用定義的符號常量來代替數值或字符串。定義符號常量的語法格式如下:[Public|Private]Const常量名[As類型]=表達式[,常量名[As類型]=表達式]…例如,下面兩條語句分別定義了一個字符串常量和一個整型常量:PublicConstMyVar1AsString="hello" '定義字符串常量PrivateConstMyVar2AsInteger=18 '定義整型常量也可以在一條語句中定義兩個以上的符號常量,例如:PublicConstMyVar3AsInteger=18,ConstMyVar4AsDouble=MyVar3+13.2除了使用“As類型”子句來指定常量類型外,還可以用值類型字符(見表3.3)或類型說明符(見表3.6)來指定常量類型,例如:PublicConstPAI@=3.1415926 '定義小數常量ConstNIAN=365L '定義整數常量3.2.1常量和變量2.變量(1)變量命名變量名表示變量所存儲的數據的一個名稱,通過名稱來引用變量數據的值。給變量命名必須遵循下列規則:①變量名必須以英文字母開頭,不能以數字或其他字符開頭。例如,6ABC、$ABC都是不合法的。但最后一個字符可以是類型聲明字符(%、$、@、#、&、!)。②變量名只能由字母、數字或下劃線(_)組成,不能包含句號(。)或空格。例如,ab.、a%b、Howareyou、A$B等都是不合法的。③變量名最長不能超過255個字符。④變量名不能和VB.NET的關鍵字同名。例如,Or、If、Loop、Len、Abs、Mod等都是關鍵字,不能作為變量名。3.2.1常量和變量(2)命名約定命名約定不是強制性的,通常取決于程序員的命名習慣。目前最常用的命名約定是匈牙利標記法(HungarianNotation),它用變量名的前三個小寫字母表示數據類型,第4個字母大寫,表示從這開始是變量的具有實際意義的名字。表3.4列出了本書建議的變量命名約定。3.2.1常量和變量(3)變量聲明①顯式聲明顯式聲明是在變量使用之前,用Dim、Public、Private、Static、Protected、FriendProtected、Friend、Shared等關鍵字聲明變量。其中Dim是最常用的聲明變量語句,它可以聲明一個或多個變量。Dim語句的語法格式如下:Dim變量名As數據類型Dim變量名1As數據類型1,變量名2As數據類型2…例如,下面兩行語句,分別聲明了一個String變量strSomeString和一個Date變量datSomeDate:DimstrSomeStringAsStringDimdatSomeDateAsDate3.2.1常量和變量在一個語句中也可以聲明多個變量,而且類型可以不同。若變量是相同類型的,只需使用一個As子句。例如,下面兩行語句中,第一行一次聲明多個不同類型的變量,第二行則一次聲明了多個同類(Char類型)的變量:DimstrXAsString,datYAsDate,intZAsIntegerDimchrA,chrB,chrCAsChar變量允許具有初始值,可以在聲明變量的同時對它初始化。例如,在下面代碼中,聲明了一個Integer變量、一個Boolean變量和一個Object變量,并分別將它們初始化為80、True以及新創建的Label類實例:DimintScoreAsInteger=80PrivateblnSexAsBoolean=TrueProtectedobjLabelAsNewLabel3.2.1常量和變量如果在聲明時沒有指定變量的初始值,VB.NET將把它們初始化為相應數據類型的默認值。各種數據類型的默認初始值見表3.5。3.2.1常量和變量②隱式聲明隱式聲明是在使用一個變量之前不需要聲明這個變量,而是用一個特殊的類型說明符加在變量名后面來說明其數據類型,表3.6給出了數據類型與類型說明符的對應關系。3.2.1常量和變量在VB.NET中,通過OptionExplicit語句控制編譯器的行為方式,以便根據不同的要求設置相應的默認操作。OptionExplicit語句的語法格式如下:OptionExplicit[On|Off]若選用參數On,則要求每個變量必須“先聲明,后使用”;若選用參數Off,則編譯器不檢查變量是否已聲明,即使用隱式聲明的變量;若省略參數,則默認為On。例如,下面代碼允許使用隱式聲明變量:OptionExplicitOffstrMyCountry$="中國"intMyAge%=203.2.1常量和變量選擇VS2010主菜單【工具】→【選項】項,在【選項】對話框左側條目樹中選中“VB默認值”,如圖3.1所示。3.2.2運算符和表達式1.算術運算符和算術表達式算術運算符是用于數值計算的運算符。表3.7列出了VB.NET的算術運算符。算術表達式是用算術運算符將運算元素連接起來的式子,其值是數值型的。例如:MyValue=2^2 '

返回4MyValue=10/4 '

返回

2.5MyValue=11\4 '

返回

2MyResult=10Mod3 '

返回

13.2.2運算符和表達式【例3.1】根據華氏溫度計算出攝氏溫度。采用以下公式:功能要求:單擊【計算】命令按鈕(btnStart),計算出華氏溫度為78時的攝氏溫度值,在文本框(txtTemperature)中顯示出計算的攝氏溫度結果。界面設計:由三個控件組成,分別是標簽(labF)、文本框(txtTemperature)和命令按鈕(btnStart),界面如圖3.2所示。3.2.2運算符和表達式程序代碼如下:PrivateSubbtnStart_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs) HandlesbtnStart.Click

'計算溫度DimfAsSingle,cAsSinglef=78c=5/9*(f-32)txtTemperature.Text=cEndSub3.2.2運算符和表達式2.賦值運算符賦值運算符用“=”符號表示,它用于賦值語句,將其右側的值賦給左側的變量或屬性,語法格式如下:變量或屬性名=值例如,給文本框的Text屬性賦值:Text1.Text="你好"給MyStr變量賦值:DimMyStrAsStringMyStr="HelloWorld"引用符號常量CONPI賦值給變量dblSquare:ConstCONPI=3.14159265358979DimdblSquareAsDoubledblSquare=CONPI*5*5

3.2.2運算符和表達式如果賦值運算符兩邊的數據類型不一致,系統將按下面4個原則進行處理。(1)當賦值運算符右邊的表達式為數值型,但與左邊的變量類型不同時,系統將強制把表達式值轉換成左邊的類型和精度。例如,下面代碼由低到高轉換能正確執行:Dim X As DoubleDim Y As Integer=2Dim Z As Integer=3X=Y+Z '編譯成功然而,由高到低轉換則會出錯:Dim X As IntegerDim Y As Double=2Dim Z As Double=3X=Y+Z '編譯出錯3.2.2運算符和表達式(2)當賦值運算符右邊的表達式是數字字符串,而左邊的變量是數值類型時,系統自動把表達式轉換為數值類型后,再賦值給左邊的變量。但是當表達式中有非數字字符串或空格時,將會出錯。例如,下面代碼X能正確得到值,而Y和Z則會出錯:DimX,Y,ZAsDoubleX="100" '轉換成功,X=100Y="12a3" '類型不匹配,出錯Z="" '類型不匹配,出錯3.2.2運算符和表達式(3)當邏輯表達式賦值給數值型變量時,True轉換為-1,False轉換為0;反之,當數值型表達式賦值給邏輯型變量時,0轉換為False,非0值轉換為True。例如:DimXAsDouble=6DimYAsBoolean=FalseY=X '

Y值為TrueX=Y '

X值為-1(4)任何非字符類型值賦給字符類型,自動轉換為字符類型。例如:DimXAsStringDimYAsCharY=150 '

Y值為字符串"150"X=12.05 '

X值為字符串"12.05"3.2.2運算符和表達式3.關系運算符和關系表達式關系運算符也稱比較運算符,用它連接兩個表達式的式子稱為關系表達式,其結果是一個邏輯值(True或False)。VB.NET提供了8個關系運算符,見表3.8。3.2.2運算符和表達式(1)數值比較數值比較通常是對兩個算術表達式進行比較,常用表3.8中的前6種運算符。例如:Var1+Var2>(X–1)/2(2)字符串比較字符串比較通常是對兩個字符串表達式進行比較,常用表3.8中的前7種運算符。字符串比較的規則是,從前到后逐個字符按其ASCII碼大小比較,ASCII碼大的字符大;如果前面部分相同,則串長的大;字符串全部一樣并長度相同,才能相等。例如:"5">"24" '

結果為True"aaa">"aa" '

結果為True"54"="5" '

結果為False"54"<"9" '

結果為True"54">="5" '

結果為True3.2.2運算符和表達式Like運算符用來比較兩個字符串的模式是否匹配,即判斷一個字符串是否符合某一模式。在Like表達式中可使用通配符,如表3.9所示。例如:"264"Like"2?4" '

結果為True"a2a"Like"a#a" '

結果為True"V"Like"[A-Z]" '

結果為True"V"Like"[!A-Z]" '

結果為False"aBBBa"Like"a*a" '

結果為True3.2.2運算符和表達式(3)對象比較可以用Is和IsNot運算符來比較對象,其語法格式如下:對象名1Is對象名2對象名1IsNot對象名2①Is運算符用來判斷兩個變量是否引用同一個對象,它不執行值的比較。如果兩個對象變量都引用同一個對象,Is運算的結果為True,否則為False。例如:DimobjXAsButtonDimobjYAsNewButtonobjX=objYMyResult=objXIsobjY '

結果為True3.2.2運算符和表達式上例中,objXIsobjY計算為True,因為兩個變量引用的是同一個Button實例。而下面的例子運算結果則為False:DimobjXAsButtonDimobjYAsNewButtonMyResult=objXIsobjY '

結果為False3.2.2運算符和表達式②IsNot運算符用來判斷兩個變量是否引用不同的對象,它也不執行值的比較。如果兩個對象變量都引用同一個對象,IsNot運算的結果為False,否則為True。例如:DimobjXAsButtonDimobjYAsNewButtonobjX=objYMyResult=objXIsNotobjY '結果為False3.2.2運算符和表達式4.連接運算符和連接表達式用連接運算符將兩個表達式連接起來的式子稱為連接表達式。例如:DimstrMyStrA,strMyStrB,strMyStrCAsStringstrMyStrA="Hello"+"World" '結果為"HelloWorld"strMyStrB="How"&"Are"&"You" '結果為"HowAreYou"strMyStrC=strMyStrA&strMyStrB '結果為"HelloWorldHowAreYou"3.2.2運算符和表達式5.邏輯運算符和邏輯表達式邏輯運算也稱布爾運算,邏輯運算符是用來執行邏輯運算的運算符。VB.NET提供了6種邏輯運算符,見表3.10。3.2.2運算符和表達式這6種邏輯運算的詳細規則見表3.11。3.2.2運算符和表達式(1)邏輯運算邏輯運算就是用邏輯運算符來比較邏輯表達式,可以使用表3.10中的6種邏輯運算符。例如:DimblnMyStrA,blnMyStrB,blnMyStrCAsBooleanblnMyStrA=(3>5)Or(15<40) '

blnMyStrA=TrueblnMyStrB=(3>5)And(15<40) '

blnMyStrB=FalseblnMyStrC=(3>5)Xor(15<40) '

blnMyStrC=TrueblnMyStrA=Not(3>5) '

blnMyStrA=TrueblnMyStrA=12>45AndAlso(32*128<5000) '

blnMyStrA=FalseblnMyStrA=45>12OrElse(32*128<5000) '

blnMyStrA=True3.2.2運算符和表達式(2)位運算當And(與)、Or(或)、Xor(異或)和Not(非)這4種邏輯運算符對數值使用時,可以實現位運算。所謂位運算,就是以二進制數的對應位的值(0或1)進行邏輯運算,然后基于運算結果再賦值。二進制位的邏輯運算規則與布爾值相同,只需將1和0分別對應于布爾值的True和False。例如:DimintMyStrAAsIntegerintMyStrA=3And5

3.2.2運算符和表達式6.復合運算符部分算術運算符可以和賦值運算符結合使用,構成復合運算符,也稱自反賦值運算符。各種復合運算符見表3.12。3.2.2運算符和表達式舉例說明復合運算符的使用方法:DimintAAsInteger=10DimintBAsInteger=3intA-=intB '結果為

intA=7intA+=intB '結果為

intA=13intA*=intB '結果為

intA=30intA^=intB '結果為

intA=1000intA/=intB '結果為

intA=3.33333intA\=intB '結果為

intA=3DimintCAsString="你好"DimintDAsString="中國"intC&=intD '結果為

intC="你好中國"3.2.3運算符的優先順序運算符優先順序(從高到低)如下:算術運算符→字符串連接運算符(&)→關系運算符→邏輯運算符算術運算符的優先順序(從高到低)如下:^→+-(正負號)→*、/→\(整數除法)→Mod→+、–(加減)邏輯運算符優先順序(從高到低)如下:Not→And、AndAlso→Or、OrElse→Xor3.2.3運算符的優先順序所有關系運算符的優先順序都相同,按從左到右順序進行運算。例如,對A,B,C變量進行邏輯運算:DimA,B,C,MyCheckA=10B=8C=6MyCheck=A>BAndAlsoB>C 'MyCheck為True,先">"運算,再"AndAlso"運算。MyCheck=A>BOrElseB>C '返回

TrueMyCheck=A>BXorB>C '返回

FalseMyCheck=A>=2*3.1415926*BAndC<

>5 '返回

False3.2.3運算符的優先順序再例如,在例2.7中輸入半徑為2,如果將單擊按鈕的代碼改成:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs) HandlesButton1.ClickDimrAsSingle '聲明一個實數類型的變量

rr=TextBox1.Text '從

TextBox1中讀取半徑值存入變量

rTextBox2.Text=1+Math.PI*r*r '計算圓面積+1并顯示在

TextBox2中EndSub3.2.3運算符的優先順序在表達式1+Math.PI*r*r中,由于乘法運算符優先,所以先計算Math.PI*r*r,再將計算的結果加1。因此單擊【計算】按鈕后顯示面積加1的結果,如圖3.3所示。3.3VB.NET語句的結構3.3.1順序結構順序結構如圖3.4(a)所示,整個程序按語句的書寫順序依次執行。先執行A,再執行B,即自上而下依次運行。我們也可用N-S圖來簡潔地表示程序的控制結構,它規定了一些圖形元素,用以表示各種復雜的代碼結構,圖3.4(b)為順序結構的N-S結構化流程圖。3.3.2分支結構分支結構如圖3.5所示,通過E判斷后選擇要執行的分支,滿足條件執行A,不滿足條件執行B。3.3.2分支結構1.If...Then結構If...Then結構表示“如果……就”,是條件轉移語句,根據條件測試后的結果,決定程序的下一步。其語法格式如下:If條件

Then語句或者If條件

Then

語句塊EndIf例如,當滿足條件x<y時,執行Sum=Sum+1:Ifx<yThenSum=Sum+1如果條件為

True時要執行多行代碼,則必須使用

If...Then...EndIf結構。例如:Ifx<yThen Sum=Sum+1 z=xEndIf

3.3.2分支結構2.If...Then...Else結構If...Then...Else結構表示“如果……就……否則”,比前面的If...Then結構的條件選擇和應用范圍更廣。其語法格式如下:If條件1Then

語句塊1[ElseIf條件2Then

語句塊2]......[Else

語句塊n]EndIf3.3.2分支結構【例3.2】

設計一個獲獎查詢程序,要求查詢是否中獎及所中獎的等級。界面設計:界面由4個控件組成:標簽(labResult)、文本框(txtInput)、【查詢】命令按鈕(btnCheck)和標簽(Label1)。程序運行界面如圖3.6所示。3.3.2分支結構功能要求:從文本框txtInput中輸入獎券號碼,單擊【查詢】按鈕,在其Click事件中查詢是否中獎及中獎的等級。中獎號碼為“123”,與中獎號碼相同的為一等獎;前兩位相同為二等獎;前一位相同為三等獎。將中獎結果在標簽labResult中顯示。程序代碼如下:PrivateSubbtnCheck_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs) HandlesbtnCheck.Click'單擊按鈕查詢DimstrInputAsString '定義字符串型strInput=txtInput.TextIfstrInput="123"Then '號碼為"123" labResult.Text="真幸運,中了一等獎!"ElseIfstrInputLike"12?"Then '號碼前兩位為"12"labResult.Text="恭喜你,中了二等獎!"ElseIfstrInputLike"1??"Then '號碼第一位為"1"labResult.Text="還不錯,中了三等獎!"ElselabResult.Text="謝謝您的參與!"EndIfEndSub3.3.2分支結構3.SelectCase結構SelectCase結構與

If...Then...Else結構類似,但對多重選擇的情況,用SelectCase語句代碼效率更高,更易讀。其語法格式如下:SelectCase變量

|表達式Case值1

語句塊1[Case值2

語句塊2]......[CaseElse

語句塊n]EndSelect3.3.2分支結構其中,值1、值2…可以取以下幾種形式:(1)具體常數,如1、2、〞A〞等。(2)連續的數據范圍,如1To100、AToZ等。(3)滿足某個條件的表達式,如I>0等。(4)可同時設置多個不同的范圍,用逗號(,)分隔開,如-10,1To100。SelectCase語句的N-S流程圖如圖3.7所示。3.3.2分支結構【例3.3】

用SelectCase結構設計獲獎查詢程序。PrivateSubbtnCheck_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs) HandlesbtnCheck.ClickDimstrInputAsString'定義字符串型strInput=txtInput.TextSelectCasestrInputCase123labResult.Text="真幸運,中了一等獎!"Case120To129labResult.Text="恭喜你,中了二等獎!"Case100To199labResult.Text="還不錯,中了三等獎!"CaseElselabResult.Text="謝謝您的參與!"EndSelectEndSub3.3.2分支結構4.嵌套嵌套是指把一個控制結構放入另一個之內。例如,在

If...Then中嵌套

If...Then結構或SelectCase結構等,嵌套的層數沒有限制。【例3.4】

計算下列函數:3.3.2分支結構函數分成三個分支,即x<0、x>0和x=0時執行不同的語句塊。方法1用If嵌套結構來設計,將x>0的判斷嵌套在x<>0的分支結構中:y=-1Ifx<>0Then Ifx>0Then y=1 EndIfElse y=0EndIf3.3.2分支結構方法2用If嵌套結構來設計,將x>0和x=0的判斷嵌套在x>=0的分支結構中:Ifx>=0Then Ifx>0Then y=1 Else y=0 EndIfElse y=-1EndIf方法3用If…Then…Else結構來設計:Ifx<0Then y=-1ElseIfx=0Then y=0Else y=1EndIf3.3.3循環結構1.Do循環結構可使用Do循環語句執行不確定次數的循環,它有兩種形式:“DoWhile結構”和“Do結構”。“DoWhile”循環的語法格式如下:DoWhile|Until條件 語句塊

[ExitDo]

語句塊Loop“Do”循環的語法格式如下:Do

語句塊

[ExitDo]

語句塊LoopWhile|Until條件3.3.3循環結構DoWhile循環結構流程圖如圖3.8所示。執行步驟:首先測試條件;當條件為

True時,執行語句塊A,如此循環執行并測試條件;一旦條件為False,就跳過所有語句到循環體外。Do循環結構的流程圖如圖3.9所示。

3.3.3循環結構在Do...Loop結構中Until和While不同,判斷條件正好相反。Until結構是只要條件為

False(而不是

True),就執行循環,直到條件為Ture跳出循環體,其流程圖如圖3.10所示。3.3.3循環結構【例3.5】

用DoWhile循環計算整數1~100的和。DimiAsInteger,SumAsIntegerSum=0:i=1 '置初始值DoWhilei<=100 Sum=Sum+i i=i+1LoopSum的結果是:5050。【例3.6】

用Do循環計算整數1~100的和。DimiAsInteger,SumAsIntegerSum=0:i=1 '置初始值Do Sum=Sum+i i=i+1LoopWhilei<=100Sum的結果是:5050。3.3.3循環結構2.While循環結構可使用While循環語句執行不確定次數的循環,While循環也稱為“當型”循環,其流程圖如圖3.11所示。執行步驟:首先測試條件,只要條件為True就執行語句塊A,然后循環測試While語句的條件;一旦條件為False,就跳過所有語句到循環體外。其語法格式如下:While條件

語句塊 [ExitWhile]

語句塊EndWhile

3.3.3循環結構【例3.7】

While循環計算整數1~100的和。DimiAsInteger,SumAsIntegerSum=0:i=1 '置初始值Whilei<=100 Sum=Sum+i i=i+1EndWhile3.3.3循環結構3.For循環結構For循環結構使用起來最靈活。它使用一個計數器,每循環一次,計數器變量就會自動增加或減少。其語法格式如下:For計數器

=初始值

To終止值

[Step步長]

語句塊 [ExitFor]Next[計數器]For循環結構流程圖如圖3.12所示。3.3.3循環結構【例3.8】

用For循環結構計算整數1~100的和,分別取步長為1和-1計算。(1)取步長為1的程序:DimiAsInteger,SumAsIntegerSum=0Fori=1To100 '步長默認為1 Sum=Sum+iNexti(2)取步長為-1的程序:DimiAsInteger,SumAsIntegerSum=0Fori=100To1Step-1 Sum=Sum+iNexti

3.3.3循環結構4.嵌套【例3.9】

編寫搖獎程序。圖3.13【例3.9】運行界面功能要求:用For循環由隨機數生成器循環產生三位數的中獎號碼,為了獲得搖獎的效果,出現每個號碼之間要有一小段時間間隔,用一個For循環生成延時程序。界面設計:界面中有一個文本框txtPrize、一個【搖獎】按鈕(btnStart)和一個標簽,其運行界面如圖3.13所示。3.3.3循環結構程序代碼如下:PrivateSubbtnStart_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs) HandlesbtnStart.ClickDimiAsInteger,jAsIntegerDimaAsSingleDimStrPrizeAsString

StrPrize=""Fori=1To3j=Int(10*Rnd()) '產生0~9的隨機數

StrPrize=StrPrize&jFora=1To10000Step0.001

'延時Nexta

txtPrize.Text=StrPrize

txtPrize.Refresh() '刷新文本框NextiEndSub3.3.3循環結構5.退出循環用

Exit語句可以直接退出

For循環、Do循環。程序執行中遇到

Exit語句時,不再執行循環結構中的任何語句而立即退出,轉到循環結構的下面繼續執行。其語法格式如下:ExitForExitDoExitWhile【例3.10】

計算整數1~100的和,當和大于等于5000時退出循環。DimiAsInteger,SumAsIntegerSum=0Fori=100To1Step-1 Sum=Sum+i IfSum>=5000ThenExitFor '當和大于等于5000時跳出循環Nexti

3.4函數及其應用函數可以有返回值,應注意返回值的數據類型。例如,y=CBool(x)的返回值是Boolean型。在程序中調用函數的語法格式如下:函數名(參數1,參數2,…)3.4.1算術函數表3.13所示為常用的算術函數。3.4.1算術函數【例3.11】

制作一個萬年歷,用來查看某年的元旦是星期幾。確定某年的元旦是星期幾可由下式得出:式中,Y為某年公元年號,計算出的K為星期幾,K=0為星期日,K=1為星期一,…,依次類推。3.4.1算術函數功能及界面設計要求:從文本框(txtYear)輸入年份,單擊【查看】(Button1)按鈕,在文本框(txtDay)中顯示星期,運行結果如圖3.14所示。3.4.1算術函數程序代碼如下:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs) HandlesButton1.ClickDimY,F,kAsIntegerY=Val(txtYear.Text)F=Int((Y-1)*(1+1/4-1/100+1/400)+1)k=F-Fix(F/7)*7If(k=0)ThentxtDay.Text="日"ElsetxtDay.Text=kEndIfEndSub在VB.NET中,有些算術函數在名稱空間System.Math中定義(用方法機制實現),為了使用它們必須在程序模塊的開頭引入System.Math名稱空間,語法格式如下:ImportsSystem.Math3.4.1算術函數【例3.12】

求一元二次方程ax2+bx+c=0的根。求解公式如下:所求方程的根有以下幾種可能:(1)a=0,有一個實根。(2)b2-4ac=0,有兩個相等的實根。(3)b2-4ac>0,有兩個不等的實根。(4)b2-4ac<0,有兩個共軛復根。3.4.1算術函數界面設計:界面由5個文本框、5個標簽和1個按鈕組成,各控件的屬性如表3.14所示。3.4.1算術函數程序流程圖如圖3.15(a)所示,界面安排見圖3.15(b)。3.4.1算術函數功能要求:在文本框中輸入a、b、c的值,單擊【計算】按鈕(btnStart),計算方程根并將結果顯示在文本框txtX1和txtX2中。程序代碼。計算示例如圖3.16所示。3.4.2字符串函數字符串函數用于進行字符串處理。表3.15所示為常用的字符串函數。3.4.2字符串函數【例3.13】

將輸入的字符串清除首尾空格,統一轉換成小寫并反向顯示。界面設計:界面包含2個標簽、1個按鈕(btnReverse)和2個文本框(txtInput用于輸入,txtReverse用于顯示處理后的字符串)。運行結果如圖3.17所示。3.4.2字符串函數功能要求:從文本框txtInput輸入原始的字符串,單擊【處理】(btnReverse)按鈕,在文本框txtReverse中顯示處理后的字符串。程序代碼如下:PrivateSubbtnReverse_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs) HandlesbtnReverse.ClickDimStrAsStringStr=StrReverse(LCase(Trim(txtInput.Text)))txtReverse.Text=StrEndSub3.4.2字符串函數【例3.14】

加密電文。為了使電文保密,往往按一定規律將其轉換成密碼,收報人再按規律譯回原文。假設將字母A變成E,即變成其后的第4個字母,依次類推。相應地,最后4個字母W變成A,X變成B,Y變成C,Z變成D。小寫字母也是同樣,加密的規律如圖3.18(a)所示。界面設計:界面由2個文本框(txtInput和

txtOutput)、1個命令按鈕btnStart和2個標簽組成,如圖3.18(b)所示。

3.4.2字符串函數功能要求:在文本框(txtInput)中輸入原文world,單擊【開始】(btnStart)按鈕后,在文本框(txtOutput)中出現加密后的密文asvph,窗體中各控件屬性設置如表3.16所示。程序代碼。3.4.3日期與時間函數日期與時間函數用于日期和時間的處理。表3.17所示為常用的日期與時間函數。3.4.3日期與時間函數【例3.15】

使用日期和時間函數在窗體上顯示日期和時間。界面設計:用4個空白標簽labYear、labMonth、labDay和labTime分別顯示年、月、日和時間,設計的界面如圖3.19所示。3.4.3日期與時間函數窗體加載(Load)事件程序代碼如下:PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)

HandlesMyBase.LoadlabYear.Text=Year(Now) '顯示年份labMonth.Text=Month(Now) '顯示月份labDay.Text=Microsoft.VisualBasic.Day(Now) '顯示日期labTime.Text=Hour(Now)&":"&Minute(Now)&":"&Second(Now)'顯示時間EndSub

程序運行結果如圖3.20所示。3.4.4類型轉換函數VB.NET提供了幾種類型轉換函數,每個函數都可以強制將一個表達式的值轉換成某種特定的數據類型。轉換函數如表3.18所示。3.4.5隨機函數1.Rnd函數Rnd函數生成一個Single類型的隨機數。其語法格式如下:Rnd([number])其中,參數number是一個Single類型的表達式。Rnd函數的返回值是一個0到1(小于

1但大于或等于

0)之間的單精度數值。例如:DimintAAsIntegerDimsngBAsSinglesngB=Rnd() '產生0到1之間的隨機數intA=CInt(Int((6*Rnd())+1)) '產生1到6之間的隨機整數2.Randomize語句Randomize語句的功能是初始化隨機數產生器。其語法格式如下:Randomize[number]3.4.6輸入/輸出函數1.InputBox函數InputBox函數用于接受用戶從鍵盤輸入的數據,也稱輸入框。在運行時,它會自動產生一個對話框,用戶可在其中輸入數據。其語法格式如下:InputBox(對話框字符串s[,標題s][,文本框默認值s][,橫坐標值n][,縱坐標值n])在調用InputBox函數時會出現一個對話框,包含一個文本框及【確定】和【取消】按鈕。對話框等待用戶在文本框輸入內容。如果單擊【確定】按鈕或按下Enter鍵,InputBox函數的返回值就是文本框的內容;如果單擊【取消】按鈕,則返回一個零長度字符串。例如:InputBox("請輸入文件名:","打開文件","C:\ProgramFiles\MicrosoftVisualStudio10.0\Common7 \IDE\devenv.exe")3.4.6輸入/輸出函數對應的輸入框如圖3.21所示。3.4.6輸入/輸出函數【例3.16】

用InputBox函數及對話框獲取用戶輸入的文件名。界面設計:界面包含2個標簽(labFile和labFileName)和1個按鈕(btnStart)。功能要求:單擊【輸入文件名】(btnStart)按鈕出現InputBox輸入框,在其中輸入文件名,將輸入的文件名顯示在窗體的標簽(labFileName)中。程序代碼如下:PrivateSubbtnStart_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs) HandlesbtnStart.ClickDimFileNameAsStringFileName=InputBox(“請輸入文件名:”,“打開文件”,“C:\ProgramFiles\MicrosoftVisualStudio10.0 \Common7\IDE\devenv.exe")'默認的文件名是"C:\ProgramFiles\MicrosoftVisualStudio10.0\Common7\IDE\devenv.exe"IfFileName<>""ThenlabFileName.Text=FileNameElse'當用戶單擊【取消】按鈕時labFileName.Text=""EndIfEndSub3.4.6輸入/輸出函數程序運行結果如圖3.22所示,這里是以默認文件名輸入的。3.4.6輸入/輸出函數2.MsgBox函數MsgBox函數用于向用戶發布提示信息。程序運行時,它會自動產生一個對話框,也稱消息框,在其中顯示提示消息。同時,它還包含命令按鈕,要求用戶通過單擊按鈕做出響應,使程序繼續執行。其語法格式如下:MsgBox(消息文本s[,顯示按鈕n][,標題s])其中:(1)消息文本,是在對話框中作為消息顯示的字符串,其內容為提示信息。當消息文本內容超過一行時,可以在每行之間插入回車符(Chr(13))或換行符(Chr(10))進行換行。(2)標題,是在對話框標題欄中顯示的標題,默認時為空白。(3)顯示按鈕,是一個枚舉類型的MsgBoxStyle值,用來控制在對話框內顯示的按鈕、圖標的種類及數量,該值由c1、c2、c3、c4這4個值構成,即c1+c2+c3+c4的總和,用來指定顯示按鈕的數目、形式、圖標樣式。Buttons的設置值c1、c2、c3、c4如表3.19、表3.20、表3.21、表3.22所示。3.4.6輸入/輸出函數MsgBox函數等待用戶單擊按鈕,返回一個Integer型值,表示用戶單擊的是哪一個按鈕,返回值如表3.23所示。如果用戶按下

Esc鍵,則與單擊Cancel按鈕效果相同。3.4.6輸入/輸出函數對應的消息框如圖3.23所示。3.4.6輸入/輸出函數【例3.17】

在例3.16的界面中包含一個【退出】(btnEnd)按鈕,單擊后顯示消息框如圖3.23所示,單擊【確定】按鈕退出系統,單擊【取消】按鈕取消操作。程序代碼如下:PrivateSubbtnEnd_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs) HandlesbtnEnd.ClickDimResponseResponse=MsgBox("是否退出系統?",vbOKCancel+vbQuestion,"退出")IfResponse=1Then'當單擊【確定】按鈕EndEndIfEndSub3.4.7自定義函數1.定義Function過程Function過程由包含在Function和EndFunction語句之間的一系列語句構成。每次調用函數時都會執行過程中的語句,即從Function語句后的第一個可執行語句開始,直到遇到第一個EndFunction、ExitFunction或Return語句結束。定義Function過程的一般語法格式如下:[Private|Public][Static]Function函數名

([參數列表])[As數據類型][局部變量和常數聲明]

語句塊 [函數名

=表達式] [ExitFunction]

語句塊 [Return表達式]EndFunction3.4.7自定義函數例如,下面是計算直角三角形第三邊(斜邊)的函數,函數名為Hypotenuse,函數值的數據類型為Single,函數的形參為直角三角形兩直角邊A和B,返回值為斜邊的值,Function過程代碼如圖3.24所示。3.4.7自定義函數2.調用Function過程調用Function函數過程的方法和調用

VB.NET內部函數一樣,在語句中直接使用函數名即可。其語法格式如下:變量=Function函數名([參數列表])Function過程可返回一個值賦給變量。另外,也可使用Call語句或僅僅引用函數名來直接執行函數過程。其語法格式如下:Call函數名([參數列表])或者函數名[參數列表]當用這種方法調用函數時,將會放棄函數的返回值。例如,下面的語句都是調用計算直角三角形斜邊的函數Hypotenuse。Debug.Write(10*Hypotenuse(3,4)) '在窗體顯示函數值運算結果X=Hypotenuse(3,4) '將函數值賦給變量XIfHypotenuse(3,4)=10ThenDebug.Write("Error!") '判斷函數值是否=10X=Abs(Hypotenuse(3,4)) '函數值作為Abs函數的參數CallHypotenuse(3,4) 'Call語句執行函數過程

3.4.7自定義函數【例3.18】

采用輾轉相除法,編寫用函數調用求兩個自然數的最大公約數的程序。輾轉相除法的算法如下:(1)輸入兩個自然數M,N。(2)計算M除以N的余數R,R=MModN。(3)用N替換M,M=N;用R替換N,N=R。(4)若R<>0則重復上述步驟(2)、(3)、(4)。程序代碼如下:PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs) HandlesMyBase.LoadDimmAsInteger,nAsInteger,gAsIntegerm=InputBox("請輸入M")n=InputBox("請輸入N")g=Divisor(m,n)'調用函數DivisorDebug.Write(m&"和"&n&"的最大公約數是:"&g)EndSub3.4.7自定義函數在Form1_Load事件中輸入兩個自然數M和N并調用Divisor函數,M和N傳遞給Divisor函數。PrivateFunctionDivisor(ByValxAsInteger,ByValyAsInteger)'函數

Divisor計算最大公約數DimrAsIntegerr=xModyDoWhiler<>0x=yy=rr=xModyLoopDivisor=yEndFunction運行程序,當輸入M為45,N為25時,在集成環境的【即時窗口】中顯示結果為:45和25的最大公約數是:5

3.5數組3.5.1數組聲明在使用數組前,必須先聲明。可以聲明一維數組、二維數組,也可以定義多維數組。其語法格式如下:Dim數組名(第一維下標上界[,第二維下標上界,…])[As數據類型

]1.LBound函數對已經定義的數組,可以用LBound函數獲得數組任一維可用的最小下標,從而確定數組任一維的下界。其語法格式如下:LBound(數組名[,維])其中,維指定返回數組的哪一維。1(默認)表示第一維,2表示第二維,…,依次類推。例如:DimA(9,14)AsIntegerDimLAsIn

溫馨提示

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

評論

0/150

提交評論