版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
3VisualBasic語言基礎(chǔ)VisualBasic程序代碼的組織方式通過上面幾章的學(xué)習(xí),可以看出,一個VisualBasic程序由窗體界面和程序代碼兩部分組成,通過程序代碼把窗口界面的各個對象以及應(yīng)用中的其他元素聯(lián)系在一起。程序代碼部分則由若干被稱為“過程”的代碼行及向系統(tǒng)提供某些信息的說明組成。過程及說明又被組織在所謂的“模塊”之中。將設(shè)計的過程代碼及相關(guān)說明合理地組織到不同的模塊之中,也就是設(shè)計代碼的結(jié)構(gòu),在創(chuàng)建VisualBasic應(yīng)用時是最為重要的一個步驟。過程所謂“過程”,正如前幾章從示例中看到的,就是具有特定書寫格式、包含若干可被作為一個整體執(zhí)行的代碼行的一個代碼組。根據(jù)執(zhí)行的方式,可把“過程”分為“事件過程”和“通用過程”兩類(編者注:VB還有一類“屬性過程”,因超出本書內(nèi)容范圍,不再介紹,感興趣的讀者可自行參閱VB手冊)。.事件過程VisualBasic程序是由事件驅(qū)動的,所以事件過程是VisualBasic程序中不可缺少的基本過程。我們?yōu)榇绑w以及窗體上的各種對象編寫的用來響應(yīng)由用戶或系統(tǒng)引發(fā)的各種事件的代碼行就是“事件過程”。事件過程由VisualBasic中的事件調(diào)用。也就是說,當(dāng)指定的事件發(fā)生時,該過程即會被激活執(zhí)行。事件過程存儲在被稱為“窗體模塊”的文件中(擴(kuò)展名.FRM),而且在缺省情況下,是“私有的"(Private)。換言之,事件過程在未加特別說明時,僅在該窗體內(nèi)有效。前面列舉的程序示例中的程序代碼都是事件過程。事件過程的代碼框架是由VB系統(tǒng)自動提供的,用戶在代碼編輯器窗口可通過單擊“對象”下拉列表框選擇要編寫代碼的具體對象,單擊“過程”下拉列表框選擇具體的事件,代碼窗口就給出該對象響應(yīng)相關(guān)事件的過程框架,在框架內(nèi)加入代碼即可(圖3-1)。在保存窗體時,窗體的外觀會和編寫的事件代碼一起保存。圖3-1.通用過程一個應(yīng)用程序可以具有若干個窗體,每個窗體又可能擁有相同或不相同的對象,但是這些不同窗體中的對象卻有可能引發(fā)相同的操作或需要進(jìn)行某些共同的處理,也就是說,一個應(yīng)用中的多個窗體可以共享一些代碼,或者一個窗體內(nèi)不同的事件過程可共享一些代碼。這些可被共享的代碼構(gòu)成的過程被稱為“通用過程”。通用過程是由事件過程或其它通用過程調(diào)用而執(zhí)行的。這些過程在缺省情況下,是'‘公有的"(Public),也就是說,通用過程可被所有的窗體共享。有關(guān)通用過程的設(shè)計及調(diào)用,將在第7章詳細(xì)介紹。模塊模塊是VisualBasic用于將不同類型過程代碼組織到一起而提供的一種結(jié)構(gòu)。在VB中具有三種類型的模塊,即窗體模塊、標(biāo)準(zhǔn)模塊和類模塊。1.窗體模塊應(yīng)用程序中的每個窗體都有一個相對應(yīng)的窗體模塊。窗體模塊不僅包含有用于處理發(fā)生在窗體中的各個對象的事件過程,而且包含有窗體及窗體中各個控件對象的屬性設(shè)置以及相關(guān)的說明。如果某些通用過程僅供本窗體內(nèi)的其他過程共享,則它也可包含在該窗體模塊之中。2.標(biāo)準(zhǔn)模塊在應(yīng)用程序中可被多個窗體共享的代碼,應(yīng)當(dāng)被組織到所謂的“標(biāo)準(zhǔn)模塊”之中。標(biāo)準(zhǔn)模塊文件的擴(kuò)展名是.bas。標(biāo)準(zhǔn)模塊中保存的過程都是通用過程。除了這些通用過程之外,標(biāo)準(zhǔn)模塊中還包含有相關(guān)的說明。特別值得一提的是:標(biāo)準(zhǔn)模塊中代碼并不限于用于一個應(yīng)用程序,還可供其他應(yīng)用程序重復(fù)使用。創(chuàng)建標(biāo)準(zhǔn)模塊最簡便的方法是:單擊工具欄上添加窗體按鈕右側(cè)向下的箭頭,并在出現(xiàn)的選項(xiàng)表中選擇“添加模塊”(圖3-2),然后再在出現(xiàn)的代碼編輯窗口中輸入代碼圖3-23.類模塊類模塊包含用于創(chuàng)建新的對象類的屬性、方法的定義等。有關(guān)類模塊的詳細(xì)內(nèi)容,感興趣的讀者可參閱有關(guān)的VB手冊。代碼行的書寫規(guī)則.語句語句是構(gòu)成VisualBasic程序的最基本成份。一個語句或者用于向系統(tǒng)提供某些必要的信息(如程序中使用的數(shù)據(jù)類型等),或者規(guī)定系統(tǒng)應(yīng)該執(zhí)行的某些操作。語句的一般形式是:〈語句定義符〉[語句體]語句定義符用于規(guī)定語句的功能;語句體則用于提供語句所要說明的具體內(nèi)容或者要執(zhí)行的具體操作。但VisualBasic中一些語句可以沒有語句定義符;有一些語句的語句定義符可以省略。VisualBasic程序是按行書寫的。一個語句可寫在一行上;也可以通過在行的末尾加上“續(xù)行標(biāo)志”(_:一個空格加一個下劃線字符),而分寫在多行上;另外,也可在一個代碼行上寫入多個語句,但語句之間需要用冒號":"分隔。下面是兩種情況的示例:例1,一個語句分寫在多行上:Dimstudent_nameAsString,student_numberAsString,computerAsInteger,englishAsInteger例2,一行寫多個語句:x=10:y$="VisualBasic":z=20.書寫規(guī)范語句輸入時,可以不區(qū)分大小寫字母,一個代碼行輸入完后,按回車鍵,光標(biāo)自動移向下一行,同時,系統(tǒng)還會自動把語句中所有“保留字”的第一個字母改為大寫字母,并在其前后加上空格。比如,Rem是系統(tǒng)保留字,所以不論輸入的是ReM、還是rem或REM等,系統(tǒng)都會自動變換成Rem。VisualBasic的數(shù)據(jù)類型數(shù)據(jù)是程序處理的對象。VB具有強(qiáng)大的數(shù)據(jù)處理能力,它的具體表現(xiàn)就是VB程序不僅可以處理各種數(shù)制的數(shù),而且具有豐富的數(shù)據(jù)類型。在程序中取值始終保持不變的數(shù)據(jù)稱為“常量”,常量可以是具體的數(shù)值,也可以是專門說明的符號:以符號形式出現(xiàn)在程序中,且取值可以發(fā)生變化的數(shù)據(jù)稱為“變量”。在程序執(zhí)行前已知,且在程序重復(fù)執(zhí)行時,不發(fā)生變化的量,可把它的取值宜接寫入程序。例如圓周率的值3.14159,在進(jìn)行相關(guān)運(yùn)算時總是不變的,就可直接寫入程序。變量則是存儲單元的代號。從計算機(jī)的外部設(shè)備輸入的數(shù)據(jù),必須送入變量中保存;而在程序執(zhí)行過程中,變量的內(nèi)容可以不斷改變(存入新的數(shù)據(jù))。與數(shù)學(xué)上表示未知數(shù)的“變量”不同,程序中的變量在任一時刻都
有一個確定的“值”(即該時刻所存儲的數(shù)據(jù)),變量在參加運(yùn)算等處理時,是用它所存儲的數(shù)據(jù)進(jìn)行運(yùn)算。數(shù)據(jù)類型VB支持的數(shù)據(jù)類型多達(dá)十一種。表3-1列出了這些數(shù)據(jù)類型的名稱、存儲大小及數(shù)據(jù)的取值范圍。變體型數(shù)據(jù)是VB的缺省數(shù)據(jù)類型,它可以存儲各種類型的數(shù)據(jù)。表4T數(shù)據(jù)類型存儲大小取值范圍Integer整數(shù)2Byte-32768?32767Long長整數(shù)4Byte-2147483648?2147483647Single單精度數(shù)4Byte-3.402823E38?-1.401298E-451.401298E-45?3.402823E38Double雙精度數(shù)8Byte-1.79769313486232E308?-4.94065645841247E-24;4.94065645841247E-324?1.79769313486232E308Byte字節(jié)型數(shù)1Byte0?255Boolean邏輯型數(shù)2ByteTrue或FalseString字符串型數(shù)(變長)lOByte+中長度0?約20億個字符String字符串型數(shù)(定長)串長度1?約65400個字符Date日期型數(shù)8Byte100年1月1日?9999年12月31日Currency貨幣型數(shù)8Byte-922,337,203,685,447.5808?922,337,203,685,447.5807Object對象型數(shù)4Byte任何對象引用Variant變體型數(shù)>=16Byte數(shù)值型可達(dá)Double型的范圍;字符型可達(dá)變長字符串型的串長度VB之所以提供多種數(shù)據(jù)類型的根本目的就是為了提高程序代碼的運(yùn)行效率。不論是常量還是變量,如果不加說明,系統(tǒng)均按變體型數(shù)據(jù)處理。表面上看,對于編程者似乎要簡單一些,但實(shí)質(zhì)上,由于在機(jī)器內(nèi)部,以定點(diǎn)數(shù)形式表示的整數(shù)和以浮點(diǎn)數(shù)形式表示的實(shí)型數(shù)不僅處理的效率差別很大,而且由于數(shù)制轉(zhuǎn)換(計算機(jī)內(nèi)部采用的是二進(jìn)制數(shù))可能帶來較大的誤差。另外,由上表還可看出,采用變體型數(shù)所占用的內(nèi)存也要比其他類型更多。所以在程序中,合理地選擇使用數(shù)據(jù)類型非常重要。由于VB處理整型數(shù)的速度最快,且沒有數(shù)制轉(zhuǎn)換誤差,所以可以使用整型數(shù)的地方都應(yīng)盡量使用整型數(shù):在進(jìn)行帶小數(shù)點(diǎn)的數(shù)據(jù)運(yùn)算時,常常會因數(shù)制轉(zhuǎn)換而產(chǎn)生不精確的運(yùn)算結(jié)果,所以如需要比較高的數(shù)據(jù)計算精確度,應(yīng)使用雙精度數(shù)據(jù)類型:貨幣類型的計算則比雙精度數(shù)和單精度數(shù)的計算精度更高。由于不同類型的數(shù)據(jù)在計算機(jī)內(nèi)部存放的形式及占用的存儲單元個數(shù)不同,因此,各自能夠表示的數(shù)據(jù)范圍也有所不同。如果需要處理的數(shù)值超出了相應(yīng)數(shù)據(jù)類型數(shù)據(jù)的表示范圍,將產(chǎn)生“數(shù)據(jù)溢出”錯誤。常量.數(shù)值常量一般的數(shù)值常量由正負(fù)號、數(shù)字和小數(shù)點(diǎn)組成,正數(shù)的正號可以省略。在VB程序中,除人們最常用的十進(jìn)制數(shù)外,還可以使用八進(jìn)制數(shù)和十六進(jìn)制數(shù)。十進(jìn)制數(shù)的表示形式與人們?nèi)粘J褂玫男问交鞠嗤2粠?shù)點(diǎn)的數(shù)稱為“整數(shù)二VB中的整數(shù)又分為整數(shù)和長整數(shù)。從表3-1可知,整數(shù)用2個字節(jié)存放,表示范圍較?。婚L整數(shù)用4個字節(jié)存放,表示的范圍較大。帶小數(shù)點(diǎn)的數(shù)稱為“實(shí)型數(shù)”或“浮點(diǎn)數(shù)”。根據(jù)占用的存儲量的大小,又分為單精度數(shù)和雙精度數(shù)。由于雙精度數(shù)占用的存儲量比單精度數(shù)大一倍,所以不僅表示的數(shù)據(jù)范圍要比單精度數(shù)大得多(見上節(jié)),數(shù)據(jù)的有效數(shù)字也要多得多。在計算機(jī)程序中,很大或很小的數(shù)通常以指數(shù)形式表示,10的寨次則以字母e或字母d代表。也就是說浮點(diǎn)數(shù)值可表示為mmmEeee或mmmOeee兩種形式,其中mmm是尾數(shù),而eee是指數(shù)。用D將數(shù)值文字中的尾數(shù)部分和指數(shù)部分隔開,系統(tǒng)將把該值作為雙精度數(shù)據(jù)類型來處理。同樣,用這種方式使用E,系統(tǒng)也會把該值作為單精度數(shù)據(jù)類型來處理。例如:123 -22735742(整數(shù))1758624 -3765410 (長整數(shù))123.4 -752.678 0.000352 -0.01234 1.234E5 -9.654E61.234E-5-9.654E-6(單精度數(shù))3.1415926535 -5732.12345 3.14159265D8-8.573264907D-15(雙精度數(shù))VB中允許使用八進(jìn)制數(shù)和十六進(jìn)數(shù),它們都是無符號整數(shù)。八進(jìn)制數(shù)的表示方法是在數(shù)字前面加“&O”;十六進(jìn)制數(shù)的表示方法是在數(shù)字前面加“&H”。例如:&O137 表示這是一個八進(jìn)制數(shù)137,它相當(dāng)于十進(jìn)制數(shù)95;&H137 表示這是一個十六進(jìn)制數(shù)137,它相當(dāng)于十進(jìn)制數(shù)311。.字符常量把一串字符用引號括起來,就構(gòu)成一個字符常量。例如:"VisualBasic"、"Howareyou!"、"aB"等都是合法的字符常量。字符常量容納的字符數(shù)(長度),最多可達(dá)65535個。.邏輯型常量邏輯型常量只有兩個取值:True(真)和False(假入.日期常量日期型常量的一般表示形式是:mm/dd/yyyy,如1998年6月15日可表示為:#6/15/1998#注意:為了與字符串型常量相區(qū)分,日期常量要用“#”括起來。.符號常量常量在程序中也可用符號來表示。以符號形式表示的常量稱為“符號常量”。代表常量的符號稱作“常量名”。常量名是一個長度不超過255個字符、只能由字母、數(shù)字和下劃線組成且首字符必須是字母的字符串。常量名中的字母不區(qū)分大小寫。如在程序中使用自定義符號常量,則應(yīng)用Const語句先行說明。Const語句的形式是:[PublicIPrivate]Const〈常量名〉[Astype]=<數(shù)值>Public選項(xiàng),只能用在標(biāo)準(zhǔn)模塊中用以說明可在整個應(yīng)用程序中使用的常量;Private選項(xiàng)則可用于說明在模塊范圍內(nèi)使用的常量,它們均不能在過程中使用。Type用于指定常量的數(shù)據(jù)類型。另外,也可以在說明時,通過數(shù)據(jù)類型符號規(guī)定常量的類型。例如:ConstTaxAsSingle=1.05'Tax是單精度數(shù)值常量PublicConstCountry$="CHINA",Fax_Num&=36134484'$和&是用于說明數(shù)據(jù)類型的符號,Country是字符串型常量,F(xiàn)ax_Num是長整型常量有關(guān)數(shù)據(jù)類型符號詳見下1節(jié)。VB還在其內(nèi)部定義了許多符號常量,在使用程序代碼為窗體及各種控件的某些屬性賦予新的取值時,就可以直接使用相應(yīng)的內(nèi)置符號常量。通過VB幫助即可查找和使用他們。3.3.3變量.變量名及類型說明變量名的命名規(guī)則是:首字符必須是字母;長度不超過255個字符;在作用域內(nèi)必須唯一;作為變量名的字符串內(nèi)不得包括點(diǎn)號和用于類型說明的字符%,&、!、#、@、$?有時為了提高程序的可讀性,可在變量名之前加匕一個約定的前綴,用于表示變量的數(shù)據(jù)類型。約定的前綴見表3-2。表3-2數(shù)據(jù)類型前綴數(shù)據(jù)類型前綴整型int長整型Ing單精度型sng雙精度型dbl邏輯型bln貨幣型cur日期型dt字串型str變體型vnt字節(jié)型byt2.變量作用域與變量說明語句未加說明類型而使用的變量,系統(tǒng)一律按變體型處理。由于變體型變量要占用較多的內(nèi)存,并影響程序運(yùn)行的效率,所以,變量在使用之前,最好用變量說明語句說明其類型。根據(jù)變量說明方式的不同,變量的有效作用范圍也不同。變量的有效作用范圍稱為變量作用域。1)變量作用域VB有三個作用域等級:等級范圍局部在過程中說明,僅在說明它的過程中有效窗體/模塊在窗體或模塊中說明,在定義該變量的模塊或窗體的所有過程內(nèi)均有效全局(公有)在模塊或窗體中說明,在工程內(nèi)的所有過程中都有效2)變量說明語句可使用四種說明語句說明變量的類型:Dim〈變量名〉A(chǔ)s〈類型>[,〈變量名〉A(chǔ)s〈類型Public(變量名〉A(chǔ)s(類型>[,<變量名〉A(chǔ)sC類型>]…Private〈變量名〉A(chǔ)s〈類型>[,(變量名〉A(chǔ)s<類型>]...Static〈變量名〉A(chǔ)s〈類型>[,〈變量名〉A(chǔ)s〈類型>]...其中Public語句用于說明全局變量,Private語句用于說明窗體/模塊級變量,,它們都只能用在模塊的通用部分;Static用于說明過程級的靜態(tài)變量,而Dim語句既可用于說明模塊級的變量(在模塊的通用部分使用),也可用于說明過程級的變量(在過程內(nèi)使用),因此較為常用。有關(guān)靜態(tài)變量的使用將在第7章述及。模塊級和公有級的變量應(yīng)在代碼窗口中的(通用)(聲明)部分進(jìn)行說明。例如:PrivateCountAsInteger或PublicNameAsString,ageAsInteger局部變量僅在使用它的過程中說明:PrivateSubCommandl_Click()
DimCountAsIntegerEndSub在用Dim語句說明一個變量后,系統(tǒng)自動為該變量賦予一個初始值。若變量是數(shù)值型的,則初始值為0;字符串型的,則初始值為空串;邏輯型變量的初始值為False?另外,系統(tǒng)還會自動轉(zhuǎn)換在代碼行中輸入的變量名以與說明的變量名相匹配。例如說明語句是:DimMyCountryAsString在程序中輸入:mycountry="Nanjing”VB將其自動轉(zhuǎn)換成:MyCountry="Nanjing”VB的這種功能,可幫助使用者輸入和使用正確的變量名。在變量類型說明語句中,必須對每個需要說明的變量逐個使用AsType說明其類型,未加說明的變量將按變體類型處理,例如語句:Dima,bAsInteger中的a是變體類型,b是整型。使用變量說明語句說明變量的數(shù)據(jù)類型,通常稱為“顯式說明”,也可以采用在變量名后加上一個用于規(guī)定變量類型的說明字符,來規(guī)定變量的類型,這種方法稱為“隱式說明”。VB規(guī)定的類型說明字符見表3-3o表3?3說明字符示例意義%X%表示X是整型變量&X&表示X是長整型變量!x!表示X是單精度變量*X#表示X是雙精度變量@x@表示X是貨幣型變量$x$表示X是字符型變量例如在過程:PrivatesubForm_Click()k&=1Country$="china”Printk,CountryEndSub中的變量k和Country被隱式說明為長整型和字符串型。類型說明字符也適用于常量。按照缺省規(guī)定,字符串型變量的長度是可變的,也就是說通過對字符中賦予新的數(shù)據(jù),它的長度可增可減。但也可以將字符串變量說明為具有固定長度。方法是:Dim〈變量名〉A(chǔ)sString*size例如,為了聲明一個長度為50字符的字符串,可用下列語句:DimEmpNameAsString*50如果賦給字符串變量的字符少于50個,則用空格將EmpName的不足部分填滿。如果賦予字符串的長度太長,則VisualBasic會直接截去超出部分的字符。因?yàn)槎ㄩL字符串用空格填充尾部多余的空間,所以在處理定長字符串時常常需要使用后面將耍述及的用于刪除空格的Trim和RTrim函數(shù)。標(biāo)準(zhǔn)模塊中的定長字符串變量可說明為Public或Private0在窗體和類模塊中,則必須將定長字符串變量說明為PrivateoOptionExplicit語句在模塊中使用OptionExplicit語句,系統(tǒng)將檢查模塊中所有未加顯式說明的變量,一旦發(fā)現(xiàn)有這樣的變量存在,就會產(chǎn)生一個出錯信息,提示使用者改正錯誤。例如:變量curSalary用于存放一個人用于計稅的工資數(shù)據(jù),若不使用Dim語句進(jìn)行說明,一旦在程序中因?yàn)槭韬?,變量名錯輸入為curSalry,就會得到錯誤的結(jié)果。但使用了OptionExplicit語句,就可以通過系統(tǒng)自動檢測發(fā)現(xiàn)并排除類似的錯誤。OptionExplicit語句可使用以下方法輸入:激活代碼編輯器窗口;從對象列表中選“General”或(通用):從過程列表中選“Declarations”或(聲明);在代碼編輯欄中輸入:OptionExplicit3.4運(yùn)算符與表達(dá)式VB中的運(yùn)算符和表達(dá)式可分為算術(shù)運(yùn)算符與算術(shù)表達(dá)式、關(guān)系運(yùn)算符與關(guān)系表達(dá)式和邏輯運(yùn)算符與邏輯表達(dá)式三類。
算術(shù)運(yùn)算符與算術(shù)表達(dá)式.算術(shù)運(yùn)算符VB的算術(shù)運(yùn)算符有以下幾種:人 乘方運(yùn)算符TOC\o"1-5"\h\z+ 加- 減(負(fù)號)* 乘/ 除例:8\6結(jié)果等于例:8\6結(jié)果等于1例:8Mod6結(jié)果等于2例:"Visual"&"Basic"結(jié)果是Mod 取余運(yùn)算& 字符串連接運(yùn)算VisualBasic算術(shù)運(yùn)算符的運(yùn)算次序?yàn)椋喊薴-(負(fù)號)f*和/f\(整除)fModf+和-f&2.算術(shù)表達(dá)式把常量、變量等運(yùn)算元素用算術(shù)運(yùn)算符連接起來的式子稱作“算術(shù)表達(dá)式:在算術(shù)表達(dá)式中,可以使用圓括號來改變運(yùn)算次序。例如:a*b/(c*d)3.14159265*rA2等都是合法的算術(shù)表達(dá)式。帶有括號的算術(shù)表達(dá)式在運(yùn)算時將優(yōu)先進(jìn)行括號內(nèi)的運(yùn)算。3.4.2關(guān)系運(yùn)算符與關(guān)系表達(dá)式關(guān)系運(yùn)算用于對兩個數(shù)據(jù)進(jìn)行比較,比較結(jié)果為邏輯值"True”或“False”。.關(guān)系運(yùn)算符VB常用的關(guān)系運(yùn)算符如下:運(yùn)算符功能<小于<=小于等于>大于>=大于等于<>不等于=等」Is用來比較兩個對象的引用變量.關(guān)系表達(dá)式關(guān)系表達(dá)式就是用關(guān)系運(yùn)算符把兩個比較對象連接起來的式子。比較對象可以是變量、常量和算術(shù)表達(dá)式。例如:a<32x+y>=z/2b$<>"Basic”object1Isobject2等都是合法的關(guān)系表達(dá)式。關(guān)系表達(dá)式的運(yùn)算是采用“按值比較”的方法,即先求出運(yùn)算符兩邊的“值”,若是變量,則取其當(dāng)前值,如果兩端的值可滿足關(guān)系運(yùn)算符,則結(jié)果為“True”,否則為“False”。字符型數(shù)據(jù)的關(guān)系運(yùn)算是依照字符的ASCII代碼,自左至右按照“逐個比較、遇大則大、長大短小,完全相同,才是相等”的原則進(jìn)行。例如:“aBcd”>"abc”的運(yùn)算結(jié)果是False,因?yàn)樽帜浮癇”的ASCII代碼小于字母“b”。3.43 邏輯運(yùn)算符與邏輯表達(dá)式邏輯運(yùn)算是對邏輯值進(jìn)行的運(yùn)算。.邏輯運(yùn)算符VB常用的邏輯運(yùn)算符有:NOT邏輯非例:若2=1>此則NOTa=FalseAND邏輯與例:若a、b均為邏輯值,則只有a、b同為True時aANDb為TrueOR邏輯或例:若a、b均為邏輯值,只要a、b中有一個為True時aORb為TrueXOR邏輯異或例:若a、b均為邏輯值,a、b中只有一個為True時aXORb為True邏輯運(yùn)算的優(yōu)先次序是:NOT-ANDfORfXOR.邏輯表達(dá)式邏輯表達(dá)式是用邏輯運(yùn)算符把邏輯量連接起來的式子。例如:a>=2*3.14159*rANDx<>5ORNOTb(設(shè)b為邏輯變量)x>2ORText1.Text="Microsoft"等都是合法的邏輯表達(dá)式。邏輯表達(dá)式主要用于表示一些復(fù)雜的判斷條件。3.4.4 運(yùn)算規(guī)則在表達(dá)式中,當(dāng)運(yùn)算符不止一種時,要先處理算術(shù)運(yùn)算符,接著處理關(guān)系運(yùn)算符,最后處理邏輯運(yùn)算符。而這幾種運(yùn)算符內(nèi)的優(yōu)先次序,則按前面各小節(jié)所列次序進(jìn)行。比如系統(tǒng)在求一個包含有關(guān)系運(yùn)算、算術(shù)運(yùn)算的比較復(fù)雜的邏輯表達(dá)式的值時,將先求算術(shù)表達(dá)式的值、再進(jìn)行關(guān)系運(yùn)算求出關(guān)系表達(dá)式的值,最后進(jìn)行邏輯運(yùn)算。當(dāng)然,如果表達(dá)式包含有括號時,最內(nèi)層的括號將最優(yōu)先處理。在運(yùn)算時,如果進(jìn)行運(yùn)算的兩個運(yùn)算時象的類型相同,它們的運(yùn)算結(jié)果也將是同一類型。例如執(zhí)行下面的代碼:DimxAsInteger,yAsIntegerx=324:y=324printx*y系統(tǒng)會給出“數(shù)據(jù)溢出”的出錯提示,其原因就在于x與y相乘時,結(jié)果已超出了整數(shù)可表示的范圍:如果不同數(shù)據(jù)類型的數(shù)據(jù)進(jìn)行運(yùn)算,結(jié)果的類型為兩個運(yùn)算對象中存儲長度較長的那個對象的類型。比如一個整型數(shù)與一個長整型數(shù)進(jìn)行運(yùn)算,結(jié)果就是長整型:一個整型數(shù)與一個單精度數(shù)進(jìn)行運(yùn)算,結(jié)果為單精度型,但一個Long型數(shù)與一個Single型數(shù)運(yùn)算,結(jié)果則為Double類型,依次類推。上例中若把x或y任一個說明為長整型,則計算可以正常進(jìn)行。注意:除法運(yùn)算是個例外,不論除數(shù)與被除數(shù)類型如何,結(jié)果總是雙精度型。3.5VisualBasic公共函數(shù)所謂公共函數(shù)是由系統(tǒng)提供的,可在任何一個VB程序中隨時使用的程序段。每個程序段用于進(jìn)行某個特定的運(yùn)算或處理,如求某個數(shù)的平方根,把某個數(shù)據(jù)類型的數(shù)據(jù)變換成另一種類型等等。每個函數(shù)都有系統(tǒng)規(guī)定的函數(shù)名。例如:Sqr就是求平方根函數(shù)的函數(shù)名。使用函數(shù)稱為函數(shù)調(diào)用。函數(shù)調(diào)用形式是:〈函數(shù)名〉(pl,p2,...)其中,pl,p2,...是調(diào)用函數(shù)時的自變量序列,自變量的個數(shù)、排列次序和數(shù)據(jù)類型,應(yīng)和函數(shù)規(guī)定的參數(shù)相同。例如,要求2.5的平方根,只要在程序中的算術(shù)表達(dá)式中寫上Sqr(2.5)即可。在一個包含有函數(shù)的表達(dá)式進(jìn)行運(yùn)算時,系統(tǒng)將優(yōu)先進(jìn)行函數(shù)調(diào)用(運(yùn)算)。公共函數(shù)是VB的重要組成部分。利用VB提供的幫助功能,可以方便地獲取各個函數(shù)的功能和用法,請讀者自行練習(xí)。算術(shù)函數(shù)表3-4是VB常用的算術(shù)函數(shù)。表34函數(shù)名功能Sqr(x)求平方根值,x20Log(x)求自然對數(shù),x>0Exp(x)求以e為底的累值,即求e*Abs(x)求X的絕對值Hex[$](x)求X的十六進(jìn)制數(shù)值Oct[$](x)求X的八進(jìn)制數(shù)值Sgn(x)求x的符號,當(dāng)x>0,返回1;x=0,返回0;x<0,返回TRnd[(x)]產(chǎn)生一個在(0,1)區(qū)間均勻分布的隨機(jī)數(shù),若x=0,則給出的是上一次利用本函數(shù)產(chǎn)生的隨機(jī)數(shù)Sin(x)求X的正弦值,X單位是弧度
Cos(x)求X的余弦值,X單位是弧度Tan(x)求X的正切值,X單位是弧度Atn(x)求X的反正切值,函數(shù)返回的是主值區(qū)間的弧度值字符函數(shù)表3-5是VB常用的字符函數(shù)。表3-5函數(shù)名功能Len(x)求X字符串的長度(字符個數(shù))Left[$](x,n)從X字符串左邊起取n個字符Right[$](x,n)從x字符串右邊起取n個字符Mid[$](x,nl,n2)從x字符串左邊第nl個位置開始向右起取n2個字符Ucase[$](x)將x字符串中所有小寫字符改為大寫Lease[$](x)將X字符串中所有大寫字符改為小寫Ltrim[$](x)去掉X左邊的空格Rtrim[$](x)去掉X右邊的空格Instr([n,]x,"字符”)從x的第n個位置起查找給定的字符,返回該字符在x中的位置,n的缺省值為1String⑶(nJ字符”)得到由n個給定字符組成的一個字符串Space[$](n)得到n個空格注意:函數(shù)名中用方括號括起來的$可有可無。轉(zhuǎn)換函數(shù)表3-6是VB常用的轉(zhuǎn)換函數(shù)。表3-6函數(shù)名功能Str[$](x)將數(shù)值數(shù)據(jù)X轉(zhuǎn)換成字符串(含符號位)
Vai(x)將字符串X中的數(shù)字轉(zhuǎn)換成數(shù)值Chr[$](x)返回以X為ASCII代碼值的字符Asc(x)給出字符x的ASCII代碼值(十進(jìn)制數(shù))Cint(x)將數(shù)值型數(shù)據(jù)X的小數(shù)部分四舍五入取整Fix(x)將數(shù)值型數(shù)據(jù)x的小數(shù)部分舍去Int(x)取小于等于X的最大整數(shù)CBool(x)將任何有效的字符串或數(shù)值轉(zhuǎn)換成邏輯型CByte(x)將。至255之間的數(shù)值轉(zhuǎn)換為字節(jié)型CDate(x)將有效的日期字符串轉(zhuǎn)換成日期Ccur(x)將數(shù)值型數(shù)據(jù)X轉(zhuǎn)換成貨幣型數(shù)據(jù)CLng(x)將數(shù)值型數(shù)據(jù)X轉(zhuǎn)換成長整數(shù)型,小數(shù)部分四舍五入CDbl(x)將數(shù)值型數(shù)據(jù)X轉(zhuǎn)換成雙精度數(shù)CSng(x)將數(shù)值型數(shù)據(jù)X轉(zhuǎn)換成單精度型Cvar(x)將數(shù)值型數(shù)據(jù)X轉(zhuǎn)換成變體型,X若為數(shù)值型則取值范圍同雙精度數(shù);若為字符型則取值范圍同字符型數(shù)CStr(x)將X轉(zhuǎn)換成字符串型,若X為數(shù)值型,則轉(zhuǎn)為數(shù)字字符串(對于正數(shù)符號位不予保留)日期與時間函數(shù)表3-7是VB提供的與日期和時間有關(guān)的函數(shù)。表3-7函數(shù)名功能Date[$]返回系統(tǒng)當(dāng)前的日期Time⑶返回系統(tǒng)當(dāng)前的時間Now返回系統(tǒng)當(dāng)前的日期和時間Year(x)X應(yīng)為一有效的II期變量、常量或字符表達(dá)式本函數(shù)返回一個表示X的年號的整數(shù)Month(x)X應(yīng)為一有效的日期變量、常量或字符表達(dá)式本函數(shù)返回一個表示X的月份的整數(shù)Day(x)X應(yīng)為一有效的日期變量、常量或字符表達(dá)式本函數(shù)返回1到31之間的整數(shù),表示是一個月的第幾日Weekday(x[,c])X應(yīng)為一有效的日期變量、常量或字符表達(dá)式c是用于指定星期幾為一個星期第一天的常數(shù),缺省時表示一周的星期天為第一天除過上面列舉的函數(shù)之外,VB還提供了許多用于其他處理的函數(shù)。比如用于輸入與輸出的函數(shù)、用于處理數(shù)組的函數(shù)、用于處理文件操作的函數(shù)等等。這些函數(shù)在任何程序中都可以不需說明直接使用,非常方便。讀者可以通過VB的幫助系統(tǒng)查閱到各種函數(shù)的功能及使用方法的信息。在使用函數(shù)時應(yīng)特別注意以下幾點(diǎn):必須準(zhǔn)確地掌握函數(shù)的功能;必須使用正確的函數(shù)名;必須注意函數(shù)及各個自變量的數(shù)據(jù)類型、各個自變量的意義和允許的數(shù)值范圍;3.5.5格式化函數(shù)Format$格式化函數(shù)Format[$]是專門用于將數(shù)值、日期和時間數(shù)據(jù)按指定格式輸出的函數(shù)。它的一般形式是:Format[$]((算術(shù)表達(dá)式>,fmt$)式中的fmt$是用于格式控制的字符串。格式控制字符有:#、0、.、,、樂$、-、+、(、)、E+、E~其中,#、0是數(shù)位控制符;.、,是標(biāo)點(diǎn)控制符;E+和E-是指數(shù)輸出控制符;其它是符號控制符。設(shè)雙精度型變量x=123456.78,下面是采用不同格式字符組成的格式控制字串輸出x的示例:PrintFormat(x,"00000000.0000")PrintFormat$(x,"############")PrintFormat$(x,"###,##禮###.#")PrintFormat$(x,"########十)若執(zhí)行上述代碼,窗體顯示為:00123456.7800123457123,456.812345678%第一行由于x的位數(shù)少于控制字符串的位數(shù),所以自動在前后補(bǔ)0:第二行由于x的位數(shù)少于控制字符串的位數(shù),但無小數(shù)點(diǎn),所以先四舍五入取整后輸出(左對齊,不留空格);第三行增加了千分位分隔符和小數(shù)點(diǎn),使x四舍五入到一位小數(shù)后輸出;第四行則強(qiáng)制以百分?jǐn)?shù)形式輸出(x乘100后再加上百分號)。其它控制字符的作用及用法,讀者可自行練習(xí)。有關(guān)日期數(shù)據(jù)的格式控制字符及用法,也請參閱VB手冊或隨機(jī)幫助文檔。Format函數(shù)僅用于控制數(shù)據(jù)的外部輸出形式,不會改變數(shù)據(jù)在計算機(jī)內(nèi)部的存儲形式。習(xí)題.如果編寫的過程要被多個窗體及其對象調(diào)用,應(yīng)將這些過程放在哪一類模塊中?A.窗體模塊 B.標(biāo)準(zhǔn)模塊 C.工程D.類模塊.事件過程與通用過程的主要區(qū)別是什么?.通用過程只能存在于標(biāo)準(zhǔn)模塊中,這種說法對嗎?.VisualBasic有那些數(shù)據(jù)類型?.字符串型常量和日期型常量在使用時有何區(qū)別?下列常量中那些是字符串型常量,那些是日期型常量?那些什么也不是?A.''Iamastudent."B."江蘇南京"C.#02/25/1999#D.#January1,1993#E."02/25/1999#F.#January1,1993"6.下列符號名中那些是VB合法的變量名?A.blnFragB._a5bC.IngNumD.Area_TriangleE.User&InputF.5Name.變量作用域包括幾個等級?說明的方式有何區(qū)別?.寫出下面數(shù)學(xué)式對應(yīng)的算術(shù)表達(dá)式。a,cb+一d(axby)(ax-by)(axby)(ax-by)ex+sin3xln(y+cos2x)exy+tan"z+cos3x
ln(——1 L)x4-y-za+b
a-b
abca+b
a-b
abc(d+i)y(孫了A+B/A-BABC/(D+l)*YXKA5.將下面的條件用VisualBasic的邏輯表達(dá)式表示:X+Y小于10且X-Y要大于0oX,Y都是正整數(shù)或都是負(fù)整數(shù)A、B之一為零但不得同時為零C1+C2+C3大于等于255或C1與C2分別大于90且C3大于80. 求下列表達(dá)式的運(yùn)算結(jié)果:Mid(4tVisualBasic”,1,12)=RightC'ProgrammingLanguageVisualBasic”[2)“ABCRG">="abcde”Int(134.69)>=Cint(134.69)78.9/32.77<=97.5/43.87And-45.4>-4.98Str(32.345)=Cstr(32.345)12.下列語句代碼那一些可正常執(zhí)行(正常執(zhí)行是指系統(tǒng)不給出出錯提示)?Print32765+3Print5+7=14Print256/128Print"14”+32Print1114"&3213.VisualBasic只有求自然對數(shù)的函數(shù)Log(x),如果計算式中需要使用常用對數(shù)或以2為底的對數(shù),應(yīng)如何處理?(提示:使用換底公式)14.執(zhí)行語句代碼PrintFormat(7543.568,"##,##0.00"),以下答案中那一個是正確結(jié)果?A.7543.57B.7,543.56 C,7,543.57 D.7,543.564算法基礎(chǔ)及VisualBasic基本語
句算法及程序設(shè)計基礎(chǔ)如前所述,VB應(yīng)用程序主要由用戶界面和相關(guān)的程序代碼組成。在VB應(yīng)用程序中,代碼被組織成一個個的過程。但不論是事件過程,還是通用過程都是由一系列的操作規(guī)則和對操作對象的說明組成的,他們不僅規(guī)定了本過程要使用那些變量或常量,也說明了他們各自的數(shù)據(jù)類型、作用域等等,而且規(guī)定了本過程將要實(shí)現(xiàn)的各種操作及處理,也就是說,當(dāng)一個過程被激活時,通過過程中的代碼,計算機(jī)將知道要做什么(處理對象)和怎么做(操作步驟)。被包含在窗體或標(biāo)準(zhǔn)模塊中的一個個過程有機(jī)地組合在一起,就構(gòu)成一個完整的應(yīng)用程序。就一個具體的應(yīng)用而言,總是要求它能解決特定的問題,達(dá)到預(yù)定的目的,換句話說,就是要保證程序的“正確性”和“可行性”。因此,在設(shè)計程序前,根據(jù)實(shí)際問題的特點(diǎn)和需求,再考慮計算機(jī)的工作特性確定解決某個問題所需要的方法和步驟是至關(guān)重要且必不可少的一步。這一步驟,通常稱為“算法設(shè)計”。.算法的概念廣義而言,算法就是解決某個問題或處理某件事的方法和步驟。人們在日常生活和工作中做任何時,都必須遵從一定的章法,才能順利完成。狹義而言,算法是專指用計算機(jī)解決某一問題的方法和步驟。著名計算機(jī)科學(xué)家D.E.Knuth在其《計算機(jī)程序設(shè)計技巧》一書中為算法所下的定義是:“一個算法,就是一個有窮規(guī)則的集合,其中之規(guī)則規(guī)定了一個解決某一特定類型問題的運(yùn)算系列”。計算機(jī)算法可以分為兩大類:一類是數(shù)值計算算法,主要是解決一般數(shù)學(xué)解析方法難以處理的一些數(shù)學(xué)問題,如求解超越方程的根、求定積分、解微分方程等;另一類是非數(shù)值計算算法,如對非數(shù)值信息的排序、查找等。研究解決各種特定類型問題的算法已成為一個稱為“計算方法”的專門學(xué)科。盡管現(xiàn)代電子計算機(jī)功能強(qiáng)大,但其基本部件僅能執(zhí)行諸如數(shù)據(jù)的傳遞(輸入、輸出和取數(shù)、存數(shù)等)、算術(shù)運(yùn)算(加、減、乘、除)、邏輯運(yùn)算(與、非、或等)及比較、判斷與轉(zhuǎn)移等操作。因此,研究如何把一個復(fù)雜的運(yùn)算處理分解成這些簡單的操作組合,也是“計算方法”的重要研究內(nèi)容。對于同一問題的求解,往往可以設(shè)計出多種不同的算法,不同的算法的運(yùn)行效率、占用內(nèi)存量可能有較大的差異,評價一個算法的好壞優(yōu)劣,也有不同的角度和標(biāo)準(zhǔn)。一般而言,主要看算法是否正確、運(yùn)行的效率及占用系統(tǒng)資源的多少等。.算法示例[示例1]求兩個自然數(shù)的最大公約數(shù)的算法.輸入兩個自然數(shù)M、N;.求M除以N的余數(shù)R;.使M=N,即用N代換M;.使N=R,即用R代換N:.若RWO,則重復(fù):執(zhí)行S2、S3、S4(循環(huán)),否則轉(zhuǎn)S6;.輸出M,M即為M和N的最大公約數(shù)。本算法是由古希臘數(shù)學(xué)家歐凡里德提出的,所以又稱為“歐幾里德算法”。算法中的SI、S2、S3…叫作算法步驟,每個算法步驟明確規(guī)定所要進(jìn)行的操作及處理對象的特性(M、N為自然數(shù))。除過算法步驟S5根據(jù)給定條件的滿足與否可改變執(zhí)行的順序之外,各個算法步驟都是依排列的次序順序執(zhí)行的。歐幾里德算法是求兩個自然數(shù)最大公約數(shù)的經(jīng)典算法。感興趣的讀者可隨意設(shè)定兩個自然數(shù)對該算法進(jìn)行測試。[示例2]在N個字符數(shù)據(jù)集合中,查找有無特定的字符串存在。.輸入字符數(shù)據(jù)的個數(shù)N和要查找的數(shù)據(jù)S;.使1=1,I用于計數(shù);.從字符數(shù)據(jù)集合中讀取一個數(shù)據(jù)X;.若X=S,輸出“找至IJS”的信息,算法結(jié)束,否則轉(zhuǎn)S5;.使1=1+1,計數(shù)器計數(shù):.若IWN;則重復(fù)執(zhí)行S3、S4、S5(循環(huán));否則轉(zhuǎn)S7;.輸出“找不到S”信息,算法結(jié)束。本算法也稱為“順序查找算法”,也是在處理非數(shù)值信息時最常用的一種算法。上面的兩個算法示例,前一個是數(shù)值計算算法,后一個則是非數(shù)值計算算法。.算法的特征從上述算法的示例可以看出,作為算法,應(yīng)具備以下特征:1)確定性所謂算法的確定性是指算法的每個步驟都應(yīng)確切無誤,沒有歧義性。2)可行性可行性是指算法的每個步驟都必須是計算機(jī)能夠有效執(zhí)行、可以實(shí)現(xiàn)的,并可得到確定的結(jié)果。3)有窮性一個算法包含的步驟必須是有限的,并在一個合理的時間限度內(nèi)可以執(zhí)行完畢。“有窮”是個相對的概念,隨著計算機(jī)性能的提高,過去使用低速計算機(jī)需要執(zhí)行若干年的算法(相當(dāng)于“無窮”),現(xiàn)在使用高速計算機(jī)也可在較短的時間內(nèi)執(zhí)行完畢,則又相當(dāng)于“有窮”。4)輸入性執(zhí)行算法時,計算機(jī)可從外部取得數(shù)據(jù)。一個算法可以有多個輸入,但也可以沒有輸入(0個輸入),因?yàn)橛嬎銠C(jī)可以自動產(chǎn)生一些必須的數(shù)據(jù)。5)輸出性一個算法必須有1個或多個輸出。計算機(jī)是人們用于“解題”的工具,因此算法必須具備向計算機(jī)外部輸出結(jié)果的步驟,否則該算法將毫無意義。.算法的描述算法可以采用多種方式來表示。比如使用人們的自然語言像英語、漢語等來描述;使用某種代碼符號來描述或者使用特定的圖形來描述等等。由于圖形的描述方法既形象,又直觀,所以得到廣泛的應(yīng)用。用于描述算法的圖形使用較多的是所謂的流程框圖,簡稱流程圖。它是使用規(guī)定的圖形符號來描述算法的。流程圖使用的圖形符號見表4-1.圖4-1和圖4-2分別是上一節(jié)兩個算法示例的流程圖。圖框內(nèi)的文字用于說明具體的操作內(nèi)容。顯而易見,使用流程圖比使用自然語言描
述算法優(yōu)越地多。表4-1圖形符號名稱代表的操作Z_/輸入/輸出數(shù)據(jù)的輸入與輸出處理各種形式的數(shù)據(jù)處理判斷判斷選擇,根據(jù)條件滿足與否選擇不同路徑起止流程的起點(diǎn)與終點(diǎn)特定過程一個定義過的過程 A流程線連接各個圖框,表示執(zhí)行順序O連接點(diǎn)表示與流程圖其他部分相連接圖4-1 圖4-2需要指出的是,算法僅僅提供了解決某類問題可采用的方法和步驟,還必須使用某種計算機(jī)程序設(shè)計語言把算法描述出來。也就是說,要使用某一種程序設(shè)計語言所提供的語言成分,根據(jù)語言的特點(diǎn),并利用語言提供的各種工具和手段,遵照規(guī)定的語法規(guī)則,去實(shí)現(xiàn)算法,這就是所謂的程序編碼。使用VisualBasic開發(fā)應(yīng)用程序也不例外。利用VB的集成開發(fā)環(huán)境設(shè)計的用戶界面主要解決與用戶交流信息(輸入與輸出)和對程序各種執(zhí)行方式的控制(響應(yīng)由用戶操作引發(fā)的各種事件),而具體到解決特定問題或?qū)崿F(xiàn)特定處理的過程,在編碼時,仍然必須依據(jù)一定的算法,或者說要實(shí)現(xiàn)相應(yīng)的算法,所以在學(xué)習(xí)VB時,除了要學(xué)習(xí)VB的各種語言成分的意義、功能、執(zhí)行方式及各種語法規(guī)則外,更重要的是掌握VB語言的特點(diǎn),學(xué)會使用VB實(shí)現(xiàn)各種算法的方法。.基本算法結(jié)構(gòu)前已述及,同一個問題可以設(shè)計出多種不同的算法,依據(jù)不同算法設(shè)計出的程序自然也各不相同。現(xiàn)在人們公認(rèn)的具有“良好風(fēng)格”的程序設(shè)計方法之一是所謂的“結(jié)構(gòu)化程序設(shè)計方法”。其核心是規(guī)定了算法的三種基本結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。理論上已證明,無論多么復(fù)雜的問題,其算法都可表示為這三種基本結(jié)構(gòu)的組合。依照結(jié)構(gòu)化的算法編寫的程序或程序單元(如過程),其結(jié)構(gòu)清晰、易于理解、易于驗(yàn)證其正確性,也易于查錯和排錯。圖4-3是三種基本算法結(jié)構(gòu)的圖形表示。(c2)(c2)圖4-3圖4-3(a)是順序結(jié)構(gòu),其中的每個處理(A和B)順序執(zhí)行。圖4-3(b)是分支結(jié)構(gòu)。其中e為判決條件,進(jìn)入分支結(jié)構(gòu),首先判斷e成立與否,再根據(jù)判斷結(jié)果,選擇執(zhí)行處理A或者處理B后退出。循環(huán)結(jié)構(gòu)又可分為兩類。一類如圖4-3(cl)所示,稱為“當(dāng)型循環(huán)”;另一類如圖4-3(c2)所示,稱為“直到型循環(huán)”。循環(huán)結(jié)構(gòu)中的處理A是要重復(fù)執(zhí)行的操作,叫做“循環(huán)體”;e是控制循環(huán)執(zhí)行的條件。當(dāng)型循環(huán)是“當(dāng)”條件e成立(即為True),就繼續(xù)執(zhí)行A;否則(即條件為False)就結(jié)束循環(huán):而“直到型循環(huán)”是重復(fù)執(zhí)行A,“直到”條件e成立(即為True),循環(huán)結(jié)束。由圖4-3可以看出,三種基本結(jié)構(gòu)的共同特點(diǎn)是:1)只有單一的入口和單一的出口;2)結(jié)構(gòu)中的每個部分都有執(zhí)行到的可能;3)結(jié)構(gòu)內(nèi)不存在永不終止的死循環(huán)。VisualBasic語言完全支持結(jié)構(gòu)化的程序設(shè)計方法,并提供了相應(yīng)的語言成分。賦值語句及InputBox、MsgBox函數(shù)賦值語句.賦值語句的形式賦值語句的一般形式是:var=〈表達(dá)式〉其中var表示某個變量名或?qū)傩悦?。?dāng)系統(tǒng)執(zhí)行一個賦值語句時,將先求出賦值操作符”"右邊表達(dá)式的值,然后再把該值保存到左邊的變量中。這就是所謂的“賦值”。使用賦值語句可使變量或某個對象的某屬性獲得一個新值。例如:x=Thisisaflowernumber%=72Lablel.Text="Filenameis:*Text.Font.Size=12 '改變字號Y=(a+b)/2使用賦值語句還可以獲取一個對象返回的當(dāng)前屬性值。在應(yīng)用程序中,常常需要知道一個對象當(dāng)前的屬性值,以決定下一步要作些什么處理。比如在修改,個文本框的內(nèi)容之前,需要知道當(dāng)前的文本內(nèi)容是什么,使用下面的方法可以獲取一個對象的屬性值:var=pety式中,var是變量名、object是對象名、propety是該對象的某個屬性名。特別注意:屬性也存在數(shù)據(jù)類型,所以在獲取對象的屬性值時,最好使用具有相同數(shù)據(jù)類型的變量。在程序中,賦值語句以及各種操作對象的方法等,都是順序執(zhí)行的。.不同數(shù)據(jù)類型數(shù)據(jù)的賦值如果一個賦值語句左邊變量的數(shù)據(jù)類型與右邊表達(dá)式的數(shù)據(jù)類型不同,系統(tǒng)將視具體情況作出不同的處理:如果變量與表達(dá)式都是數(shù)值類型,系統(tǒng)先求出表達(dá)式的值,在將其轉(zhuǎn)換為變量類型后再賦值:如果變量為字符型,而表達(dá)式為數(shù)值類型(算術(shù)表達(dá)式),則系統(tǒng)將把表達(dá)式的值轉(zhuǎn)換為字符型賦給變量;如果變量為邏輯型,而表達(dá)式為數(shù)值類型,則所有的非0值,系統(tǒng)都轉(zhuǎn)換為True賦給變量,0則轉(zhuǎn)換為False賦給變量;把一個邏輯值Ture賦給一個整型變量,變量的值將為-1;把邏輯值False賦給整型變量,變量的值為0;把一個邏輯值Ture賦給一個字符變量,變量的值將為True;把邏輯值False賦給字符變量,變量的值為False:把一個字符型的數(shù)據(jù)賦給數(shù)值變量,系統(tǒng)將給出數(shù)據(jù)類型不匹配的錯誤提示,并停止執(zhí)行。圖4-4是?個說明不同數(shù)據(jù)類型數(shù)據(jù)賦值方式的簡單程序示例。圖4-4示例程序的變量b、n、s分別被說明為邏輯型、整型與字符型。當(dāng)給邏輯型變量賦以不同的整數(shù)時,程序正常執(zhí)行,只有在給一個整型變量賦以字符型書局時,程序才給出了“類型不匹配”的錯誤信息。InputBox函數(shù)InputBox函數(shù)用來接受用戶通過鍵盤輸入的數(shù)據(jù)。InputBox函數(shù)使用的形式是:V =InputBox(Prompt[,title][,defsult][,x,y][,helpfile,context])式中,V可以是變體變量或字符串型變量,也可以是數(shù)值型變量(若輸入內(nèi)容不可轉(zhuǎn)換成數(shù)值型數(shù)據(jù),將會產(chǎn)生運(yùn)行錯誤)。在調(diào)用InputBox函數(shù)時,屏幕上將產(chǎn)生一個帶有提示信息的對話框,用戶輸入數(shù)據(jù)后按回車鍵或用鼠標(biāo)單擊“0K”按鈕,即可把輸入的數(shù)據(jù)賦給變量;按Esc鍵或單擊“Cancel”按鈕,則返回。值或空串。InputBox函數(shù)的各個參數(shù)的意義如下:Prompt:提示用的文字信息;title:對話框標(biāo)題(字符型),缺省時,為空白;default:顯示在用戶編輯框中的缺省值,缺省時,返回空值;x.y:對話框在屏幕上顯示時的位置,單位是特維,(x,y)是對話框左上角點(diǎn)的坐標(biāo);helpfile,context:幫助文件名及幫助主題號。有本選項(xiàng)時,在對話框中自動增加一個幫助按鈕。請看一個簡單的應(yīng)用示例:PrivateSubCmdlClickODimN_studentAsStringN_student=InputBox("請輸入你的學(xué)號:","程序示例",230001)IfLeft(Nstudent,2)="23"ThenPrint”你是工程系的學(xué)生!"ElsePrint”你不是工程系的學(xué)生!”EndIfEndSub圖4-5是本程序執(zhí)行有InputBox函數(shù)的語句時顯示的畫面。文本框中顯示的是缺省值,使用程序的人也可輸入新的學(xué)號,輸入后單擊“確定”按鈕,程序繼續(xù)執(zhí)行。
圖4-5MsgBox函數(shù)MsgBox函數(shù)用于向用戶發(fā)布提示信息,并要求用戶作出必要的響應(yīng)。MsgBox函數(shù)的形式是:MsgBox(Prompt[,button][,title][,helpfile,context])式中各個參數(shù)的意義如下:Prompt:提示用的文字信息;button:這是一個由4個數(shù)值常量組成的式子,形式為cl+c2+c3+c4,用于決定信息框中按鈕的個數(shù)和類型以及出現(xiàn)在信息框中的圖標(biāo)類型,各個參量的可選值及其功能見表4-2(凡有0值的參量,0值為缺省值):表4-2(a)cl的取值內(nèi)置常量名意義0VbOkOnly只顯示“確定”按鈕1VbOkCancel顯示“確定”和“取消”按鈕2VbAbortRetryIgnore顯示“終止”,“重試”和“忽略”按鈕3VbYesNoCancel顯示“是”,“否”和“取消”按鈕■1VbYesNo顯示“是"和"否"按鈕5VbRetryCancel顯示“重試”和“取消”按鈕表4-2(b)c2的取值內(nèi)置常量名意義16VbCritical顯示關(guān)鍵信息圖標(biāo)Q
32VbQuestion顯示警示疑問圖標(biāo)Q48VbExclamation顯示警告信息圖標(biāo)公64Vblnformation顯示通知信息圖標(biāo)0表4-2(c)c3的取值內(nèi)置常量名意義0vbDefau1tButton1第一個按鈕為缺省按鈕256vbDefaultButton2第二個按鈕為缺省按鈕512vbDefaultButton3第三個按鈕為缺省按鈕表4-2(d)c4的取值內(nèi)置常量名意義0vbApplicationMode1應(yīng)用程序模式,用戶在當(dāng)前應(yīng)用程序繼續(xù)執(zhí)行之前,必須對信息框做出響應(yīng);信息框位于最前面4096VbSystemModel系統(tǒng)模式,所有應(yīng)用程序均掛起,直到用戶響應(yīng)該信息框?yàn)橹箃itle:信息框標(biāo)題(字符型),缺省時,為空白;helpfile,context:幫助文件名及幫助主題號。有本選項(xiàng)時,在信息框中自動增加一個幫助按鈕。MsgBox函數(shù)根據(jù)用戶選擇單擊的按鈕而返|可不同的值:參見表4-3。表4-3按鈕名內(nèi)置常量取值0K(確定)vbOK1Cancel(取消)vbCancel2Abort(終止)vbAbort3Retry(重試)vbRetry4Ignore(忽略)vbIgnore5Yes(是)vbYes6No(否)vbNo7MsgBox函數(shù)有以下兒種使用方法:使用賦值語句。如:提示信息ans=MsgBox("非法數(shù)據(jù)!",48,"提示信息")使用Print方法。例如:PrintMsgBox(、'非法數(shù)據(jù)!",48,"提示信息”)也可以把它等同為一個方法使用。如:MsgBox"非法數(shù)據(jù)!",48,"提示信息” 醫(yī)lx三種方法在執(zhí)行時都可以獲得如圖4-6所示畫面。但第二、三種用法將得不到用戶點(diǎn)擊不同按鈕的返回值(或沒有返回值)。分支結(jié)構(gòu)與分支結(jié)構(gòu)語句分支結(jié)構(gòu)是程序的基本算法結(jié)構(gòu)之一。VB提供了實(shí)現(xiàn)分支結(jié)構(gòu)的相關(guān)語句。If-Then-Else-EndIf結(jié)構(gòu)語句本結(jié)構(gòu)語句的一般形式是:IfeThen[A組語句]Else[B組語句]EndIf本結(jié)構(gòu)語句執(zhí)行過程與圖4-3(b)完全一致。其中e為判決條件,它可以是邏輯變量、關(guān)系表達(dá)式或邏輯表達(dá)式。當(dāng)e的值為True時,就執(zhí)行A組語句,接著執(zhí)行EndIf的下一條語句;否則就執(zhí)行B組語句,接著執(zhí)行EndIf的下一條語句。圖4-3(b)中的算法結(jié)構(gòu),還有多種變形。比如圖4-7和圖4-8的結(jié)構(gòu),前者稱為不對稱分支;后者稱為多分支。
elTrueFalseelTrueFalse圖4-7 圖4-8圖4-7的結(jié)構(gòu)可用以下的結(jié)構(gòu)語句實(shí)現(xiàn):IfeThenA組語句Endif當(dāng)A組語句僅有一個時,圖4-7的結(jié)構(gòu)還可以簡化為:IfeThenv語句〉'例如程序代碼:IfTextl.Text=""Then'當(dāng)文本框中文本為空時,則使文本框成為焦點(diǎn)Textl.SetFocusEndIf就可以簡化為:'當(dāng)文本框中文本為空時,則使文本框成為焦點(diǎn)IfText1.Text=""ThenTextl.SetFocus二者執(zhí)行結(jié)果完全相同。圖4-8的結(jié)構(gòu)則可用下面的結(jié)構(gòu)語句實(shí)現(xiàn):IfelThen '如果el為True則執(zhí)行Al組語句Al組語句Elseife2Then'如果el為False,而e2為True則執(zhí)行A2組語句A2組語句Endif[例4-1]已知三角形三個邊的長度,設(shè)計求此三角形面積的程序。問題分析:設(shè)三角形的三個邊分別為a、b、c,從數(shù)學(xué)上已知,當(dāng)a+b>c且a+c>b且b+c>a時,三角形存在,其面積S=yjp(p-a)(p-b)(p-c)式中:p=(a+b+c)/2算法設(shè)計:根據(jù)問題分析,可得到圖4-9的算法流程圖。用戶界面設(shè)計程序界面主耍由四個文本框和三個命令按鈕組成,五個標(biāo)簽用于說明。a:、b:、c:三個標(biāo)簽后的文本框中輸入三角形邊長數(shù)據(jù),單擊''計算按鈕”,給出計算結(jié)果。如果給出的數(shù)據(jù)構(gòu)不成三角形,則在計算結(jié)果的文本框中給出“數(shù)據(jù)錯誤”的信息。單擊“清除”按鈕將擦去文本框中已有數(shù)據(jù),為下一次計算做準(zhǔn)備。單擊''結(jié)束”按鈕,則關(guān)閉程序。依據(jù)圖4-9的算法,設(shè)計程序代碼如下(用戶界面各元素的屬性設(shè)置略):PrivateSubCommand1_Click()Dima,b,c,p,sAsSinglea=Val(Text1.Text) ,取數(shù)據(jù)ab=Val(Text2.Text) ,取數(shù)據(jù)bc=Val(Text3.Text) ,取數(shù)據(jù)cIfa+b>cAnda+c>bAndb+c>aThen '判別數(shù)據(jù)合法性p=(a+b+c)/2s=Sqr(p*(p-a)*(p-b)*(p-c)) '求三角形面積Text4.Text=CStr(s) ,面積數(shù)據(jù)寫入計算結(jié)果文本框ElseText4.Text="數(shù)據(jù)錯誤” ,數(shù)據(jù)錯誤信息EndIfEndSubPrivateSubCommand2_Click()End,結(jié)束程序EndSubPrivateSubCommand3_Click()Textl.Text= ,清除原有數(shù)據(jù)Text2.Text=Text3.Text=Text4.Text=Text1.Setfocus ,將Text1置為焦點(diǎn)EndSub程序說明:使用文本框接受輸入的數(shù)值型數(shù)據(jù)時,由于文本框的Text屬性是字符串型的,所以使用了轉(zhuǎn)換函數(shù)Val(x)將由文本框輸入的數(shù)據(jù)轉(zhuǎn)換成數(shù)值型;而將計算結(jié)果賦給文本框的Text屬性時,又使用了CStr(x)函數(shù)將數(shù)值型數(shù)據(jù)轉(zhuǎn)換成字符串型。但由于賦值語句執(zhí)行時,也會對不相符合的數(shù)據(jù)類型強(qiáng)制進(jìn)行轉(zhuǎn)換,因此,不使用這些轉(zhuǎn)換函數(shù)程序也能執(zhí)行。事件過程Commandl_Click()中的程序代碼用于實(shí)現(xiàn)圖4-8的算法[例4-2]一個有多個分支的示例程序。圖4-11是本程序的算法流程圖.圖4-11設(shè)用戶界面由兩個文本框和一個命令按鈕及相應(yīng)的用于說明的標(biāo)簽組成(讀者可自行設(shè)計界面及設(shè)置相關(guān)屬性)。從文本框1中輸入測試數(shù)據(jù),單擊命令按鈕,在文本框2中給出測試結(jié)果。程序代碼如下:PrivateSubCommand1_Click()DimxAsIntegerx=Val(Textl.Text)Ifx<1ThenText2.Text="這是小于1的數(shù)”Elselfx<=10ThenText2.Text=”這是1到10之間的數(shù)”ElseText2.Text=”這是大于10的數(shù)”EndIfEndSub4.3.2Select-Case-EndSelect結(jié)構(gòu)語句本結(jié)構(gòu)語句提供了實(shí)現(xiàn)多分支結(jié)構(gòu)的另一種方法。它的一般形式是:SelectCaseeCasec1A組語句Casec2B組語句CaseElsen組語句EndSelect其中,e稱為測試表達(dá)式,可以是算術(shù)表達(dá)式或字符表達(dá)式;cl,c2,…是測試項(xiàng),它們可取三種形式:(1)具體取值:如:3、5,7.2等(當(dāng)測試表達(dá)式是算術(shù)表達(dá)式時);(2)連續(xù)的數(shù)據(jù)范圍:如:8To20;BToH等;(3)滿足某個判決條件:如:Is>20;Is<="P"等。測試項(xiàng)還可以是這三中形式的組合,如4,7To9,Is>30本結(jié)構(gòu)的執(zhí)行方式是:先求測試表達(dá)式的值,接著逐個檢查每個Case語句的測試項(xiàng),如果,測試表達(dá)式的值滿足某個測試項(xiàng)中的任意一個測試內(nèi)容,系統(tǒng)就執(zhí)行該Case語句下的那組語句;若沒有一個測試項(xiàng)滿足要求,就執(zhí)行CaseElse下的語句,本組語句執(zhí)行完后,跟著執(zhí)
行EndSelect語句的下一條語句。例4-2的程序代碼也可使用本結(jié)構(gòu)語句實(shí)現(xiàn):PrivateSubCommand1_Click()DimxAsIntegerx=Val(textl.Text)SelectCasexCaseIs<1Text2.text=”這是小于1的數(shù)”Case1To10Text2.Text=”這是1到10之間的數(shù)”CaseElseText2.Text=”這是大于10的數(shù)”EndSelectEndSub4.4循環(huán)結(jié)構(gòu)與循環(huán)結(jié)構(gòu)語句循環(huán)結(jié)構(gòu)也是程序的基本算法結(jié)構(gòu)。所謂循環(huán),就是重復(fù)地執(zhí)行某些操作。前面已介紹了兩種基本的循環(huán)結(jié)構(gòu):當(dāng)型結(jié)構(gòu)和直到型結(jié)構(gòu)并給出了兩種循環(huán)結(jié)構(gòu)的圖形表示(圖4-3(cl)和圖4-3(c2))?實(shí)際上,每種循環(huán)結(jié)構(gòu)又有兩種不同的執(zhí)行方式。圖4-12和圖4-13分別是當(dāng)型循環(huán)和直到型循不同執(zhí)行方式的流程圖。由圖4-12和圖4-13可以看出,每種循環(huán)結(jié)構(gòu)的兩種形式的區(qū)別是一個是先進(jìn)行判別,再根據(jù)判決結(jié)果執(zhí)行或不執(zhí)行(即結(jié)束循環(huán))循環(huán)體;另一個則是先執(zhí)行一次循環(huán)體,再進(jìn)行判別,以決定是否再次執(zhí)行循環(huán)體。圖4-12圖4-13VB提供了相應(yīng)的語句用于實(shí)現(xiàn)各種類型的循環(huán)。4.4.1Do-Loop循環(huán)結(jié)構(gòu)語句Do-Loop循環(huán)結(jié)構(gòu)語句有四種形式:DoWhilee Do[ExitDo] [ExitDo]Loop LoopWhileeDoUntile Do[ExitDoJ [ExitDo]Loop LoopUntile前兩種形式分別對應(yīng)圖4-11中的兩種當(dāng)型結(jié)構(gòu);后兩種形式則分別對應(yīng)圖4-12中的兩種直到型結(jié)構(gòu)。在Do語句和Loop語句之間的語句即為循環(huán)體語句。循環(huán)體中,可以包括一條或多條ExitD。語句,如果程序執(zhí)行到ExitDo語句時,就會直接退出循環(huán),轉(zhuǎn)而執(zhí)行Loop語句的T'一條語句。ExitDo語句最常用的形式是與If-Then語句想結(jié)合,即:IfeThenExitDo在執(zhí)行循環(huán)體時,如果條件e被滿足,則執(zhí)行ExitD。語句直接退出循環(huán)。
[例4-3]設(shè)計采用歐幾里德算法求解兩個自然數(shù)的最大公約數(shù)的程序。問題分析及界面設(shè)計:本問題的算法前面已經(jīng)給出,界面則可參照例4-1設(shè)計。由于輸入的數(shù)據(jù)M和N要求是自然數(shù),所以在程序中應(yīng)加入對數(shù)據(jù)的合法性進(jìn)行檢驗(yàn)的部分;考慮到程序的應(yīng)用范圍,數(shù)據(jù)類型可選用長整型。本例中使用了求余(數(shù))運(yùn)算符Mod。在使用Mod運(yùn)算符時,切記應(yīng)在它的前后各加一個空格,而不要把用Mod運(yùn)算符連接的兩個變量與運(yùn)算符混在一起,造成錯誤。如求m除以n的余數(shù),應(yīng)寫成:mModn設(shè)計好的用戶界面(圖4-14)及程序代碼如下。圖4-13PrivateSubCommandl_Click()Dimm,n,rAsLongm=Val(Textl.Text)n=Val(Text2.Text)Ifm<lOrn<1ThenText3.Text="數(shù)據(jù)錯誤圖4-13PrivateSubCommandl_Click()Dimm,n,rAsLongm=Val(Textl.Text)n=Val(Text2.Text)Ifm<lOrn<1ThenText3.Text="數(shù)據(jù)錯誤!'取數(shù)據(jù)M'取數(shù)據(jù)N,檢驗(yàn)數(shù)據(jù)合法性ElseDor=mModn'求最大公約數(shù)m=nn=rLoopUntilr=0Text3.Text=CStr(m)EndIfEndSubPrivateSubCommand2_Click()'輸出最大公約數(shù)圖4-15圖4-15Text1.Text= 清除文本框1Text2.Text="",清除文本框2Text3.Text="",清除文本框3Textl.SetFocus,將文本框1設(shè)為焦點(diǎn)EndSubPrivateSubCommand3_Click()End ,結(jié)束程序EndSubFor-Next循環(huán)結(jié)構(gòu)語句如果事先已知循環(huán)次數(shù),則可使用For-Next循環(huán)結(jié)構(gòu)語句。它的一般形式是:Forv=elToe2[Stepe3][ExitFor]Nextv式中,V是循環(huán)控制變量,應(yīng)為整型或單精度型:el、e2和e3是控制循環(huán)的參數(shù)。el為初值、e2為終值、e3為步長。當(dāng)e3=l時,stepe3部分可以省略。For語句和Next語句之間的諸語句即為循環(huán)體。For-Next循環(huán)結(jié)構(gòu)語句的執(zhí)行方式是:執(zhí)行For語句,系統(tǒng)將做以下操作:計算el、e2和e3的值(如果el、e2、e3為算術(shù)表達(dá)式);給v賦初值;進(jìn)行判別:判V的值是否超過e2,即當(dāng)e3>0(步長為正數(shù))時,判v>e2否;當(dāng)e女0(步長為負(fù)數(shù))時,判v<e2否,如果未超過,則執(zhí)行循環(huán)體:如果超過了,則退出循環(huán),去執(zhí)行Next語句的下一語句。執(zhí)行Next語句,系統(tǒng)執(zhí)行卜述操作:v增加一個步長,即執(zhí)行v=v+e3;轉(zhuǎn)而執(zhí)行判別操作。圖4-15是For-Next循環(huán)執(zhí)行方式的流程圖。
注意:三個循環(huán)參數(shù)el、e2和e3中包含的變量如果在循環(huán)體內(nèi)被改變,不會影響循環(huán)的執(zhí)行次數(shù);但循環(huán)控制變量若在循環(huán)體內(nèi)被重新賦值,則循環(huán)次數(shù)有可能發(fā)生變化。For-Next循環(huán)的正常循環(huán)次數(shù)可用下式計算:循環(huán)次數(shù)=Int((e2?el)/e3)+1例如執(zhí)行下面的程序代碼:PrivateSubForm-Click()Fori=1To10Step2Printi;NextiPrintMi=M;iEndSub窗體上將顯示:13579i=U(圖4-16)。它表明循環(huán)一共執(zhí)行了5次,退出循環(huán)時,i的取值為11。Form213579i=11圖4-16山于數(shù)據(jù)在計算機(jī)內(nèi)部均是以二進(jìn)制數(shù)形式存儲的,十進(jìn)制整數(shù)可準(zhǔn)確轉(zhuǎn)換為二進(jìn)制數(shù)形式,而帶小數(shù)點(diǎn)的十進(jìn)制數(shù)在轉(zhuǎn)換為單精度數(shù)或雙精度數(shù)時則多半存在數(shù)制轉(zhuǎn)換誤差。如果使用非整型數(shù)做循環(huán)控制變量,循環(huán)參數(shù)也使用非整型數(shù),那么循環(huán)次數(shù)就有可能發(fā)生意想不到的變化。所以應(yīng)盡可能避免使用非整型數(shù)控制循環(huán)的執(zhí)行。[例4-4]編寫一個程序求1到10這十個數(shù)的和與連乘積。求若干個數(shù)之和或若干個數(shù)的連乘積,可采用“累加”與“累乘”法進(jìn)行。累加法是設(shè)置一個存放和數(shù)的變量,稱為“累加器”,它的初始值設(shè)為0,累加過程通過循環(huán)實(shí)現(xiàn),在循環(huán)體中,和數(shù)與累加器相加后再賦值給累加器;累乘的算法與累加類似,不過設(shè)置的是“累乘器”,它的初始值應(yīng)設(shè)為1,在循環(huán)體內(nèi),乘數(shù)應(yīng)與累乘器相乘。在求乘枳時,應(yīng)注意乘積的大小,設(shè)置適當(dāng)?shù)臄?shù)據(jù)類型。?.程序示例 回回四sum=1+2+3+4+5+6+7+8+9+10=55fact=1*2*3*4*5*6*7*8*9*10:3628800圖4-17OptionExplicitPrivateSubForm_Click()DimIAsInteger,sumAsInteger,factAsLongsum=0 '累加器置0Print,,sum=,,;ForI=1To10sum=sum+I,累加Ifl<10ThenPrintI;"+”;ElsePrintI;"=";EndIfNextIPrintsumfact=1 ,累乘器置1PrintHfact=H;ForI=1To10fact=fact*I,累乘Ifl<10ThenPrintI;“*”;ElsePrintI;“=";EndIfNextIPrintfactEndSub[例4?5]一個從由字母數(shù)字組成的字符串中找出所有大寫字母并逆序輸出的程序。圖4-18圖4-18是本程序的運(yùn)行界面。從一個字符串中找出符合要求的字符是采取對字符串的每一個字符逐個篩選的方法實(shí)現(xiàn)的,本例利用Mid函數(shù)可以從字符串中提取出單個字符,利用循環(huán)控制處理過程,循環(huán)的終值使用Len函數(shù);對于符合要求的字符采用連接運(yùn)算組成新字符串;逆序輸出則是通過從后往前逐個提取字符再連接。程序代碼如下:OptionExplicitPrivateSubCmdl_Click()DimsAsString,dAsString,tAsStringDimiAsIntegerTextl.SetFocuss=Text1.Text ,取輸入字符串Fori=1ToLen(s) ?篩選大寫字符IfMid(s,i,1)>=MAHAndMid(s,i,1)v=Thent=t&Mid(s,i,1)EndIfNextiFori=Len(t)To1Step-1 ,字符逆序排列d=d&Mid(t,i,1)NextiText2.Text=d ,在文本框輸出EndSubPrivateSubCmd2_Click()Textl.Text=M,,Text2.Text=Textl.SetFocusEndSubPrivateSubCmd3_Click()EndEndSubPrivateSubForm_Load(),顯示程序功能的提示信息MsgBox”本程序的功能是將輸入文本框中輸入的字母、數(shù)字字符串中的大寫_字母挑出并按逆序輸出",,"示例程序”EndSub循環(huán)嵌套無論是Do-Loop循環(huán),還是For-Next循環(huán),都可以在大循環(huán)中套小循環(huán)。必須注意:小循環(huán)一定要完整地被包含在大循環(huán)之內(nèi),而不得相互交叉。請看示例:PrivateSubForm_Click()Fori=1To9Forj=1To9Printi;M*n;j;"=";i*j;NextjPrintNextiEndSub執(zhí)行本程序,窗體上將顯示九九乘法表。[例4-6丁一個模擬搖獎的程序。設(shè)有100個人中簽,要從中找出中獎人。由機(jī)器自動隨機(jī)產(chǎn)生1000個1?100間的數(shù)據(jù),第1000個隨機(jī)數(shù)據(jù)即為中獎人的號碼。問題分析:問題的關(guān)鍵是如何產(chǎn)生1?100之間的隨機(jī)整數(shù)。VB提供了一個可以產(chǎn)生0?1之間均勻分布的隨機(jī)數(shù)的隨機(jī)函數(shù)Rnd(x),通過查看VB的幫助可知,Rnd(x)的使用方法是:Rnd[(number)]其中,可選的number參數(shù)是Single或任何有效的數(shù)值表達(dá)式。如果使用參數(shù)且參數(shù)number<0,則得到相同的隨機(jī)數(shù);參數(shù)number>0,則得到隨機(jī)序列的下一個隨機(jī)數(shù);參數(shù)number=0,則返回上一次生成的隨機(jī)數(shù)。不使用number的結(jié)果與number>0相同。也就是說,number的值決定了Rnd生成隨機(jī)數(shù)的方式。對最初給定的種子都會生成相同的數(shù)列,因?yàn)槊恳淮握{(diào)用Rnd函數(shù)都用數(shù)列中的前一個數(shù)作為下一個數(shù)的種子。在調(diào)用Rnd之前,可先使用無參數(shù)的Randomize語句初始化隨機(jī)數(shù)生成器,該生成器具有從系統(tǒng)計時器獲得到的種子。為了生成某個范圍內(nèi)的隨機(jī)整數(shù),可使用以下公式:Int((upperbound-lowerbound+1)*Rnd+lowerbound)這里,upperbound是隨機(jī)整數(shù)范圍的上限,而lowerbound則是隨機(jī)整數(shù)范圍的下限。根據(jù)Rnd(x)函數(shù)的用法,如要產(chǎn)生1?100之間的隨機(jī)整數(shù),使用下面的算術(shù)表達(dá)式即可:Int((100-1+l)*Rnd+1)界面及算法設(shè)計:根據(jù)題意,設(shè)計用戶界面如圖4-19,各對象的屬性設(shè)置略。圖4-19本程序算法比較簡單,使用For-Next循環(huán)產(chǎn)生1000個1?100間的隨機(jī)整數(shù)即可。但為了獲得搖獎的效果,每產(chǎn)生一個隨機(jī)數(shù),再利用一個For-Next循環(huán)起到延時作用,降低數(shù)據(jù)顯示的速度,以便可以較容易地看清數(shù)據(jù)變化的狀況,使用Refresh方法,使文本框中的文本不斷改變。程序代碼如下:PrivateSubCommand1_Click()Dimintranum,i,j,aAsIntegerRandomize,隨機(jī)化語句Fori=1To1000intranum=Int(100*Rnd)+1,產(chǎn)生1?100間隨機(jī)整數(shù)a=0Forj=1To10000 '延時a=a+1NextjText!.Text=CStr(intranum)Text1.Refresh ,文本框刷新NextiText1.Text=CStr(intranum)EndSubPrivateSubCommand2_Click()EndEndSub本程序采用了兩市嵌套的循環(huán),請讀者自行分析循環(huán)執(zhí)行的過程。4.5數(shù)組前面所介紹的變量都是簡單變量,各簡單變量之間相互獨(dú)立,沒有內(nèi)在的聯(lián)系,并與其所在的位置無關(guān)。在處理大量相關(guān)數(shù)據(jù)時,使用簡單變量將會有很大的困難,有時甚至是不可能的。例如,在編寫一個讀入50名學(xué)生的學(xué)號及其考試成績,然后再按照考試成績從高到低的順序把他們的學(xué)號打印出來的程序時,如使用簡單變量來存放這50組數(shù)據(jù),那么,對考試成績進(jìn)行排序處理的過程就會變得十分繁瑣而復(fù)雜。如果使用數(shù)組來存放這些數(shù)據(jù),就會極大地簡化程序的設(shè)計。因此在許多場合,總是使用數(shù)組這樣一個數(shù)據(jù)結(jié)構(gòu)來處理數(shù)據(jù)量大、類型相同且有序排列的數(shù)據(jù).數(shù)組的概念數(shù)組是一組具有相同類型的有序變量的集合。這些變量按照一定的規(guī)則排列,使用一片連續(xù)的存儲單元。數(shù)組可用于存儲成組的有序數(shù)據(jù)。使用數(shù)組就是用一個相同的名字
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)于協(xié)議離婚的撫養(yǎng)權(quán)
- 2024夫妻自愿離婚協(xié)議書
- 貝克痣病因介紹
- 落葉型天皰瘡病因介紹
- 自身免疫性腦炎病因介紹
- 房屋與室內(nèi)環(huán)境檢測技術(shù)-模塊三房屋實(shí)體查驗(yàn)與檢76課件講解
- 中小學(xué)校長2024年度述職報告范文
- 2022-2023學(xué)年天津市和平區(qū)第二南開學(xué)校高二(上)期中語文試卷
- 2024秋新滬科版物理八年級上冊教學(xué)課件 第三章 光的世界 第一節(jié)第1課時 光的直線傳播
- 全國計算機(jī)等級考試一級試題及答案(5套)
- 公司安全事故隱患內(nèi)部舉報、報告獎勵制度
- 歷史常識單選題100道及答案解析
- 會計學(xué)原理智慧樹知到期末考試答案章節(jié)答案2024年西北農(nóng)林科技大學(xué)
- 新時代大學(xué)生勞動教育智慧樹知到期末考試答案章節(jié)答案2024年江西中醫(yī)藥大學(xué)
- 尋方問藥縱橫談智慧樹知到期末考試答案章節(jié)答案2024年浙江中醫(yī)藥大學(xué)
- 中國玉石及玉文化鑒賞智慧樹知到期末考試答案章節(jié)答案2024年同濟(jì)大學(xué)
- 藝術(shù)歌曲大江東去賞析
- 完整版)抗浮錨桿安全技術(shù)交底(總5頁
- 年產(chǎn)60萬噸礦山建設(shè)項(xiàng)目建議書寫作模板
- 代扣服務(wù)協(xié)議樣本
評論
0/150
提交評論