計(jì)算機(jī)二級(jí)大學(xué)復(fù)習(xí)資料從老師那拷來的_第1頁(yè)
計(jì)算機(jī)二級(jí)大學(xué)復(fù)習(xí)資料從老師那拷來的_第2頁(yè)
計(jì)算機(jī)二級(jí)大學(xué)復(fù)習(xí)資料從老師那拷來的_第3頁(yè)
計(jì)算機(jī)二級(jí)大學(xué)復(fù)習(xí)資料從老師那拷來的_第4頁(yè)
計(jì)算機(jī)二級(jí)大學(xué)復(fù)習(xí)資料從老師那拷來的_第5頁(yè)
已閱讀5頁(yè),還剩94頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

3VisualBasic語言基礎(chǔ)VisualBasic程序代碼的組織方式通過上面幾章的學(xué)習(xí),可以看出,一個(gè)VisualBasic程序由窗體界面和程序代碼兩部分組成,通過程序代碼把窗口界面的各個(gè)對(duì)象以及應(yīng)用中的其他元素聯(lián)系在一起。程序代碼部分則由若干被稱為“過程”的代碼行及向系統(tǒng)提供某些信息的說明組成。過程及說明又被組織在所謂的“模塊”之中。將設(shè)計(jì)的過程代碼及相關(guān)說明合理地組織到不同的模塊之中,也就是設(shè)計(jì)代碼的結(jié)構(gòu),在創(chuàng)建VisualBasic應(yīng)用時(shí)是最為重要的一個(gè)步驟。過程所謂“過程”,正如前幾章從示例中看到的,就是具有特定書寫格式、包含若干可被作為一個(gè)整體執(zhí)行的代碼行的一個(gè)代碼組。根據(jù)執(zhí)行的方式,可把“過程”分為“事件過程”和“通用過程”兩類(編者注:VB還有一類“屬性過程”,因超出本書內(nèi)容范圍,不再介紹,感興趣的讀者可自行參閱VB手冊(cè))。.事件過程VisualBasic程序是由事件驅(qū)動(dòng)的,所以事件過程是VisualBasic程序中不可缺少的基本過程。我們?yōu)榇绑w以及窗體上的各種對(duì)象編寫的用來響應(yīng)由用戶或系統(tǒng)引發(fā)的各種事件的代碼行就是“事件過程”。事件過程由VisualBasic中的事件調(diào)用。也就是說,當(dāng)指定的事件發(fā)生時(shí),該過程即會(huì)被激活執(zhí)行。事件過程存儲(chǔ)在被稱為“窗體模塊”的文件中(擴(kuò)展名.FRM),而且在缺省情況下,是“私有的"(Private)。換言之,事件過程在未加特別說明時(shí),僅在該窗體內(nèi)有效。前面列舉的程序示例中的程序代碼都是事件過程。事件過程的代碼框架是由VB系統(tǒng)自動(dòng)提供的,用戶在代碼編輯器窗口可通過單擊“對(duì)象”下拉列表框選擇要編寫代碼的具體對(duì)象,單擊“過程”下拉列表框選擇具體的事件,代碼窗口就給出該對(duì)象響應(yīng)相關(guān)事件的過程框架,在框架內(nèi)加入代碼即可(圖3-1)。在保存窗體時(shí),窗體的外觀會(huì)和編寫的事件代碼一起保存。圖3-1.通用過程一個(gè)應(yīng)用程序可以具有若干個(gè)窗體,每個(gè)窗體又可能擁有相同或不相同的對(duì)象,但是這些不同窗體中的對(duì)象卻有可能引發(fā)相同的操作或需要進(jìn)行某些共同的處理,也就是說,一個(gè)應(yīng)用中的多個(gè)窗體可以共享一些代碼,或者一個(gè)窗體內(nèi)不同的事件過程可共享一些代碼。這些可被共享的代碼構(gòu)成的過程被稱為“通用過程”。通用過程是由事件過程或其它通用過程調(diào)用而執(zhí)行的。這些過程在缺省情況下,是'‘公有的"(Public),也就是說,通用過程可被所有的窗體共享。有關(guān)通用過程的設(shè)計(jì)及調(diào)用,將在第7章詳細(xì)介紹。模塊模塊是VisualBasic用于將不同類型過程代碼組織到一起而提供的一種結(jié)構(gòu)。在VB中具有三種類型的模塊,即窗體模塊、標(biāo)準(zhǔn)模塊和類模塊。1.窗體模塊應(yīng)用程序中的每個(gè)窗體都有一個(gè)相對(duì)應(yīng)的窗體模塊。窗體模塊不僅包含有用于處理發(fā)生在窗體中的各個(gè)對(duì)象的事件過程,而且包含有窗體及窗體中各個(gè)控件對(duì)象的屬性設(shè)置以及相關(guān)的說明。如果某些通用過程僅供本窗體內(nèi)的其他過程共享,則它也可包含在該窗體模塊之中。2.標(biāo)準(zhǔn)模塊在應(yīng)用程序中可被多個(gè)窗體共享的代碼,應(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)模塊中代碼并不限于用于一個(gè)應(yīng)用程序,還可供其他應(yīng)用程序重復(fù)使用。創(chuàng)建標(biāo)準(zhǔn)模塊最簡(jiǎn)便的方法是:?jiǎn)螕艄ぞ邫谏咸砑哟绑w按鈕右側(cè)向下的箭頭,并在出現(xiàn)的選項(xiàng)表中選擇“添加模塊”(圖3-2),然后再在出現(xiàn)的代碼編輯窗口中輸入代碼圖3-23.類模塊類模塊包含用于創(chuàng)建新的對(duì)象類的屬性、方法的定義等。有關(guān)類模塊的詳細(xì)內(nèi)容,感興趣的讀者可參閱有關(guān)的VB手冊(cè)。代碼行的書寫規(guī)則.語句語句是構(gòu)成VisualBasic程序的最基本成份。一個(gè)語句或者用于向系統(tǒng)提供某些必要的信息(如程序中使用的數(shù)據(jù)類型等),或者規(guī)定系統(tǒng)應(yīng)該執(zhí)行的某些操作。語句的一般形式是:〈語句定義符〉[語句體]語句定義符用于規(guī)定語句的功能;語句體則用于提供語句所要說明的具體內(nèi)容或者要執(zhí)行的具體操作。但VisualBasic中一些語句可以沒有語句定義符;有一些語句的語句定義符可以省略。VisualBasic程序是按行書寫的。一個(gè)語句可寫在一行上;也可以通過在行的末尾加上“續(xù)行標(biāo)志”(_:一個(gè)空格加一個(gè)下劃線字符),而分寫在多行上;另外,也可在一個(gè)代碼行上寫入多個(gè)語句,但語句之間需要用冒號(hào)":"分隔。下面是兩種情況的示例:例1,一個(gè)語句分寫在多行上:Dimstudent_nameAsString,student_numberAsString,computerAsInteger,englishAsInteger例2,一行寫多個(gè)語句:x=10:y$="VisualBasic":z=20.書寫規(guī)范語句輸入時(shí),可以不區(qū)分大小寫字母,一個(gè)代碼行輸入完后,按回車鍵,光標(biāo)自動(dòng)移向下一行,同時(shí),系統(tǒng)還會(huì)自動(dòng)把語句中所有“保留字”的第一個(gè)字母改為大寫字母,并在其前后加上空格。比如,Rem是系統(tǒng)保留字,所以不論輸入的是ReM、還是rem或REM等,系統(tǒng)都會(huì)自動(dòng)變換成Rem。VisualBasic的數(shù)據(jù)類型數(shù)據(jù)是程序處理的對(duì)象。VB具有強(qiáng)大的數(shù)據(jù)處理能力,它的具體表現(xiàn)就是VB程序不僅可以處理各種數(shù)制的數(shù),而且具有豐富的數(shù)據(jù)類型。在程序中取值始終保持不變的數(shù)據(jù)稱為“常量”,常量可以是具體的數(shù)值,也可以是專門說明的符號(hào):以符號(hào)形式出現(xiàn)在程序中,且取值可以發(fā)生變化的數(shù)據(jù)稱為“變量”。在程序執(zhí)行前已知,且在程序重復(fù)執(zhí)行時(shí),不發(fā)生變化的量,可把它的取值宜接寫入程序。例如圓周率的值3.14159,在進(jìn)行相關(guān)運(yùn)算時(shí)總是不變的,就可直接寫入程序。變量則是存儲(chǔ)單元的代號(hào)。從計(jì)算機(jī)的外部設(shè)備輸入的數(shù)據(jù),必須送入變量中保存;而在程序執(zhí)行過程中,變量的內(nèi)容可以不斷改變(存入新的數(shù)據(jù))。與數(shù)學(xué)上表示未知數(shù)的“變量”不同,程序中的變量在任一時(shí)刻都

有一個(gè)確定的“值”(即該時(shí)刻所存儲(chǔ)的數(shù)據(jù)),變量在參加運(yùn)算等處理時(shí),是用它所存儲(chǔ)的數(shù)據(jù)進(jìn)行運(yùn)算。數(shù)據(jù)類型VB支持的數(shù)據(jù)類型多達(dá)十一種。表3-1列出了這些數(shù)據(jù)類型的名稱、存儲(chǔ)大小及數(shù)據(jù)的取值范圍。變體型數(shù)據(jù)是VB的缺省數(shù)據(jù)類型,它可以存儲(chǔ)各種類型的數(shù)據(jù)。表4T數(shù)據(jù)類型存儲(chǔ)大小取值范圍Integer整數(shù)2Byte-32768?32767Long長(zhǎng)整數(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ù)(變長(zhǎng))lOByte+中長(zhǎng)度0?約20億個(gè)字符String字符串型數(shù)(定長(zhǎng))串長(zhǎng)度1?約65400個(gè)字符Date日期型數(shù)8Byte100年1月1日?9999年12月31日Currency貨幣型數(shù)8Byte-922,337,203,685,447.5808?922,337,203,685,447.5807Object對(duì)象型數(shù)4Byte任何對(duì)象引用Variant變體型數(shù)>=16Byte數(shù)值型可達(dá)Double型的范圍;字符型可達(dá)變長(zhǎng)字符串型的串長(zhǎng)度VB之所以提供多種數(shù)據(jù)類型的根本目的就是為了提高程序代碼的運(yùn)行效率。不論是常量還是變量,如果不加說明,系統(tǒng)均按變體型數(shù)據(jù)處理。表面上看,對(duì)于編程者似乎要簡(jiǎn)單一些,但實(shí)質(zhì)上,由于在機(jī)器內(nèi)部,以定點(diǎn)數(shù)形式表示的整數(shù)和以浮點(diǎn)數(shù)形式表示的實(shí)型數(shù)不僅處理的效率差別很大,而且由于數(shù)制轉(zhuǎn)換(計(jì)算機(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í),常常會(huì)因數(shù)制轉(zhuǎn)換而產(chǎn)生不精確的運(yùn)算結(jié)果,所以如需要比較高的數(shù)據(jù)計(jì)算精確度,應(yīng)使用雙精度數(shù)據(jù)類型:貨幣類型的計(jì)算則比雙精度數(shù)和單精度數(shù)的計(jì)算精度更高。由于不同類型的數(shù)據(jù)在計(jì)算機(jī)內(nèi)部存放的形式及占用的存儲(chǔ)單元個(gè)數(shù)不同,因此,各自能夠表示的數(shù)據(jù)范圍也有所不同。如果需要處理的數(shù)值超出了相應(yīng)數(shù)據(jù)類型數(shù)據(jù)的表示范圍,將產(chǎn)生“數(shù)據(jù)溢出”錯(cuò)誤。常量.數(shù)值常量一般的數(shù)值常量由正負(fù)號(hào)、數(shù)字和小數(shù)點(diǎn)組成,正數(shù)的正號(hào)可以省略。在VB程序中,除人們最常用的十進(jìn)制數(shù)外,還可以使用八進(jìn)制數(shù)和十六進(jìn)制數(shù)。十進(jìn)制數(shù)的表示形式與人們?nèi)粘J褂玫男问交鞠嗤?。不帶小?shù)點(diǎn)的數(shù)稱為“整數(shù)二VB中的整數(shù)又分為整數(shù)和長(zhǎng)整數(shù)。從表3-1可知,整數(shù)用2個(gè)字節(jié)存放,表示范圍較??;長(zhǎng)整數(shù)用4個(gè)字節(jié)存放,表示的范圍較大。帶小數(shù)點(diǎn)的數(shù)稱為“實(shí)型數(shù)”或“浮點(diǎn)數(shù)”。根據(jù)占用的存儲(chǔ)量的大小,又分為單精度數(shù)和雙精度數(shù)。由于雙精度數(shù)占用的存儲(chǔ)量比單精度數(shù)大一倍,所以不僅表示的數(shù)據(jù)范圍要比單精度數(shù)大得多(見上節(jié)),數(shù)據(jù)的有效數(shù)字也要多得多。在計(jì)算機(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)也會(huì)把該值作為單精度數(shù)據(jù)類型來處理。例如:123 -22735742(整數(shù))1758624 -3765410 (長(zhǎng)整數(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ù),它們都是無符號(hào)整數(shù)。八進(jìn)制數(shù)的表示方法是在數(shù)字前面加“&O”;十六進(jìn)制數(shù)的表示方法是在數(shù)字前面加“&H”。例如:&O137 表示這是一個(gè)八進(jìn)制數(shù)137,它相當(dāng)于十進(jìn)制數(shù)95;&H137 表示這是一個(gè)十六進(jìn)制數(shù)137,它相當(dāng)于十進(jìn)制數(shù)311。.字符常量把一串字符用引號(hào)括起來,就構(gòu)成一個(gè)字符常量。例如:"VisualBasic"、"Howareyou!"、"aB"等都是合法的字符常量。字符常量容納的字符數(shù)(長(zhǎng)度),最多可達(dá)65535個(gè)。.邏輯型常量邏輯型常量只有兩個(gè)取值:True(真)和False(假入.日期常量日期型常量的一般表示形式是:mm/dd/yyyy,如1998年6月15日可表示為:#6/15/1998#注意:為了與字符串型常量相區(qū)分,日期常量要用“#”括起來。.符號(hào)常量常量在程序中也可用符號(hào)來表示。以符號(hào)形式表示的常量稱為“符號(hào)常量”。代表常量的符號(hào)稱作“常量名”。常量名是一個(gè)長(zhǎng)度不超過255個(gè)字符、只能由字母、數(shù)字和下劃線組成且首字符必須是字母的字符串。常量名中的字母不區(qū)分大小寫。如在程序中使用自定義符號(hào)常量,則應(yīng)用Const語句先行說明。Const語句的形式是:[PublicIPrivate]Const〈常量名〉[Astype]=<數(shù)值>Public選項(xiàng),只能用在標(biāo)準(zhǔn)模塊中用以說明可在整個(gè)應(yīng)用程序中使用的常量;Private選項(xiàng)則可用于說明在模塊范圍內(nèi)使用的常量,它們均不能在過程中使用。Type用于指定常量的數(shù)據(jù)類型。另外,也可以在說明時(shí),通過數(shù)據(jù)類型符號(hào)規(guī)定常量的類型。例如:ConstTaxAsSingle=1.05'Tax是單精度數(shù)值常量PublicConstCountry$="CHINA",Fax_Num&=36134484'$和&是用于說明數(shù)據(jù)類型的符號(hào),Country是字符串型常量,F(xiàn)ax_Num是長(zhǎng)整型常量有關(guān)數(shù)據(jù)類型符號(hào)詳見下1節(jié)。VB還在其內(nèi)部定義了許多符號(hào)常量,在使用程序代碼為窗體及各種控件的某些屬性賦予新的取值時(shí),就可以直接使用相應(yīng)的內(nèi)置符號(hào)常量。通過VB幫助即可查找和使用他們。3.3.3變量.變量名及類型說明變量名的命名規(guī)則是:首字符必須是字母;長(zhǎng)度不超過255個(gè)字符;在作用域內(nèi)必須唯一;作為變量名的字符串內(nèi)不得包括點(diǎn)號(hào)和用于類型說明的字符%,&、!、#、@、$?有時(shí)為了提高程序的可讀性,可在變量名之前加匕一個(gè)約定的前綴,用于表示變量的數(shù)據(jù)類型。約定的前綴見表3-2。表3-2數(shù)據(jù)類型前綴數(shù)據(jù)類型前綴整型int長(zhǎng)整型Ing單精度型sng雙精度型dbl邏輯型bln貨幣型cur日期型dt字串型str變體型vnt字節(jié)型byt2.變量作用域與變量說明語句未加說明類型而使用的變量,系統(tǒng)一律按變體型處理。由于變體型變量要占用較多的內(nèi)存,并影響程序運(yùn)行的效率,所以,變量在使用之前,最好用變量說明語句說明其類型。根據(jù)變量說明方式的不同,變量的有效作用范圍也不同。變量的有效作用范圍稱為變量作用域。1)變量作用域VB有三個(gè)作用域等級(jí):等級(jí)范圍局部在過程中說明,僅在說明它的過程中有效窗體/模塊在窗體或模塊中說明,在定義該變量的模塊或窗體的所有過程內(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語句用于說明窗體/模塊級(jí)變量,,它們都只能用在模塊的通用部分;Static用于說明過程級(jí)的靜態(tài)變量,而Dim語句既可用于說明模塊級(jí)的變量(在模塊的通用部分使用),也可用于說明過程級(jí)的變量(在過程內(nèi)使用),因此較為常用。有關(guān)靜態(tài)變量的使用將在第7章述及。模塊級(jí)和公有級(jí)的變量應(yīng)在代碼窗口中的(通用)(聲明)部分進(jìn)行說明。例如:PrivateCountAsInteger或PublicNameAsString,ageAsInteger局部變量?jī)H在使用它的過程中說明:PrivateSubCommandl_Click()

DimCountAsIntegerEndSub在用Dim語句說明一個(gè)變量后,系統(tǒng)自動(dòng)為該變量賦予一個(gè)初始值。若變量是數(shù)值型的,則初始值為0;字符串型的,則初始值為空串;邏輯型變量的初始值為False?另外,系統(tǒng)還會(huì)自動(dòng)轉(zhuǎn)換在代碼行中輸入的變量名以與說明的變量名相匹配。例如說明語句是:DimMyCountryAsString在程序中輸入:mycountry="Nanjing”VB將其自動(dòng)轉(zhuǎn)換成:MyCountry="Nanjing”VB的這種功能,可幫助使用者輸入和使用正確的變量名。在變量類型說明語句中,必須對(duì)每個(gè)需要說明的變量逐個(gè)使用AsType說明其類型,未加說明的變量將按變體類型處理,例如語句:Dima,bAsInteger中的a是變體類型,b是整型。使用變量說明語句說明變量的數(shù)據(jù)類型,通常稱為“顯式說明”,也可以采用在變量名后加上一個(gè)用于規(guī)定變量類型的說明字符,來規(guī)定變量的類型,這種方法稱為“隱式說明”。VB規(guī)定的類型說明字符見表3-3o表3?3說明字符示例意義%X%表示X是整型變量&X&表示X是長(zhǎng)整型變量!x!表示X是單精度變量*X#表示X是雙精度變量@x@表示X是貨幣型變量$x$表示X是字符型變量例如在過程:PrivatesubForm_Click()k&=1Country$="china”Printk,CountryEndSub中的變量k和Country被隱式說明為長(zhǎng)整型和字符串型。類型說明字符也適用于常量。按照缺省規(guī)定,字符串型變量的長(zhǎng)度是可變的,也就是說通過對(duì)字符中賦予新的數(shù)據(jù),它的長(zhǎng)度可增可減。但也可以將字符串變量說明為具有固定長(zhǎng)度。方法是:Dim〈變量名〉A(chǔ)sString*size例如,為了聲明一個(gè)長(zhǎng)度為50字符的字符串,可用下列語句:DimEmpNameAsString*50如果賦給字符串變量的字符少于50個(gè),則用空格將EmpName的不足部分填滿。如果賦予字符串的長(zhǎng)度太長(zhǎng),則VisualBasic會(huì)直接截去超出部分的字符。因?yàn)槎ㄩL(zhǎng)字符串用空格填充尾部多余的空間,所以在處理定長(zhǎng)字符串時(shí)常常需要使用后面將耍述及的用于刪除空格的Trim和RTrim函數(shù)。標(biāo)準(zhǔn)模塊中的定長(zhǎng)字符串變量可說明為Public或Private0在窗體和類模塊中,則必須將定長(zhǎng)字符串變量說明為PrivateoOptionExplicit語句在模塊中使用OptionExplicit語句,系統(tǒng)將檢查模塊中所有未加顯式說明的變量,一旦發(fā)現(xiàn)有這樣的變量存在,就會(huì)產(chǎn)生一個(gè)出錯(cuò)信息,提示使用者改正錯(cuò)誤。例如:變量curSalary用于存放一個(gè)人用于計(jì)稅的工資數(shù)據(jù),若不使用Dim語句進(jìn)行說明,一旦在程序中因?yàn)槭韬?,變量名錯(cuò)輸入為curSalry,就會(huì)得到錯(cuò)誤的結(jié)果。但使用了OptionExplicit語句,就可以通過系統(tǒng)自動(dòng)檢測(cè)發(fā)現(xiàn)并排除類似的錯(cuò)誤。OptionExplicit語句可使用以下方法輸入:激活代碼編輯器窗口;從對(duì)象列表中選“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ù)號(hào))* 乘/ 除例: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ù)號(hào))f*和/f\(整除)fModf+和-f&2.算術(shù)表達(dá)式把常量、變量等運(yùn)算元素用算術(shù)運(yùn)算符連接起來的式子稱作“算術(shù)表達(dá)式:在算術(shù)表達(dá)式中,可以使用圓括號(hào)來改變運(yùn)算次序。例如:a*b/(c*d)3.14159265*rA2等都是合法的算術(shù)表達(dá)式。帶有括號(hào)的算術(shù)表達(dá)式在運(yùn)算時(shí)將優(yōu)先進(jìn)行括號(hào)內(nèi)的運(yùn)算。3.4.2關(guān)系運(yùn)算符與關(guān)系表達(dá)式關(guān)系運(yùn)算用于對(duì)兩個(gè)數(shù)據(jù)進(jìn)行比較,比較結(jié)果為邏輯值"True”或“False”。.關(guān)系運(yùn)算符VB常用的關(guān)系運(yùn)算符如下:運(yùn)算符功能<小于<=小于等于>大于>=大于等于<>不等于=等」Is用來比較兩個(gè)對(duì)象的引用變量.關(guān)系表達(dá)式關(guān)系表達(dá)式就是用關(guān)系運(yùn)算符把兩個(gè)比較對(duì)象連接起來的式子。比較對(duì)象可以是變量、常量和算術(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代碼,自左至右按照“逐個(gè)比較、遇大則大、長(zhǎng)大短小,完全相同,才是相等”的原則進(jìn)行。例如:“aBcd”>"abc”的運(yùn)算結(jié)果是False,因?yàn)樽帜浮癇”的ASCII代碼小于字母“b”。3.43 邏輯運(yùn)算符與邏輯表達(dá)式邏輯運(yùn)算是對(duì)邏輯值進(jìn)行的運(yùn)算。.邏輯運(yùn)算符VB常用的邏輯運(yùn)算符有:NOT邏輯非例:若2=1>此則NOTa=FalseAND邏輯與例:若a、b均為邏輯值,則只有a、b同為True時(shí)aANDb為TrueOR邏輯或例:若a、b均為邏輯值,只要a、b中有一個(gè)為True時(shí)aORb為TrueXOR邏輯異或例:若a、b均為邏輯值,a、b中只有一個(gè)為True時(shí)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í),要先處理算術(shù)運(yùn)算符,接著處理關(guān)系運(yùn)算符,最后處理邏輯運(yùn)算符。而這幾種運(yùn)算符內(nèi)的優(yōu)先次序,則按前面各小節(jié)所列次序進(jìn)行。比如系統(tǒng)在求一個(gè)包含有關(guān)系運(yùn)算、算術(shù)運(yùn)算的比較復(fù)雜的邏輯表達(dá)式的值時(shí),將先求算術(shù)表達(dá)式的值、再進(jìn)行關(guān)系運(yùn)算求出關(guān)系表達(dá)式的值,最后進(jìn)行邏輯運(yùn)算。當(dāng)然,如果表達(dá)式包含有括號(hào)時(shí),最內(nèi)層的括號(hào)將最優(yōu)先處理。在運(yùn)算時(shí),如果進(jìn)行運(yùn)算的兩個(gè)運(yùn)算時(shí)象的類型相同,它們的運(yùn)算結(jié)果也將是同一類型。例如執(zhí)行下面的代碼:DimxAsInteger,yAsIntegerx=324:y=324printx*y系統(tǒng)會(huì)給出“數(shù)據(jù)溢出”的出錯(cuò)提示,其原因就在于x與y相乘時(shí),結(jié)果已超出了整數(shù)可表示的范圍:如果不同數(shù)據(jù)類型的數(shù)據(jù)進(jìn)行運(yùn)算,結(jié)果的類型為兩個(gè)運(yùn)算對(duì)象中存儲(chǔ)長(zhǎng)度較長(zhǎng)的那個(gè)對(duì)象的類型。比如一個(gè)整型數(shù)與一個(gè)長(zhǎng)整型數(shù)進(jìn)行運(yùn)算,結(jié)果就是長(zhǎng)整型:一個(gè)整型數(shù)與一個(gè)單精度數(shù)進(jìn)行運(yùn)算,結(jié)果為單精度型,但一個(gè)Long型數(shù)與一個(gè)Single型數(shù)運(yùn)算,結(jié)果則為Double類型,依次類推。上例中若把x或y任一個(gè)說明為長(zhǎng)整型,則計(jì)算可以正常進(jìn)行。注意:除法運(yùn)算是個(gè)例外,不論除數(shù)與被除數(shù)類型如何,結(jié)果總是雙精度型。3.5VisualBasic公共函數(shù)所謂公共函數(shù)是由系統(tǒng)提供的,可在任何一個(gè)VB程序中隨時(shí)使用的程序段。每個(gè)程序段用于進(jìn)行某個(gè)特定的運(yùn)算或處理,如求某個(gè)數(shù)的平方根,把某個(gè)數(shù)據(jù)類型的數(shù)據(jù)變換成另一種類型等等。每個(gè)函數(shù)都有系統(tǒng)規(guī)定的函數(shù)名。例如:Sqr就是求平方根函數(shù)的函數(shù)名。使用函數(shù)稱為函數(shù)調(diào)用。函數(shù)調(diào)用形式是:〈函數(shù)名〉(pl,p2,...)其中,pl,p2,...是調(diào)用函數(shù)時(shí)的自變量序列,自變量的個(gè)數(shù)、排列次序和數(shù)據(jù)類型,應(yīng)和函數(shù)規(guī)定的參數(shù)相同。例如,要求2.5的平方根,只要在程序中的算術(shù)表達(dá)式中寫上Sqr(2.5)即可。在一個(gè)包含有函數(shù)的表達(dá)式進(jìn)行運(yùn)算時(shí),系統(tǒng)將優(yōu)先進(jìn)行函數(shù)調(diào)用(運(yùn)算)。公共函數(shù)是VB的重要組成部分。利用VB提供的幫助功能,可以方便地獲取各個(gè)函數(shù)的功能和用法,請(qǐng)讀者自行練習(xí)。算術(shù)函數(shù)表3-4是VB常用的算術(shù)函數(shù)。表34函數(shù)名功能Sqr(x)求平方根值,x20Log(x)求自然對(duì)數(shù),x>0Exp(x)求以e為底的累值,即求e*Abs(x)求X的絕對(duì)值Hex[$](x)求X的十六進(jìn)制數(shù)值Oct[$](x)求X的八進(jìn)制數(shù)值Sgn(x)求x的符號(hào),當(dāng)x>0,返回1;x=0,返回0;x<0,返回TRnd[(x)]產(chǎn)生一個(gè)在(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字符串的長(zhǎng)度(字符個(gè)數(shù))Left[$](x,n)從X字符串左邊起取n個(gè)字符Right[$](x,n)從x字符串右邊起取n個(gè)字符Mid[$](x,nl,n2)從x字符串左邊第nl個(gè)位置開始向右起取n2個(gè)字符Ucase[$](x)將x字符串中所有小寫字符改為大寫Lease[$](x)將X字符串中所有大寫字符改為小寫Ltrim[$](x)去掉X左邊的空格Rtrim[$](x)去掉X右邊的空格Instr([n,]x,"字符”)從x的第n個(gè)位置起查找給定的字符,返回該字符在x中的位置,n的缺省值為1String⑶(nJ字符”)得到由n個(gè)給定字符組成的一個(gè)字符串Space[$](n)得到n個(gè)空格注意:函數(shù)名中用方括號(hào)括起來的$可有可無。轉(zhuǎn)換函數(shù)表3-6是VB常用的轉(zhuǎn)換函數(shù)。表3-6函數(shù)名功能Str[$](x)將數(shù)值數(shù)據(jù)X轉(zhuǎn)換成字符串(含符號(hào)位)

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)換成長(zhǎng)整數(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ù)字字符串(對(duì)于正數(shù)符號(hào)位不予保留)日期與時(shí)間函數(shù)表3-7是VB提供的與日期和時(shí)間有關(guān)的函數(shù)。表3-7函數(shù)名功能Date[$]返回系統(tǒng)當(dāng)前的日期Time⑶返回系統(tǒng)當(dāng)前的時(shí)間Now返回系統(tǒng)當(dāng)前的日期和時(shí)間Year(x)X應(yīng)為一有效的II期變量、常量或字符表達(dá)式本函數(shù)返回一個(gè)表示X的年號(hào)的整數(shù)Month(x)X應(yīng)為一有效的日期變量、常量或字符表達(dá)式本函數(shù)返回一個(gè)表示X的月份的整數(shù)Day(x)X應(yīng)為一有效的日期變量、常量或字符表達(dá)式本函數(shù)返回1到31之間的整數(shù),表示是一個(gè)月的第幾日Weekday(x[,c])X應(yīng)為一有效的日期變量、常量或字符表達(dá)式c是用于指定星期幾為一個(gè)星期第一天的常數(shù),缺省時(shí)表示一周的星期天為第一天除過上面列舉的函數(shù)之外,VB還提供了許多用于其他處理的函數(shù)。比如用于輸入與輸出的函數(shù)、用于處理數(shù)組的函數(shù)、用于處理文件操作的函數(shù)等等。這些函數(shù)在任何程序中都可以不需說明直接使用,非常方便。讀者可以通過VB的幫助系統(tǒng)查閱到各種函數(shù)的功能及使用方法的信息。在使用函數(shù)時(shí)應(yīng)特別注意以下幾點(diǎn):必須準(zhǔn)確地掌握函數(shù)的功能;必須使用正確的函數(shù)名;必須注意函數(shù)及各個(gè)自變量的數(shù)據(jù)類型、各個(gè)自變量的意義和允許的數(shù)值范圍;3.5.5格式化函數(shù)Format$格式化函數(shù)Format[$]是專門用于將數(shù)值、日期和時(shí)間數(shù)據(jù)按指定格式輸出的函數(shù)。它的一般形式是:Format[$]((算術(shù)表達(dá)式>,fmt$)式中的fmt$是用于格式控制的字符串。格式控制字符有:#、0、.、,、樂$、-、+、(、)、E+、E~其中,#、0是數(shù)位控制符;.、,是標(biāo)點(diǎn)控制符;E+和E-是指數(shù)輸出控制符;其它是符號(hào)控制符。設(shè)雙精度型變量x=123456.78,下面是采用不同格式字符組成的格式控制字串輸出x的示例:PrintFormat(x,"00000000.0000")PrintFormat$(x,"############")PrintFormat$(x,"###,##禮###.#")PrintFormat$(x,"########十)若執(zhí)行上述代碼,窗體顯示為:00123456.7800123457123,456.812345678%第一行由于x的位數(shù)少于控制字符串的位數(shù),所以自動(dòng)在前后補(bǔ)0:第二行由于x的位數(shù)少于控制字符串的位數(shù),但無小數(shù)點(diǎn),所以先四舍五入取整后輸出(左對(duì)齊,不留空格);第三行增加了千分位分隔符和小數(shù)點(diǎn),使x四舍五入到一位小數(shù)后輸出;第四行則強(qiáng)制以百分?jǐn)?shù)形式輸出(x乘100后再加上百分號(hào))。其它控制字符的作用及用法,讀者可自行練習(xí)。有關(guān)日期數(shù)據(jù)的格式控制字符及用法,也請(qǐng)參閱VB手冊(cè)或隨機(jī)幫助文檔。Format函數(shù)僅用于控制數(shù)據(jù)的外部輸出形式,不會(huì)改變數(shù)據(jù)在計(jì)算機(jī)內(nèi)部的存儲(chǔ)形式。習(xí)題.如果編寫的過程要被多個(gè)窗體及其對(duì)象調(diào)用,應(yīng)將這些過程放在哪一類模塊中?A.窗體模塊 B.標(biāo)準(zhǔn)模塊 C.工程D.類模塊.事件過程與通用過程的主要區(qū)別是什么?.通用過程只能存在于標(biāo)準(zhǔn)模塊中,這種說法對(duì)嗎?.VisualBasic有那些數(shù)據(jù)類型?.字符串型常量和日期型常量在使用時(shí)有何區(qū)別?下列常量中那些是字符串型常量,那些是日期型常量?那些什么也不是?A.''Iamastudent."B."江蘇南京"C.#02/25/1999#D.#January1,1993#E."02/25/1999#F.#January1,1993"6.下列符號(hào)名中那些是VB合法的變量名?A.blnFragB._a5bC.IngNumD.Area_TriangleE.User&InputF.5Name.變量作用域包括幾個(gè)等級(jí)?說明的方式有何區(qū)別?.寫出下面數(shù)學(xué)式對(duì)應(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之一為零但不得同時(shí)為零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)不給出出錯(cuò)提示)?Print32765+3Print5+7=14Print256/128Print"14”+32Print1114"&3213.VisualBasic只有求自然對(duì)數(shù)的函數(shù)Log(x),如果計(jì)算式中需要使用常用對(duì)數(shù)或以2為底的對(duì)數(shù),應(yīng)如何處理?(提示:使用換底公式)14.執(zhí)行語句代碼PrintFormat(7543.568,"##,##0.00"),以下答案中那一個(gè)是正確結(jié)果?A.7543.57B.7,543.56 C,7,543.57 D.7,543.564算法基礎(chǔ)及VisualBasic基本語

句算法及程序設(shè)計(jì)基礎(chǔ)如前所述,VB應(yīng)用程序主要由用戶界面和相關(guān)的程序代碼組成。在VB應(yīng)用程序中,代碼被組織成一個(gè)個(gè)的過程。但不論是事件過程,還是通用過程都是由一系列的操作規(guī)則和對(duì)操作對(duì)象的說明組成的,他們不僅規(guī)定了本過程要使用那些變量或常量,也說明了他們各自的數(shù)據(jù)類型、作用域等等,而且規(guī)定了本過程將要實(shí)現(xiàn)的各種操作及處理,也就是說,當(dāng)一個(gè)過程被激活時(shí),通過過程中的代碼,計(jì)算機(jī)將知道要做什么(處理對(duì)象)和怎么做(操作步驟)。被包含在窗體或標(biāo)準(zhǔn)模塊中的一個(gè)個(gè)過程有機(jī)地組合在一起,就構(gòu)成一個(gè)完整的應(yīng)用程序。就一個(gè)具體的應(yīng)用而言,總是要求它能解決特定的問題,達(dá)到預(yù)定的目的,換句話說,就是要保證程序的“正確性”和“可行性”。因此,在設(shè)計(jì)程序前,根據(jù)實(shí)際問題的特點(diǎn)和需求,再考慮計(jì)算機(jī)的工作特性確定解決某個(gè)問題所需要的方法和步驟是至關(guān)重要且必不可少的一步。這一步驟,通常稱為“算法設(shè)計(jì)”。.算法的概念廣義而言,算法就是解決某個(gè)問題或處理某件事的方法和步驟。人們?cè)谌粘I詈凸ぷ髦凶鋈魏螘r(shí),都必須遵從一定的章法,才能順利完成。狹義而言,算法是專指用計(jì)算機(jī)解決某一問題的方法和步驟。著名計(jì)算機(jī)科學(xué)家D.E.Knuth在其《計(jì)算機(jī)程序設(shè)計(jì)技巧》一書中為算法所下的定義是:“一個(gè)算法,就是一個(gè)有窮規(guī)則的集合,其中之規(guī)則規(guī)定了一個(gè)解決某一特定類型問題的運(yùn)算系列”。計(jì)算機(jī)算法可以分為兩大類:一類是數(shù)值計(jì)算算法,主要是解決一般數(shù)學(xué)解析方法難以處理的一些數(shù)學(xué)問題,如求解超越方程的根、求定積分、解微分方程等;另一類是非數(shù)值計(jì)算算法,如對(duì)非數(shù)值信息的排序、查找等。研究解決各種特定類型問題的算法已成為一個(gè)稱為“計(jì)算方法”的專門學(xué)科。盡管現(xiàn)代電子計(jì)算機(jī)功能強(qiáng)大,但其基本部件僅能執(zhí)行諸如數(shù)據(jù)的傳遞(輸入、輸出和取數(shù)、存數(shù)等)、算術(shù)運(yùn)算(加、減、乘、除)、邏輯運(yùn)算(與、非、或等)及比較、判斷與轉(zhuǎn)移等操作。因此,研究如何把一個(gè)復(fù)雜的運(yùn)算處理分解成這些簡(jiǎn)單的操作組合,也是“計(jì)算方法”的重要研究?jī)?nèi)容。對(duì)于同一問題的求解,往往可以設(shè)計(jì)出多種不同的算法,不同的算法的運(yùn)行效率、占用內(nèi)存量可能有較大的差異,評(píng)價(jià)一個(gè)算法的好壞優(yōu)劣,也有不同的角度和標(biāo)準(zhǔn)。一般而言,主要看算法是否正確、運(yùn)行的效率及占用系統(tǒng)資源的多少等。.算法示例[示例1]求兩個(gè)自然數(shù)的最大公約數(shù)的算法.輸入兩個(gè)自然數(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…叫作算法步驟,每個(gè)算法步驟明確規(guī)定所要進(jìn)行的操作及處理對(duì)象的特性(M、N為自然數(shù))。除過算法步驟S5根據(jù)給定條件的滿足與否可改變執(zhí)行的順序之外,各個(gè)算法步驟都是依排列的次序順序執(zhí)行的。歐幾里德算法是求兩個(gè)自然數(shù)最大公約數(shù)的經(jīng)典算法。感興趣的讀者可隨意設(shè)定兩個(gè)自然數(shù)對(duì)該算法進(jìn)行測(cè)試。[示例2]在N個(gè)字符數(shù)據(jù)集合中,查找有無特定的字符串存在。.輸入字符數(shù)據(jù)的個(gè)數(shù)N和要查找的數(shù)據(jù)S;.使1=1,I用于計(jì)數(shù);.從字符數(shù)據(jù)集合中讀取一個(gè)數(shù)據(jù)X;.若X=S,輸出“找至IJS”的信息,算法結(jié)束,否則轉(zhuǎn)S5;.使1=1+1,計(jì)數(shù)器計(jì)數(shù):.若IWN;則重復(fù)執(zhí)行S3、S4、S5(循環(huán));否則轉(zhuǎn)S7;.輸出“找不到S”信息,算法結(jié)束。本算法也稱為“順序查找算法”,也是在處理非數(shù)值信息時(shí)最常用的一種算法。上面的兩個(gè)算法示例,前一個(gè)是數(shù)值計(jì)算算法,后一個(gè)則是非數(shù)值計(jì)算算法。.算法的特征從上述算法的示例可以看出,作為算法,應(yīng)具備以下特征:1)確定性所謂算法的確定性是指算法的每個(gè)步驟都應(yīng)確切無誤,沒有歧義性。2)可行性可行性是指算法的每個(gè)步驟都必須是計(jì)算機(jī)能夠有效執(zhí)行、可以實(shí)現(xiàn)的,并可得到確定的結(jié)果。3)有窮性一個(gè)算法包含的步驟必須是有限的,并在一個(gè)合理的時(shí)間限度內(nèi)可以執(zhí)行完畢。“有窮”是個(gè)相對(duì)的概念,隨著計(jì)算機(jī)性能的提高,過去使用低速計(jì)算機(jī)需要執(zhí)行若干年的算法(相當(dāng)于“無窮”),現(xiàn)在使用高速計(jì)算機(jī)也可在較短的時(shí)間內(nèi)執(zhí)行完畢,則又相當(dāng)于“有窮”。4)輸入性執(zhí)行算法時(shí),計(jì)算機(jī)可從外部取得數(shù)據(jù)。一個(gè)算法可以有多個(gè)輸入,但也可以沒有輸入(0個(gè)輸入),因?yàn)橛?jì)算機(jī)可以自動(dòng)產(chǎn)生一些必須的數(shù)據(jù)。5)輸出性一個(gè)算法必須有1個(gè)或多個(gè)輸出。計(jì)算機(jī)是人們用于“解題”的工具,因此算法必須具備向計(jì)算機(jī)外部輸出結(jié)果的步驟,否則該算法將毫無意義。.算法的描述算法可以采用多種方式來表示。比如使用人們的自然語言像英語、漢語等來描述;使用某種代碼符號(hào)來描述或者使用特定的圖形來描述等等。由于圖形的描述方法既形象,又直觀,所以得到廣泛的應(yīng)用。用于描述算法的圖形使用較多的是所謂的流程框圖,簡(jiǎn)稱流程圖。它是使用規(guī)定的圖形符號(hào)來描述算法的。流程圖使用的圖形符號(hào)見表4-1.圖4-1和圖4-2分別是上一節(jié)兩個(gè)算法示例的流程圖。圖框內(nèi)的文字用于說明具體的操作內(nèi)容。顯而易見,使用流程圖比使用自然語言描

述算法優(yōu)越地多。表4-1圖形符號(hào)名稱代表的操作Z_/輸入/輸出數(shù)據(jù)的輸入與輸出處理各種形式的數(shù)據(jù)處理判斷判斷選擇,根據(jù)條件滿足與否選擇不同路徑起止流程的起點(diǎn)與終點(diǎn)特定過程一個(gè)定義過的過程 A流程線連接各個(gè)圖框,表示執(zhí)行順序O連接點(diǎn)表示與流程圖其他部分相連接圖4-1 圖4-2需要指出的是,算法僅僅提供了解決某類問題可采用的方法和步驟,還必須使用某種計(jì)算機(jī)程序設(shè)計(jì)語言把算法描述出來。也就是說,要使用某一種程序設(shè)計(jì)語言所提供的語言成分,根據(jù)語言的特點(diǎn),并利用語言提供的各種工具和手段,遵照規(guī)定的語法規(guī)則,去實(shí)現(xiàn)算法,這就是所謂的程序編碼。使用VisualBasic開發(fā)應(yīng)用程序也不例外。利用VB的集成開發(fā)環(huán)境設(shè)計(jì)的用戶界面主要解決與用戶交流信息(輸入與輸出)和對(duì)程序各種執(zhí)行方式的控制(響應(yīng)由用戶操作引發(fā)的各種事件),而具體到解決特定問題或?qū)崿F(xiàn)特定處理的過程,在編碼時(shí),仍然必須依據(jù)一定的算法,或者說要實(shí)現(xiàn)相應(yīng)的算法,所以在學(xué)習(xí)VB時(shí),除了要學(xué)習(xí)VB的各種語言成分的意義、功能、執(zhí)行方式及各種語法規(guī)則外,更重要的是掌握VB語言的特點(diǎn),學(xué)會(huì)使用VB實(shí)現(xiàn)各種算法的方法。.基本算法結(jié)構(gòu)前已述及,同一個(gè)問題可以設(shè)計(jì)出多種不同的算法,依據(jù)不同算法設(shè)計(jì)出的程序自然也各不相同?,F(xiàn)在人們公認(rèn)的具有“良好風(fēng)格”的程序設(shè)計(jì)方法之一是所謂的“結(jié)構(gòu)化程序設(shè)計(jì)方法”。其核心是規(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)證其正確性,也易于查錯(cuò)和排錯(cuò)。圖4-3是三種基本算法結(jié)構(gòu)的圖形表示。(c2)(c2)圖4-3圖4-3(a)是順序結(jié)構(gòu),其中的每個(gè)處理(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)中的每個(gè)部分都有執(zhí)行到的可能;3)結(jié)構(gòu)內(nèi)不存在永不終止的死循環(huán)。VisualBasic語言完全支持結(jié)構(gòu)化的程序設(shè)計(jì)方法,并提供了相應(yīng)的語言成分。賦值語句及InputBox、MsgBox函數(shù)賦值語句.賦值語句的形式賦值語句的一般形式是:var=〈表達(dá)式〉其中var表示某個(gè)變量名或?qū)傩悦?。?dāng)系統(tǒng)執(zhí)行一個(gè)賦值語句時(shí),將先求出賦值操作符”"右邊表達(dá)式的值,然后再把該值保存到左邊的變量中。這就是所謂的“賦值”。使用賦值語句可使變量或某個(gè)對(duì)象的某屬性獲得一個(gè)新值。例如:x=Thisisaflowernumber%=72Lablel.Text="Filenameis:*Text.Font.Size=12 '改變字號(hào)Y=(a+b)/2使用賦值語句還可以獲取一個(gè)對(duì)象返回的當(dāng)前屬性值。在應(yīng)用程序中,常常需要知道一個(gè)對(duì)象當(dāng)前的屬性值,以決定下一步要作些什么處理。比如在修改,個(gè)文本框的內(nèi)容之前,需要知道當(dāng)前的文本內(nèi)容是什么,使用下面的方法可以獲取一個(gè)對(duì)象的屬性值:var=pety式中,var是變量名、object是對(duì)象名、propety是該對(duì)象的某個(gè)屬性名。特別注意:屬性也存在數(shù)據(jù)類型,所以在獲取對(duì)象的屬性值時(shí),最好使用具有相同數(shù)據(jù)類型的變量。在程序中,賦值語句以及各種操作對(duì)象的方法等,都是順序執(zhí)行的。.不同數(shù)據(jù)類型數(shù)據(jù)的賦值如果一個(gè)賦值語句左邊變量的數(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賦給變量;把一個(gè)邏輯值Ture賦給一個(gè)整型變量,變量的值將為-1;把邏輯值False賦給整型變量,變量的值為0;把一個(gè)邏輯值Ture賦給一個(gè)字符變量,變量的值將為True;把邏輯值False賦給字符變量,變量的值為False:把一個(gè)字符型的數(shù)據(jù)賦給數(shù)值變量,系統(tǒng)將給出數(shù)據(jù)類型不匹配的錯(cuò)誤提示,并停止執(zhí)行。圖4-4是?個(gè)說明不同數(shù)據(jù)類型數(shù)據(jù)賦值方式的簡(jiǎn)單程序示例。圖4-4示例程序的變量b、n、s分別被說明為邏輯型、整型與字符型。當(dāng)給邏輯型變量賦以不同的整數(shù)時(shí),程序正常執(zhí)行,只有在給一個(gè)整型變量賦以字符型書局時(shí),程序才給出了“類型不匹配”的錯(cuò)誤信息。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ù),將會(huì)產(chǎn)生運(yùn)行錯(cuò)誤)。在調(diào)用InputBox函數(shù)時(shí),屏幕上將產(chǎn)生一個(gè)帶有提示信息的對(duì)話框,用戶輸入數(shù)據(jù)后按回車鍵或用鼠標(biāo)單擊“0K”按鈕,即可把輸入的數(shù)據(jù)賦給變量;按Esc鍵或單擊“Cancel”按鈕,則返回。值或空串。InputBox函數(shù)的各個(gè)參數(shù)的意義如下:Prompt:提示用的文字信息;title:對(duì)話框標(biāo)題(字符型),缺省時(shí),為空白;default:顯示在用戶編輯框中的缺省值,缺省時(shí),返回空值;x.y:對(duì)話框在屏幕上顯示時(shí)的位置,單位是特維,(x,y)是對(duì)話框左上角點(diǎn)的坐標(biāo);helpfile,context:幫助文件名及幫助主題號(hào)。有本選項(xiàng)時(shí),在對(duì)話框中自動(dòng)增加一個(gè)幫助按鈕。請(qǐng)看一個(gè)簡(jiǎn)單的應(yīng)用示例:PrivateSubCmdlClickODimN_studentAsStringN_student=InputBox("請(qǐng)輸入你的學(xué)號(hào):","程序示例",230001)IfLeft(Nstudent,2)="23"ThenPrint”你是工程系的學(xué)生!"ElsePrint”你不是工程系的學(xué)生!”EndIfEndSub圖4-5是本程序執(zhí)行有InputBox函數(shù)的語句時(shí)顯示的畫面。文本框中顯示的是缺省值,使用程序的人也可輸入新的學(xué)號(hào),輸入后單擊“確定”按鈕,程序繼續(xù)執(zhí)行。

圖4-5MsgBox函數(shù)MsgBox函數(shù)用于向用戶發(fā)布提示信息,并要求用戶作出必要的響應(yīng)。MsgBox函數(shù)的形式是:MsgBox(Prompt[,button][,title][,helpfile,context])式中各個(gè)參數(shù)的意義如下:Prompt:提示用的文字信息;button:這是一個(gè)由4個(gè)數(shù)值常量組成的式子,形式為cl+c2+c3+c4,用于決定信息框中按鈕的個(gè)數(shù)和類型以及出現(xiàn)在信息框中的圖標(biāo)類型,各個(gè)參量的可選值及其功能見表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第一個(gè)按鈕為缺省按鈕256vbDefaultButton2第二個(gè)按鈕為缺省按鈕512vbDefaultButton3第三個(gè)按鈕為缺省按鈕表4-2(d)c4的取值內(nèi)置常量名意義0vbApplicationMode1應(yīng)用程序模式,用戶在當(dāng)前應(yīng)用程序繼續(xù)執(zhí)行之前,必須對(duì)信息框做出響應(yīng);信息框位于最前面4096VbSystemModel系統(tǒng)模式,所有應(yīng)用程序均掛起,直到用戶響應(yīng)該信息框?yàn)橹箃itle:信息框標(biāo)題(字符型),缺省時(shí),為空白;helpfile,context:幫助文件名及幫助主題號(hào)。有本選項(xiàng)時(shí),在信息框中自動(dòng)增加一個(gè)幫助按鈕。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,"提示信息”)也可以把它等同為一個(gè)方法使用。如:MsgBox"非法數(shù)據(jù)!",48,"提示信息” 醫(yī)lx三種方法在執(zhí)行時(shí)都可以獲得如圖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時(shí),就執(zhí)行A組語句,接著執(zhí)行EndIf的下一條語句;否則就執(zhí)行B組語句,接著執(zhí)行EndIf的下一條語句。圖4-3(b)中的算法結(jié)構(gòu),還有多種變形。比如圖4-7和圖4-8的結(jié)構(gòu),前者稱為不對(duì)稱分支;后者稱為多分支。

elTrueFalseelTrueFalse圖4-7 圖4-8圖4-7的結(jié)構(gòu)可用以下的結(jié)構(gòu)語句實(shí)現(xiàn):IfeThenA組語句Endif當(dāng)A組語句僅有一個(gè)時(shí),圖4-7的結(jié)構(gòu)還可以簡(jiǎn)化為:IfeThenv語句〉'例如程序代碼:IfTextl.Text=""Then'當(dāng)文本框中文本為空時(shí),則使文本框成為焦點(diǎn)Textl.SetFocusEndIf就可以簡(jiǎn)化為:'當(dāng)文本框中文本為空時(shí),則使文本框成為焦點(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]已知三角形三個(gè)邊的長(zhǎng)度,設(shè)計(jì)求此三角形面積的程序。問題分析:設(shè)三角形的三個(gè)邊分別為a、b、c,從數(shù)學(xué)上已知,當(dāng)a+b>c且a+c>b且b+c>a時(shí),三角形存在,其面積S=yjp(p-a)(p-b)(p-c)式中:p=(a+b+c)/2算法設(shè)計(jì):根據(jù)問題分析,可得到圖4-9的算法流程圖。用戶界面設(shè)計(jì)程序界面主耍由四個(gè)文本框和三個(gè)命令按鈕組成,五個(gè)標(biāo)簽用于說明。a:、b:、c:三個(gè)標(biāo)簽后的文本框中輸入三角形邊長(zhǎng)數(shù)據(jù),單擊''計(jì)算按鈕”,給出計(jì)算結(jié)果。如果給出的數(shù)據(jù)構(gòu)不成三角形,則在計(jì)算結(jié)果的文本框中給出“數(shù)據(jù)錯(cuò)誤”的信息。單擊“清除”按鈕將擦去文本框中已有數(shù)據(jù),為下一次計(jì)算做準(zhǔn)備。單擊''結(jié)束”按鈕,則關(guān)閉程序。依據(jù)圖4-9的算法,設(shè)計(jì)程序代碼如下(用戶界面各元素的屬性設(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ù)寫入計(jì)算結(jié)果文本框ElseText4.Text="數(shù)據(jù)錯(cuò)誤” ,數(shù)據(jù)錯(cuò)誤信息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ù)時(shí),由于文本框的Text屬性是字符串型的,所以使用了轉(zhuǎn)換函數(shù)Val(x)將由文本框輸入的數(shù)據(jù)轉(zhuǎn)換成數(shù)值型;而將計(jì)算結(jié)果賦給文本框的Text屬性時(shí),又使用了CStr(x)函數(shù)將數(shù)值型數(shù)據(jù)轉(zhuǎn)換成字符串型。但由于賦值語句執(zhí)行時(shí),也會(huì)對(duì)不相符合的數(shù)據(jù)類型強(qiáng)制進(jìn)行轉(zhuǎn)換,因此,不使用這些轉(zhuǎn)換函數(shù)程序也能執(zhí)行。事件過程Commandl_Click()中的程序代碼用于實(shí)現(xiàn)圖4-8的算法[例4-2]一個(gè)有多個(gè)分支的示例程序。圖4-11是本程序的算法流程圖.圖4-11設(shè)用戶界面由兩個(gè)文本框和一個(gè)命令按鈕及相應(yīng)的用于說明的標(biāo)簽組成(讀者可自行設(shè)計(jì)界面及設(shè)置相關(guān)屬性)。從文本框1中輸入測(cè)試數(shù)據(jù),單擊命令按鈕,在文本框2中給出測(cè)試結(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稱為測(cè)試表達(dá)式,可以是算術(shù)表達(dá)式或字符表達(dá)式;cl,c2,…是測(cè)試項(xiàng),它們可取三種形式:(1)具體取值:如:3、5,7.2等(當(dāng)測(cè)試表達(dá)式是算術(shù)表達(dá)式時(shí));(2)連續(xù)的數(shù)據(jù)范圍:如:8To20;BToH等;(3)滿足某個(gè)判決條件:如:Is>20;Is<="P"等。測(cè)試項(xiàng)還可以是這三中形式的組合,如4,7To9,Is>30本結(jié)構(gòu)的執(zhí)行方式是:先求測(cè)試表達(dá)式的值,接著逐個(gè)檢查每個(gè)Case語句的測(cè)試項(xiàng),如果,測(cè)試表達(dá)式的值滿足某個(gè)測(cè)試項(xiàng)中的任意一個(gè)測(cè)試內(nèi)容,系統(tǒng)就執(zhí)行該Case語句下的那組語句;若沒有一個(gè)測(cè)試項(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ū)別是一個(gè)是先進(jìn)行判別,再根據(jù)判決結(jié)果執(zhí)行或不執(zhí)行(即結(jié)束循環(huán))循環(huán)體;另一個(gè)則是先執(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前兩種形式分別對(duì)應(yīng)圖4-11中的兩種當(dāng)型結(jié)構(gòu);后兩種形式則分別對(duì)應(yīng)圖4-12中的兩種直到型結(jié)構(gòu)。在Do語句和Loop語句之間的語句即為循環(huán)體語句。循環(huán)體中,可以包括一條或多條ExitD。語句,如果程序執(zhí)行到ExitDo語句時(shí),就會(huì)直接退出循環(huán),轉(zhuǎn)而執(zhí)行Loop語句的T'一條語句。ExitDo語句最常用的形式是與If-Then語句想結(jié)合,即:IfeThenExitDo在執(zhí)行循環(huán)體時(shí),如果條件e被滿足,則執(zhí)行ExitD。語句直接退出循環(huán)。

[例4-3]設(shè)計(jì)采用歐幾里德算法求解兩個(gè)自然數(shù)的最大公約數(shù)的程序。問題分析及界面設(shè)計(jì):本問題的算法前面已經(jīng)給出,界面則可參照例4-1設(shè)計(jì)。由于輸入的數(shù)據(jù)M和N要求是自然數(shù),所以在程序中應(yīng)加入對(duì)數(shù)據(jù)的合法性進(jìn)行檢驗(yàn)的部分;考慮到程序的應(yīng)用范圍,數(shù)據(jù)類型可選用長(zhǎng)整型。本例中使用了求余(數(shù))運(yùn)算符Mod。在使用Mod運(yùn)算符時(shí),切記應(yīng)在它的前后各加一個(gè)空格,而不要把用Mod運(yùn)算符連接的兩個(gè)變量與運(yùn)算符混在一起,造成錯(cuò)誤。如求m除以n的余數(shù),應(yīng)寫成:mModn設(shè)計(jì)好的用戶界面(圖4-14)及程序代碼如下。圖4-13PrivateSubCommandl_Click()Dimm,n,rAsLongm=Val(Textl.Text)n=Val(Text2.Text)Ifm<lOrn<1ThenText3.Text="數(shù)據(jù)錯(cuò)誤圖4-13PrivateSubCommandl_Click()Dimm,n,rAsLongm=Val(Textl.Text)n=Val(Text2.Text)Ifm<lOrn<1ThenText3.Text="數(shù)據(jù)錯(cuò)誤!'取數(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為步長(zhǎng)。當(dāng)e3=l時(shí),stepe3部分可以省略。For語句和Next語句之間的諸語句即為循環(huán)體。For-Next循環(huán)結(jié)構(gòu)語句的執(zhí)行方式是:執(zhí)行For語句,系統(tǒng)將做以下操作:計(jì)算el、e2和e3的值(如果el、e2、e3為算術(shù)表達(dá)式);給v賦初值;進(jìn)行判別:判V的值是否超過e2,即當(dāng)e3>0(步長(zhǎng)為正數(shù))時(shí),判v>e2否;當(dāng)e女0(步長(zhǎng)為負(fù)數(shù))時(shí),判v<e2否,如果未超過,則執(zhí)行循環(huán)體:如果超過了,則退出循環(huán),去執(zhí)行Next語句的下一語句。執(zhí)行Next語句,系統(tǒng)執(zhí)行卜述操作:v增加一個(gè)步長(zhǎng),即執(zhí)行v=v+e3;轉(zhuǎn)而執(zhí)行判別操作。圖4-15是For-Next循環(huán)執(zhí)行方式的流程圖。

注意:三個(gè)循環(huán)參數(shù)el、e2和e3中包含的變量如果在循環(huán)體內(nèi)被改變,不會(huì)影響循環(huán)的執(zhí)行次數(shù);但循環(huán)控制變量若在循環(huán)體內(nèi)被重新賦值,則循環(huán)次數(shù)有可能發(fā)生變化。For-Next循環(huán)的正常循環(huán)次數(shù)可用下式計(jì)算:循環(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)時(shí),i的取值為11。Form213579i=11圖4-16山于數(shù)據(jù)在計(jì)算機(jī)內(nèi)部均是以二進(jìn)制數(shù)形式存儲(chǔ)的,十進(jìn)制整數(shù)可準(zhǔn)確轉(zhuǎn)換為二進(jìn)制數(shù)形式,而帶小數(shù)點(diǎn)的十進(jìn)制數(shù)在轉(zhuǎn)換為單精度數(shù)或雙精度數(shù)時(shí)則多半存在數(shù)制轉(zhuǎn)換誤差。如果使用非整型數(shù)做循環(huán)控制變量,循環(huán)參數(shù)也使用非整型數(shù),那么循環(huán)次數(shù)就有可能發(fā)生意想不到的變化。所以應(yīng)盡可能避免使用非整型數(shù)控制循環(huán)的執(zhí)行。[例4-4]編寫一個(gè)程序求1到10這十個(gè)數(shù)的和與連乘積。求若干個(gè)數(shù)之和或若干個(gè)數(shù)的連乘積,可采用“累加”與“累乘”法進(jìn)行。累加法是設(shè)置一個(gè)存放和數(shù)的變量,稱為“累加器”,它的初始值設(shè)為0,累加過程通過循環(huán)實(shí)現(xiàn),在循環(huán)體中,和數(shù)與累加器相加后再賦值給累加器;累乘的算法與累加類似,不過設(shè)置的是“累乘器”,它的初始值應(yīng)設(shè)為1,在循環(huán)體內(nèi),乘數(shù)應(yīng)與累乘器相乘。在求乘枳時(shí),應(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]一個(gè)從由字母數(shù)字組成的字符串中找出所有大寫字母并逆序輸出的程序。圖4-18圖4-18是本程序的運(yùn)行界面。從一個(gè)字符串中找出符合要求的字符是采取對(duì)字符串的每一個(gè)字符逐個(gè)篩選的方法實(shí)現(xiàn)的,本例利用Mid函數(shù)可以從字符串中提取出單個(gè)字符,利用循環(huán)控制處理過程,循環(huán)的終值使用Len函數(shù);對(duì)于符合要求的字符采用連接運(yùn)算組成新字符串;逆序輸出則是通過從后往前逐個(gè)提取字符再連接。程序代碼如下: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),而不得相互交叉。請(qǐng)看示例:PrivateSubForm_Click()Fori=1To9Forj=1To9Printi;M*n;j;"=";i*j;NextjPrintNextiEndSub執(zhí)行本程序,窗體上將顯示九九乘法表。[例4-6丁一個(gè)模擬搖獎(jiǎng)的程序。設(shè)有100個(gè)人中簽,要從中找出中獎(jiǎng)人。由機(jī)器自動(dòng)隨機(jī)產(chǎn)生1000個(gè)1?100間的數(shù)據(jù),第1000個(gè)隨機(jī)數(shù)據(jù)即為中獎(jiǎng)人的號(hào)碼。問題分析:?jiǎn)栴}的關(guān)鍵是如何產(chǎn)生1?100之間的隨機(jī)整數(shù)。VB提供了一個(gè)可以產(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ī)序列的下一個(gè)隨機(jī)數(shù);參數(shù)number=0,則返回上一次生成的隨機(jī)數(shù)。不使用number的結(jié)果與number>0相同。也就是說,number的值決定了Rnd生成隨機(jī)數(shù)的方式。對(duì)最初給定的種子都會(huì)生成相同的數(shù)列,因?yàn)槊恳淮握{(diào)用Rnd函數(shù)都用數(shù)列中的前一個(gè)數(shù)作為下一個(gè)數(shù)的種子。在調(diào)用Rnd之前,可先使用無參數(shù)的Randomize語句初始化隨機(jī)數(shù)生成器,該生成器具有從系統(tǒng)計(jì)時(shí)器獲得到的種子。為了生成某個(gè)范圍內(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ì):根據(jù)題意,設(shè)計(jì)用戶界面如圖4-19,各對(duì)象的屬性設(shè)置略。圖4-19本程序算法比較簡(jiǎn)單,使用For-Next循環(huán)產(chǎn)生1000個(gè)1?100間的隨機(jī)整數(shù)即可。但為了獲得搖獎(jiǎng)的效果,每產(chǎn)生一個(gè)隨機(jī)數(shù),再利用一個(gè)For-Next循環(huán)起到延時(shí)作用,降低數(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 '延時(shí)a=a+1NextjText!.Text=CStr(intranum)Text1.Refresh ,文本框刷新NextiText1.Text=CStr(intranum)EndSubPrivateSubCommand2_Click()EndEndSub本程序采用了兩市嵌套的循環(huán),請(qǐng)讀者自行分析循環(huán)執(zhí)行的過程。4.5數(shù)組前面所介紹的變量都是簡(jiǎn)單變量,各簡(jiǎn)單變量之間相互獨(dú)立,沒有內(nèi)在的聯(lián)系,并與其所在的位置無關(guān)。在處理大量相關(guān)數(shù)據(jù)時(shí),使用簡(jiǎn)單變量將會(huì)有很大的困難,有時(shí)甚至是不可能的。例如,在編寫一個(gè)讀入50名學(xué)生的學(xué)號(hào)及其考試成績(jī),然后再按照考試成績(jī)從高到低的順序把他們的學(xué)號(hào)打印出來的程序時(shí),如使用簡(jiǎn)單變量來存放這50組數(shù)據(jù),那么,對(duì)考試成績(jī)進(jìn)行排序處理的過程就會(huì)變得十分繁瑣而復(fù)雜。如果使用數(shù)組來存放這些數(shù)據(jù),就會(huì)極大地簡(jiǎn)化程序的設(shè)計(jì)。因此在許多場(chǎng)合,總是使用數(shù)組這樣一個(gè)數(shù)據(jù)結(jié)構(gòu)來處理數(shù)據(jù)量大、類型相同且有序排列的數(shù)據(jù).數(shù)組的概念數(shù)組是一組具有相同類型的有序變量的集合。這些變量按照一定的規(guī)則排列,使用一片連續(xù)的存儲(chǔ)單元。數(shù)組可用于存儲(chǔ)成組的有序數(shù)據(jù)。使用數(shù)組就是用一個(gè)相同的名字

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論