版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
數據與運算式退出2.1VB的基本字元集和辭彙集2.1.1字元集2.1.2辭彙集1.關鍵字 關鍵字又稱保留字,是在語法上有固定意義的字母組合。主要包括:命令名、函數名、數據類型名、運算符、VB系統提供的標準過程等。2.識別字 識別字是用戶自己定義的名字,包括自定義常量名、變數名、控件名、自定義的過程名和函數名等。用戶通過識別字對相應的對象進行操作。2.2VB的基本數據類型
數據是資訊的物理表示形式,是程式處理的對象。在VB中,對不同類型的數據有不同的操作方式和不同的取值範圍。在程式設計中,要隨時注意所用數據的類型。VB的數據類型有系統定義和自定義兩種,系統定義的數據類型稱為標準類型,自定義數據類型是由若干標準類型組合成的某種結構。表2-1列出了VB中的標準數據類型。2.2.1字串型(String) 字串包括除雙引號和回車以外可列印的所有字元,雙引號作為字串的定界符號。 例如:"1234"和"張三"都是字元型。注意字串中空格是有效字元。2.2.2數值型
VB中的數值型數據分為整型和實型兩大類。1.整型 整型數是不帶小數點和指數符號的數。包括整型、長整型和位元組型整數。(1)整型(Integer,類型符%) 整型數用兩個位元組存儲,取值範圍是-32768到+32767。 例如:15,-345,654%都是整數型。而45678%則會發生溢出錯誤。 (2)長整型(Long,類型符&) 長整型用4個位元組存儲,取值範圍是-2147483648到+2147483647。 例如:123456,45678&都是長整數型。 (3)位元組型(Byte) 用一個位元組存儲,取值範圍是0到255。2.實型 實型數據主要分為單精確度、雙精度和貨幣型3種。 (1)單精確度浮點數(Single,類型符!) 單精確度數用4個位元組存儲,有7位有效數字,取值範圍1.401298E-45<|x|<3.402823E+38。 例如:3.14!,2.718282。
(3)貨幣型(Currency,類型符@) 貨幣型數據主要用來表示貨幣值,用8個位元組存儲,貨幣型是定點數,精確到小數點後面第4位,第五位四捨五入。整數部分最多15位。 例如:3.56@、65.123456@都是貨幣型。2.2.3邏輯型(Boolean) 邏輯型數據只有兩個:邏輯真True和邏輯假False,用2個位元組存儲。當把邏輯值轉化為數值型時,False為0,True為-1。2.2.4日期型(Date) 日期型數據用8個位元組來存儲,日期範圍從西元100年1月1日到9999年12月31日,可以用#括起來放置日期和時間,允許用各種表示日期和時間的格式。 日期可以用“/”、“,”、“-”分隔開,可以是年、月、日,也可以是月、日、年的順序。時間必須用“:”分隔,順序是:時、分、秒。
例如:#1999-08-1110:25:00pm#、#08/23/99#、#03-25-7520:30:00#、#98,7,18#等都是有效的日期型數據。在VB中會自動轉換成mm/dd/yy(月/日/年)的形式。2.2.5變體型(Variant) 變體型也稱為可變類型,它是一種特殊的數據類型。它的類型可以是前面敘述的數值型、日期型、字元型等,完全取決於程式的需要。從而增加了VB數據處理的靈活性。2.2.6自定義類型 在VB中可以用系統提供的標準類型定義變數,它們都是電腦處理的基本資料項目。但在實際工作中,常見的並不是孤立的資料項目,而是由兩個或兩個以上的基本項組成的組合項。例如,學生對象由學號、姓名、性別與語文、英語、數學、…、平均分數等基本項組合成組合項。用這些組合項來描述相應對象的若干屬性,這些描述相同對象的組合項的集合形成了記錄。在VB中使用用戶定義數據類型定義記錄結構。自定義類型由Type語句來實現:格式:Type自定義類型名元素名1As類型名元素名2As類型名
……元素名nAs類型名
EndType例如:
TypestutypexmAsString*4xhAsIntegercsrqAsDatesxAsSingleywAsSingleyyAsSingleendtype2.3常量與變數
電腦處理數據時,常用的數據形式有兩種,一是常量,二是變數。2.3.1常量 在程式執行的過程中保持不變的數據稱為常量。在VB中,常量分為兩種,文字常量和符號常量。符號常量又分為用戶自定義和系統定義兩種。1.文字常量 文字常量直接出現在代碼中,也稱為字面常量或直接常量,文字常量的表示形式決定它的類型和值。例如:字元型:"Iamastudent"
放在一對引號當中。數值型:3.14159、56、8.432E-15日期型:#3jan,98#放在一對#當中。邏輯型:True、False2.符號常量 符號常量就是用識別字來表示一個常量,例如:我們把3.14定義為pi,在程式代碼中,我們就可以在使用圓周率的地方使用pi。使用符號常量的好處主要在於,當我們要修改該常量時,只需要修改定義該常量的一個語句即可。 定義常量的方法如下:格式:const常量名[as類型]=運算式 說明:常量名的命名規則與識別字相同。[as類型]用以說明常量的數據類型。
除了用戶定義的常量外,在VB中,系統定義了一系列常量,可與應用程式的對象、方法或屬性一起使用,使程式易於閱讀和編寫。系統常量的使用方法和自定義常量的使用方法相同。 例如:form1.Windowstate=vbMinimized意義為將窗口最小化。 其中vbMinimized就是一個系統定義的常量,值為1。和form1.Windowstate=1相比較,form1.Windowstate=vbMinimized更明確地表達了語句的功能。 系統定義的常量在對象庫中,可以在對象流覽器中通過不同的對象庫查找它們的符號及取值。如圖2-1所示。2.3.2變數 在程式執行過程中,其值可以改變的量稱為變數。1.變數的說明 使用變數前,應首先定義所用到的變數(包括變數名和類型),使系統分配相應的記憶體空間,並確定該空間可存儲的數據類型。所有變數都具有名字和類型。在VB中可以用類型說明語句或隱式說明來定義變數。 (1)類型說明語句 格式:說明符變數名[As類型]
說明符是說明語句的關鍵字,它可以是Dim,Private,Public,Static。本章主要介紹Dim語句。例如:DimaasintegerDimbaslongDimcassingle上面的3個語句可以寫為:Dimaasinteger,baslong,cassingle也可以用類型符來定義變數,例如上面語句寫成:Dima%,b&,c!作用是一樣的。缺省[As類型]為可變類型。 另外,若把多個變數都定義成同一類型,例如:把X,Y,Z都定義成雙精度型,必須寫成:DimXasdouble,Yasdouble,Zasdouble如果寫成:Dimx,y,zasdouble則x,y定義成可變類型,z定義成雙精度型。 對於字元型變數,VB中分為定長和變長兩種。例如:DimNameasstring,Idasstring*10
說明:Dim語句定義的變數其作用範圍由Dim語句所在的位置決定。Dim語句出現在窗體代碼的聲明部分時,則窗體以及窗體中各控件的事件過程都可以使用這些變數。這種變數稱為窗體級變數;在過程內部用Dim語句聲明的變數,只在該過程內有效。這種變數稱為局部變數。關於變數的作用域,8.4節詳細闡述。 (2)隱式說明
VB中使用未加說明的變數時,系統默認為可變類型(Variant),這種方式稱為隱式說明。建議初學者養成對變數顯示說明的習慣,以避免一些不必要的錯誤。2.可變類型變數Variant
當說明語句中,使用類型關鍵字Variant定義類型,或僅定義變數而不作類型聲明(或變數名不帶類型符),則該變數稱為可變類型變數。3.自定義類型變數 在VisualBasic6.0中允許用戶自己定義變數類型,在定義“自定義類型變數”前要先定義數據類型2.4運算符與運算式2.4.1算術運算符 算術運算符用來連接數值型數據進行算術運算,VB提供了7種算術運算符,如表2-2所示。2.4.2字串運算符 字串只有連接運算,在VB中可以用“+”或“&”。建議儘量使用“&”,使程式看起來更明瞭。使用“&”運算符時應注意前後加空格,否則VB會當作長整數型的類型符來處理。 注意“+”和“&”的區別。當兩個被連接的數據都是字元型時,它們的作用相同。當數字型和字元型連接時,“&”把數據都轉化成字元型然後連接;“+”把數據都轉化成數字型然後連接。例如。"ABC"+"DEF"其值為"ABCDEF"。"姓名:"&"張三"其值為:"姓名:張三"。23&"7"其值為:"237"。23+"7"其值為:30。而23+"7abc"則會出現類型不匹配的錯誤。2.4.3關係運算符 關係運算符用作兩個數值或字串的比較,返回值是邏輯值True或False。表2-3列出了VB中的關係運算符及使用示例。2.4.4邏輯運算符 邏輯運算符對邏輯量進行邏輯運算,除Not外都是對兩個邏輯量運算。結果為邏輯值。表2-4列出了VB中的邏輯運算符。2.4.5運算式1.運算式的組成 運算式由常量、變數、函數、運算符以及圓括號、(),按照一定的規則組成,不管運算式的形式如何,都會計算出一個結果,該結果的類型由參與運算的數據和運算符決定。2.運算式的書寫規則 (1)運算式中的每個字元沒有高低、大小的區別。 (2)只能使用圓括號,可以多重使用,圓括號必須成對出現。 (3)VB運算式中的乘號“*”不能省略。 (4)能用內部函數的地方儘量使用內部函數。 例如:數學式寫成VB運算式為: (-b+sqr(b^2-4*a*c))/(2*a)3.關係運算式和邏輯運算式 當使用關係運算符或邏輯運算符時,運算式又稱為關係運算式或邏輯運算式。 關係運算一般表示一個簡單的條件。 例如:age>20、score>80、x+y>z等。 邏輯運算式表示較複雜的條件。 例如:數學中的0<x<5,寫成VB運算式應為0<xAndx<5。4.結果類型 算術運算式中,不同類型的數據計算時結果轉化成精度高的類型。 關係運算式和邏輯運算式的結果是邏輯值:True、False。5.優先順序 圓括號>算術運算符>關係運算符>邏輯運算符。2.5常用內部函數 VB提供了大量的內部函數供用戶調用。本節將分類介紹一些常用的內部函數。 函數的一般調用格式: 格式:函數名([參數表]) 說明:參數表可以有一個參數或逗號隔開的多個參數,多數參數都可以使用運算式。函數一般作為運算式的組成部分調用。2.5.1數學函數
VB提供了大量的數學函數。常用數學函數有三角函數、算術平方根函數、對數函數、指數函數及絕對值函數等。2.5.2轉換函數 轉換函數用於各種類型數據之間的轉換。2.5.3字串函數
VB具有很強的字串處理能力。2.5.4日期與時間函數 日期與時間函數提供時間和日期資訊。第3章簡單VB程式設計
眾所周知,VB應用程式的執行是由事件驅動的,當用戶觸發某一事件時,執行相應的事件過程,這些事件過程之間並沒有特定的執行次序。但在每一個事件過程內部,是有一定的執行控制流程的,這就是通常所說的三種基本結構:順序結構、分支結構、迴圈結構。順序結構是最簡單的一種結構,該結構按語句排列的先後順序執行。本章的主要內容有:VB最基本的幾個對象,與順序結構有關的語句和方法。通過本章的學習,可以進行簡單VB程式設計。退出3.1窗體3.2命令按鈕3.3標簽3.4文本框3.5賦值語句3.6Print方法3.7輸入框3.8消息框3.9注釋語句、結束語句3.10程式調試3.1窗體
創建VB應用程式的第一步是創建用戶介面。用戶介面的基礎是窗體,各種控件對象必須建立在窗體上。 啟動VB後,即在螢幕上顯示一個窗體,如圖3-1所示。3.1.1窗體的主要屬性 窗體的屬性決定了窗體的外觀和操作。窗體的大部分屬性可用兩種方法來設置:通過屬性窗口設置和通過程式代碼設置。有少量的屬性不能在程式代碼中設置。 (1)Caption屬性 設置窗體的標題內容。標題內容應概括說明本窗體作用。 (2)MaxButton屬性和MinButton屬性
MaxButton屬性為True,窗體右上角有最大化按鈕;為False時,無最大化按鈕。
MinButton屬性為True,窗體右上角有最小化按鈕;為False時,無最小化按鈕。
(3)BorderStyle屬性 決定窗體邊框式樣及窗體是否能調整大小。 (4)BackColor屬性和ForeColor屬性
BackColor屬性設置窗體的背景顏色,ForColor屬性設置窗體的前景顏色。窗體的前景顏色是執行Print方法時所顯示文本的顏色。 (5)Height屬性和Width屬性 設置窗體的初始高度和寬度。其單位為Twip。1Twip=1/20點=1/1440英寸=1/567cm。
(6)Left屬性和Top屬性 用於設置窗體左邊框距螢幕左邊界的距離和窗體頂邊距螢幕頂端的距離。其單位為Twip。 (7)Name(名稱)屬性 設置窗體的名稱,在程式代碼中用這個名稱引用該窗體。新建工程時,窗體的名稱缺省為Form1;添加第二個窗體,其名稱缺省為Form2,依次類推。為了便於識別,用戶通常給Name屬性設置一個有實際意義的名稱。
(8)Enabled屬性 屬性值為True或False,設置對象是否能夠對用戶產生的事件做出反應。一般在程式中設置,用於臨時遮罩對窗體或其他控件的的控制。 (9)Moveable屬性 屬性值為True或False,設置是否可以移動窗體。 (10)Visible屬性 屬性值為True或False,設置窗體是否被顯示。用戶可用該屬性在程式代碼中控制窗體的隱現。
(11)Picture屬性 設置在窗體中顯示的圖片。單擊Picture屬性右邊的按鈕,彈出“加載圖片”對話框,用戶可選擇一個圖片檔作為窗體的背景圖片。若在程式中設置該屬性的值,需要使用LoadPicture函數。 (12)WindowState屬性 設置窗體啟動後的大小狀態。 在VB中,雖然不同的對象有不同的屬性集合,但有一些屬性,如Name、Enabled、Visible、Height、Width、Left、Top等,其他控件也有,且具有相似的作用。在後續的章節中,主要介紹各種控件常用的特殊屬性。3.1.2事件 窗體最常用的事件有3種:Click(單擊)、DbClick(雙擊)、Load(裝入)。1.Click事件 程式運行後,單擊窗體觸發該事件。2.DbClick事件 程式運行後,雙擊窗體觸發該事件。3.Load事件
Load事件是窗體被裝入記憶體工作區時觸發的事件。如果這個事件過程存在,就馬上執行它。Load事件過程通常用於啟動程式時,對屬性、變數的初始化以及裝載數據等。
【例3.1】窗體上無最大化、最小化按鈕,程式運行後,在窗體上裝入一幅圖片作為背景,當單擊窗體時,窗體變寬;當雙擊窗體時,則退出。程式運行介面如圖3-2所示。事件過程如下:PrivateSubForm_Load()'裝入圖片
Form1.Picture=LoadPicture("c:\pic\Changcheng.wmf")EndSubPrivateSubForm_click()'單擊窗體
Form1.Width=Form1.Width+1000EndSubPrivateSubForm_DblClick()'雙擊窗體
EndEndSub
說明:上機時,可通過查找檔的方法找一個圖片檔,參照本例中的格式輸入即可。3.2命令按鈕
在VB應用程式中,命令按鈕是使用最多的對象之一,常常用它接受用戶的操作資訊,觸發相應的事件過程,以實現指定的功能。3.2.1屬性1.Caption屬性 設定命令按鈕上顯示的文本。2.Default屬性 該屬性用於設置默認命令按鈕。3.Style屬性和Picture屬性 命令按鈕上除了可以顯示文字外,還可以顯示圖形。若要顯示圖形,首先應將Style屬性設置為1,然後在Picture屬性中設置要顯示的圖形檔。4.Value屬性 該屬性只能在程式運行期間引用或設置。True表示被按下,False(默認)表示未被按下。3.2.2事件 最常用的事件是Click事件。3.3標簽
標籤(Label)主要用於顯示不需要用戶修改的文本。所以,標籤可以用來標示窗體及窗體上的對象,如為文本框、列表框等添加描述性的文字,或者作為窗體的說明文字。3.3.1屬性1.Caption屬性 設置標籤要顯示的內容。它是標籤的主要屬性。2.BorderStyle屬性默認值為0,標籤無邊框;設置為1時,標籤有立體邊框。3.Autosize屬性該屬性用於設置標籤是否自動改變尺寸以適應其內容。4.Alignment屬性確定標籤中內容的對齊方式。5.BackStyle屬性該屬性用於設置背景是否透明。3.3.2事件 常用Click,DbClick事件。
【例3.2】修改例3.1,在圖片上加提示資訊“請單擊圖片”,程式其他功能不變。程式運行介面如圖3-2所示。 操作如下:在窗體上添加一個標籤,將其Caption屬性設置為“請單擊圖片”,BackStyle屬性設置為0(透明),程式代碼不變。3.4文本框
文本框(TextBox)在窗體中為用戶提供一個既能顯示文本又能編輯文本的區域。在文本框內,用戶可以用滑鼠、鍵盤按常用的方法對文字進行編輯,例如進行輸入、刪除、選擇、複製及粘貼等各種操作。3.4.1屬性1.Text屬性 設置文本框中顯示的內容。2.Locked屬性 設置文本框中的內容是否可編輯。3.Maxlength屬性 設置文本框中允許輸入的最大字符數。4.MultiLine屬性 決定文本框是否允許接收多行文本。5.PassWordChar屬性 當MultiLine為False時,該屬性可設置顯示在文本框中的替代符。6.ScrollBars屬性 決定文本框中是否有滾動條。3.4.2事件 文本框除支持Click,DbClick事件,常用的還有Change、LostFocus事件。1.Change事件 當用戶輸入新內容,或程式對文本框的Text屬性重新賦值,從而改變文本框的Text屬性時觸發該事件。2.LostFocus事件 當用戶按下[Tab]鍵時光標離開文本框,或用滑鼠選擇其他對象時觸發該事件,稱為“失去焦點”事件。3.4.3方法 文本框最常用的方法是SetFocus,使用該方法可把游標移到指定的文本框中,使之獲得焦點。當使用多個文本框時,用該方法可把游標移到所需要的的文本框中。其使用格式為:1.對象.SetFocus 【例3.3】程式運行後,隨著用戶的輸入,標籤中同步顯示出用戶對文本框的內容更新的次數。運行效果如圖3-4所示。2.編寫事件過程如下:
PrivateSubText1_Change()
Statici%i=i+1Label1.Caption=iEndSub
請思考:標籤中顯示的數字是文本框中顯示的字元個數嗎?3.5賦值語句
賦值語句是VB程式最常用、最基本的語句,它能為變數提供數據。另外,若要在程式代碼中設置對象的屬性,也要使用賦值語句。賦值語句有兩種格式:格式1:變數名=運算式格式2:[對象名.]屬性名=運算式
賦值語句的作用是:首先計算“=”右邊運算式的值,然後將該值賦給“=”左邊的變數或對象的屬性。在格式2中,若對象名省略,則默認對象為當前窗體。 例如:x=2 '把2賦給xy=x*3 '計算x*3的值,得6,把6賦給yx=x+1 '計算x+1的值,得3,把3賦給xa$="Hello" '把“Hello”賦給a$Text1.Text="你好!" '把“你好!”賦給Text1的Text屬性 【例3.4】已知三角形三邊a,b,c的長,求三角形的面積,輸出三條邊長及面積。 分析:應用程式的介面應該能讓用戶輸入三邊的長,程式在接收用戶輸入的數據後,利用數學公式對數據進行計算,並把結果輸出到螢幕上。已知三角形三邊a,b,c的長,求三角形的面積的公式為: 其中p=(a+b+c)/2。 (1)介面設計 在窗體上建立5個標籤、3個文本框和1個命令按鈕。設置各對象的屬性,如表3-3所示。設計完成的介面如圖3-5所示。(2)編寫事件過程如下:
PrivateSubCommand1_Click()
Dima!,b!,c!,p!,s!a=Text1.Textb=Text2.Textc=Text3.Textp=(a+b+c)/2s=Sqr(p*(p-a)*(p-b)*(p-c))
Label5.Caption=sEndSub3.6Print方法3.6.1Print的格式及功能格式:[對象名.]Print[運算式列表]功能:在對象上輸出運算式的值。說明: (1)對象名:可以是Form(窗體)、Debug(立即窗口)、Picture(圖片框)、Printer(印表機)。省略此項,表示在當前窗體上輸出。例如:Print"23*2=";23*2'在當前窗體上輸出23*2=46Picture1.Print"Good"'在圖片框Picture1上輸出GoodPrinter.Print"Morning"'在印表機上輸出Morning
(2)運算式列表:是一個或多個運算式,若為多個運算式,則各運算式之間用“,”或“;”隔開。省略此項,則輸出一空行。
(3)用“,”分隔各運算式時,各項在以14個字元位置為單位劃分出的區段中輸出,每個區段輸出一項;用“;”分隔各運算式時,各項按緊湊格式輸出。 (4)如果在語句行末尾有“;”,則下一個Print輸出的內容,將緊跟在當前Print輸出內容後面;如果在語句行末尾有“,”,則下一個Print輸出的內容,將在當前Print輸出內容的下一區段輸出;如果在語句行末尾無分隔符號,則輸出完本語句內容後換行,即在新的一行輸出下一個Print的內容。例如:Print1;2;3Print4,5,
Print6Print7,8PrintPrint9,10輸出結果為:12345678910
(3)定位輸出:在Print方法中,可以使用Tab函數對輸出項進行定位。 例如:
PrintTab(10);"姓名";Tab(25);"年齡"
則“姓名”和“年齡”分別從當前行的第10列和第25列開始輸出。 輸出結果如下: 姓名年齡
Print方法中,還可以使用Spc函數,例如:
Print"後面有8個空格";Spc(8);"前面有8個空格"
輸出結果如下: 後面有8個空格前面有8個空格3.6.2Cls方法 格式:[對象名.]Cls
功能:Cls方法清除Print方法顯示的文本或在圖片框中顯示的圖形,並把輸出位置移到對象的左上角。格式中的對象可以是窗體或圖片框,如果省略對象名,則清除當前窗體的顯示內容。3.7輸入框
我們知道,文本框可以接收用戶的輸入。輸入框也可以接受用戶的輸入,但是其風格和用法有別於文本框。VB提供的InputBox函數可生成輸入框。 例如:p$=InputBox("請輸入密碼","密碼框") 執行該語句後,螢幕上顯示如圖3-6所示的輸入框。
每執行一次InputBox函數,用戶只能輸入一個數據,另外,輸入框的樣式是固定的,用戶不能改變。用戶能改變的是輸入框的“提示”和“標題”的內容,“提示”和“標題”都是字串運算式。
InputBox函數的一般格式:
InputBox(提示[,標題][,缺省值][,x座標位置][,y座標位置])
需要注意的是:各項參數次序必須一一對應,除了“提示”不能省略外,其餘各項均可省略,但省略部分也要用逗號占位符跳過。 例如:f$=InputBox("第一行"&vbNewLine&"第二行",,"ddd",200,200) 運行時螢幕的顯示如圖3-7所示。
【例3.5】已知圓半徑,求圓周長和圓面積。 (1)介面設計 在窗體上建立兩個標籤、兩個文本框、兩個命令按鈕。設置各對象的屬性如表3-4所示。(2)編寫事件過程如下:
PrivateSubCommand1_Click()
Dimr!,c!,a!r=InputBox("請輸入半徑","輸入框")
c=2*r*3.14159a=3.14159*r^2Text1.Text=cText2.Text=aEndSubPrivateSubCommand2_Click()
EndEndSub3.8消息框
執行VB提供的MsgBox函數,可以在螢幕上出現一個消息框,消息框通知用戶消息並等待用戶來選擇消息框中的按鈕,MsgBox函數返回一個與用戶所選按鈕相對應的整數。
MsgBox函數的格式:
MsgBox(提示,[,按鈕數值][,標題]) 例如:inta=MsgBox(“密碼錯”,21,“密碼核對”)
執行該語句後,螢幕上顯示如圖3-10所示的消息框。
在MsgBox函數格式中,“提示”和“標題”的含義同InputBox函數,“按鈕數值”的含義複雜一些,“按鈕數值”指定按鈕的數目及類型,使用的圖示樣式及缺省按鈕是什麼等,“按鈕數值”的缺省值是0。本例“按鈕數值”是21,其含義是:消息框中有“×”圖示,有“重試”及“取消”兩個按鈕,缺省按鈕是“重試”按鈕。當用戶單擊消息框中的一個按鈕後,消息框即從螢幕上消失。在上面的語句中,將函數的返回值賦給了變數inta,在程式中可引用inta作相應的處理。 下麵對“按鈕數值”作進一步的解釋。 “按鈕數值”是3個數值之和,這3個數值分別代表按鈕的數目和類型、使用的圖示樣式以及缺省按鈕是什麼。 “按鈕數值”是從上面3個表中各取一個數相加而得。注意:每個表只能取一個數。例如“按鈕數值”是21,系統會自動把它分解成分別屬於上面3個表中的3個值5,16,0。21=5+16+0,這種分解是唯一的。 在程式中,一般把“按鈕數值”寫成符號常數相加的形式,如把21寫成VbRetryCancel+vbCritical+vbDefaultButton1,這樣可使程式含義清楚,從而增加程式的可讀性。當然,把21寫成5+16+0也是允許的。
MsgBox函數的返回值是根據用戶單擊哪個按鈕而定的,見表3-8。 通常,在程式中要根據MsgBox函數返回值的不同作不同的處理,這需要用到第4章仲介紹的選擇結構方面的知識。 MsgBox也可以寫成語句形式,例如:MsgBox"密碼錯","密碼核對"
執行此語句也產生一個消息框,如圖3-11所示。
MsgBox語句沒有返回值,因此常用於比較簡單的資訊提示。3.9注釋語句、結束語句3.9.1注釋語句 為了提高程式的可讀性,通常在程式的適當位置加上必要的注釋。在VB中用“'”或Rem來標識一條注釋語句,格式為:
'|Rem<注釋內容>例如:
Rem2002年編寫
PrivateSubForm_click()
Dima$'定義一個字串變數
a="VisualBasic6.0中文版"'為變數賦值
printa'列印a的內容
EndSub3.9.2結束語句 格式:End End語句用來結束程式的執行,並關閉已打開的檔。 例如:
PrivateSubCommand3_Click()
EndEndSub
該過程用於結束程式,即單擊命令按鈕Command3時,結束程式的運行。3.10程式調試
在程式中發現錯誤並排除錯誤的過程叫做程式調試。VB提供了豐富的調試手段,可以方便地跟蹤程式的運行,排除程式錯誤。3.10.1程式錯誤 程式設計中常見的錯誤可分為以下3種:編譯錯誤、運行錯誤和邏輯錯誤。1.編譯錯誤 編譯錯誤指VB在編譯程式過程中出現的錯誤。此類錯誤是由於不正確的構造代碼而產生的,比如關鍵字輸入錯、遺漏了必需的標點符號等。 例如,Printt"hello"語句會導致編譯錯誤。2.運行錯誤 運行錯誤指編譯通過後,運行代碼時發生的錯誤。此類錯誤通常是代碼執行了非法操作或某些操作失敗。比如,要打開的檔沒找到,除法運算時除數為零,數據溢出等。 例如,print245*1000語句。3.邏輯錯誤 程式運行後,得不到應有的結果,這說明程式存在邏輯錯誤,邏輯錯誤是由於程式結構或演算法錯誤而引起的。 例如,把語句s=s+l中的英文字母l寫成了數字1。3.10.23種模式
VB開發環境有3種模式:設計模式、運行模式和中斷模式。開發環境中的標題能夠顯示出當前所處的模式。1.設計模式2.運行模式3.中斷模式3.10.3調試方法 使用VB提供的調試工具與調試手段,可提高程式調試的效率。1.逐語句執行2.設置中斷點3.使用調試窗口 VB提供了3個供用戶調試程式使用的調試窗口:立即窗口、本地窗口和監視窗口。可以利用這些窗口觀察有關變數的值。可單擊“視圖”菜單中的相應命令打開它們。(1)立即窗口(2)本地窗口(3)監視窗口第4章選擇結構
在程式設計中經常遇到這類問題,它需要根據不同的情況採用不同的處理方法。例如,一元二次方程的求根問題,要根據判別式小於零或大於等於零的情況,採用不同的數學運算式進行計算。對於這類問題,如果用順序結構編程,顯然力不從心。必須借助選擇結構。本章主要介紹實現選擇結構的語句。包括:行If語句、塊If語句、ElseIf語句、SelectCase語句,以及選擇結構在程式設計中的應用。退出4.1塊If4.2ElseIf語句4.3行If語句4.4SelectCase語句4.1塊If4.1.1塊If的格式、功能格式:If條件then
語句塊1[Else
語句塊2]EndIf
說明: (1)“條件”一般為關係運算式或邏輯運算式。 通常把關系運算式或邏輯運算式的值為真時,稱為條件滿足;值為假時,稱為條件不滿足。反之亦然。 (2)語句塊1、語句塊2分別是“條件”滿足或不滿足時,處理方法的描述,可以是若干個語句。 (3)If…Then、Else、EndIf是VB的保留字。 功能: (1)塊If首先判斷“條件”,其值為真時,執行語句塊1;為假時執行語句塊2。當缺省[Else…]中的內容時,該選擇結構只對條件滿足的情況進行處理。執行過程如圖4-1所示。 【例4.1】火車站行李費的收費標準是50kg以內(包括50kg)0.20/kg,超過部分0.50/kg。編寫程式,要求根據輸入的任意重量,計算出應付的行李費。 根據題意計算公式如下:程式代碼如下:
'"計算"按鈕代碼
PrivateSubCommand1_Click()
Dimweightassingle,payassingleweight=Text1.TextIfweight>50Thenpay=(weight-50)*
0.5+50*0.2Elsepay=weight*0.2EndIfText2.Text=payEndSubPrivateSubCommand2_Click()
Text1.Text=""Text2.Text=""EndSubPrivateSubCommand3_Click()
EndEndSub4.1.2塊If的嵌套 所謂塊If語句的嵌套,就是在語句塊1或語句塊2中又包含塊If語句。
【例4.2】任意輸入3個數,按照從大到小的順序輸出。 演算法分析:排序的基本方法,就是比較大小,然後根據比較的結果分別加以處理。本例把3個數分別放在A,B,C中,處理過程為:若A<B為真,交換A,B的值;否則不做處理。這樣就保證了A≥B;然後再用C去比較。具體流程如圖4-3所示。按如圖4-4所示設置介面。程式代碼如下:
'"排序"按鈕代碼
PrivateSubCommand1_Click()
DimaAsSingle,cAsSingle,bAsSinglea=Text1.Textb=Text2.Textc=Text3.Text'三個文本框的數據賦值給變數
Ifa<bThent=aa=bb=t 'a<b時交換a、b的值
EndIf '保證A>BIfc>aThen '用C去比較
Text4.Text=c 'C>A成立,C最大
Text5.Text=aText6.Text=bElseIfc<bThenText4.Text=a'C<B成立,C最小
Text5.Text=bText6.Text=cElseText4.Text=a'C處於中間
Text5.Text=cText6.Text=bEndIfEndIfEndSub'"退出"按鈕代碼
PrivateSubCommand2_Click()
EndEndSub4.2ElseIf語句格式:If條件1then
語句塊1ElseIf條件2then
語句塊2……[Else
語句塊n+1]EndIf
功能: (1)依次判斷條件,如果找到一個滿足的條件,則執行其下麵的語句塊,然後跳過EndIf,執行後面的程式。 (2)如果所列出的條件都不滿足,則執行Else語句後面的語句塊;如果所列出的條件都不滿足,又沒有Else子句,則直接跳過EndIf,不執行任何語句塊。
ElseIf結構的執行過程如圖4-6所示。 【例4.4】輸入一個學生的一門課分數x(百分制),當x≥90時,輸出“優秀”;當80≤x<90時,輸出“良好”;當70≤x<80時,輸出“中”;當60≤x<70時,輸出“及格”,當x<60時,輸出“不及格”。 演算法分析:本例適合用多路分支結構來解決。運行介面如圖4-7所示。程式代碼如下:
'"鑒定"按鈕代碼
PrivateSubCommand1_Click()
Dimscore!score=Text1.TextIfscore>=90ThenText2.Text="優秀"ElseIfscore>=80ThenText2.Text="良好"ElseIfscore>=70ThenText2.Text="中"ElseIfscore>=60ThenText2.Text="及格"ElseText2.Text="不及格"EndIfEndSub
'“退出”按鈕代碼
PrivateSubCommand2_Click()
EndEndSub ElseIf語句,實際完成的是塊If的嵌套,它和塊If嵌套的格式上有很大區別,ElseIf結構只有一對If和EndIf語句。另外應注意:【ElseIf】和【ElseIf】的區別。4.3行If語句
格式:If條件then語句1[Else語句2]
功能:當條件滿足時,執行語句1;條件不滿足時,執行語句2。 從行If的格式和功能不難看出,行If語句是一種簡單的分支結構,只是把一個簡單的塊If結構寫在一行中,減少了語句行,省略了“EndIf”的書寫。行If完全可以用塊If代替。
【例4.6】任意輸入3個數,找出其中的最大值。程式代碼如下:
PrivateSubCommand1_Click()
DimaAsSingle,bAsSingle,cAsSingle,maxAsSinglea=Text1.Textb=Text2.Textc=Text3.Textmax=aIfb>maxThenmax=bIfc>maxThenmax=cText4.Text=maxEndSub4.4SelectCase語句
當對一個運算式的不同取值情況作不同處理時,用ElseIf語句程式結構顯得較為雜亂,而用SelectCase語句將使程式的結構更清晰,SelectCase語句又稱為情況語句。格式:SelectCase測試運算式
Case運算式列表1
語句塊1Case運算式列表2語句塊2…Case運算式列表n語句塊n[CaseElse語句塊n+1]EndSelect
功能:根據“測試運算式”的值,選擇第一個符合條件的語句塊執行。
SelectCase語句的執行過程是:先求“測試運算式”的值,然後順序測試該值符合哪一個Case子句中情況,如果找到了,則執行該Case子句下麵的語句塊,然後執行EndSelect下麵的語句;如果沒找到,則執行CaseElse下麵的語句塊,然後執行EndSelect下麵的語句。說明:
“測試運算式”可以是數值型或字串型運算式;
“運算式列表”形式有以下3種:(1)一個運算式或用逗號隔開的若干運算式(2)運算式1To運算式2(3)Is關係運算符運算式 【例4.7】把例4.3中“鑒定”按鈕的代碼用SelectCase語句改寫。
PrivateSubCommand1_Click()
Dimscore!score=Text1.TextSelectCasescoreCaseIs>=90Text2.Text="優秀" CaseIs>=80Text2.Text="良好"CaseIs>=70Text2.Text="中"CaseIs>=60Text2.Text="及格"CaseElseText2.Text="不及格"EndSelectEndSub第5章迴圈結構
在前面,我們學習了順序結構和分支結構,本章我們將要介紹結構化程式3種基本結構的最後一種——迴圈結構。退出5.1迴圈概述5.2For迴圈5.3While迴圈5.4Do迴圈5.5迴圈的嵌套5.6迴圈的退出5.1迴圈概述
在實際工作中,常遇到一些操作過程不太複雜,但又需要反復進行相同處理的問題,比如,統計本單位所有人員的工資,求全班同學各科的平均成績等等。這些問題的解決邏輯上並不複雜,但如果單純用順序結構來處理,那將得到一個非常乏味且冗長的程式。例如,計算1~100所有奇數的平方和,如果用順序結構來解決這個問題,我們就會給出下麵的程式:PrivateSubForm_Click()
Dims&,x%s=0x=1s=s+x^2x=x+2s=s+x^2x=x+2s=s+x^2……x=x+2'x的值累加到99s=s+x^2Print"1~100之間所有奇數的平方和=";sEndSub
由上面的例子不難看出,程式的絕大部分是在反復執行兩條語句x=x+2和s=s+x^2,不同的是x的值在變化。程式當然非常簡單易懂,但缺乏最基本的編程技巧。要想方便地解決這類問題,最好的辦法就是用迴圈語句。 所謂迴圈就是重複地執行一組語句。 我們用迴圈語句解決上面的問題,程式非常簡短:PrivateSubForm_Click()
Dims&,x%s=0Forx=1To99Step2s=s+x^2NextxPrint"1~100所有奇數的平方和=";sEndSub
在此程式中,第4、5、6條語句構成了一個迴圈,在迴圈過程中第5句被反復執行了50次,從而計算出了1~100所有奇數的平方和。 通過上面的對比可知,迴圈結構非常適合於解決處理的過程相同、處理的數據相關,但處理的具體值不同的問題。我們把能夠處理這類問題的語句稱為迴圈語句。
VB提供了三種不同風格的迴圈語句,它們分別是: (1)For…Next語句; (2)While…Wend語句; (3)Do…Loop語句。 我們將對這3種迴圈語句逐一介紹。5.2For迴圈For迴圈的一般格式如下:
For迴圈變數=初值To終值[Step步長][循環體]Next[迴圈變數]說明:1.格式中各項的說明
迴圈變數:亦稱為迴圈控制變數,必須為數值型。
初值、終值:都是數值型,可以是數值運算式。
步長:迴圈變數的增量,是一個數值運算式。一般來說,其值為正,初值應小於終值;若為負,初值應大於終值。但步長不能是0。如果步長是1,Step1可略去不寫。
循環體:在For語句和Next語句之間的語句序列。
Next後面的迴圈變數與For語句中的迴圈變數必須相同。2.執行過程
For迴圈語句的執行過程如下: (1)系統將初值賦給迴圈變數,並自動記下終值和步長。 (2)檢查迴圈變數的值是否超過終值。如果超過就結束迴圈,執行Next後面的語句;否則,執行一次循環體。 (3)執行Next語句,將迴圈變數增加一個步長值再賦給迴圈變數,轉到(2)繼續執行。 以上執行過程用流程圖描述,如圖5-1所示。
這裏所說的“超過”有兩種含義,即大於或小於。當步長為正值時,迴圈變數大於終值為“超過”;當步長為負值時,迴圈變數小於終值為“超過”。 我們通過分析下麵的程式來進一步理解For語句的執行過程。
Forn=1To10Step3Printn,
Nextn具體執行情況如下:第幾次迴圈 n 與終值比較 執行循環體否
1 1 <10 執行
2 4 <10 執行
3 7 <10 執行
4 10 =10 執行
5 13 >10 停止執行 上面程式的執行結果為:
147103.注意事項
For語句和Next語句必須成對出現,缺一不可,且For語句必須在Next語句之前。 迴圈次數由初值、終值和步長確定,計算公式為:迴圈次數=Int((終值-初值)/步長)+1 【例5.1】求N!(N為自然數)。 分析:由階乘的定義,我們可以得出N!=1*2*…*(N-2)*(N-1)*N=(N-1)!*N,也就是說,一個自然數的階乘,等於該自然數與前一個自然數階乘的乘積。程式如下:
PrivateSubForm_Click()
DimI%,f&,n%n=InputBox("輸入一個自然數:","輸入提示","10")
f=1ForI=1Tonf=f*INextIPrintn;"!=";fEndSub程式的執行過程如圖5-2所示。程式如下:
PrivateSubForm_Click()
DimI%,n%,p#n=InputBox("請輸入n的值(1-32767)")
p=1ForI=1Tonp=p*(4*I*I)/((2*I-1)*(2*I+1))
NextIp=2*pPrint"n=";n;"時","π=";pEndSub5.3While迴圈
前面我們介紹了For…Next迴圈,它適合於解決迴圈次數事先能夠確定的問題。對於只知道控制條件,但不能預先確定需要執行多少次循環體的情況,我們可以使用While迴圈。
While語句格式如下:
While條件
[循環體]Wend1.While語句說明 “條件”可以是關係運算式或邏輯運算式。While迴圈就是當給定的“條件”為True時,執行循環體,為False時不執行循環體。因此While迴圈也叫當型迴圈。2.執行過程
While迴圈的執行過程(如圖5-5所示): (1)執行While語句,判斷條件是否成立。 (2)如果條件成立,就執行循環體;否則,轉到(4)執行。 (3)執行Wend語句,轉到(1)執行。 (4)執行Wend語句下麵的語句。結合下麵的程式段,我們做進一步的說明:
x=1Whilex<5Printx,
x=x+1Wend該程式段的執行結果是:
12343.While迴圈的幾點說明 (1)While迴圈語句本身不能修改迴圈條件,所以必須在While…Wend語句的循環體內設置相應語句,使得整個迴圈趨於結束,以避免死迴圈。 (2)While迴圈語句先對條件進行判斷,然後才決定是否執行循環體。如果開始條件就不成立,則循環體一次也不執行。 (3)凡是用For…Next迴圈編寫的程式,我們都可以用While…Wend語句實現。反之,則不然。 【例5.5】假設我國現有人口12億,若年增長率為1.5%,試計算多少年後我國人口增加到或超過20億。 人口計算公式為:p=y(1+r)n y為人口初值,r為年增長率,n為年數。 程式如下:
PrivateSubForm_Click()
Dimp!,r!,I%p=12r=0.015I=0
Whilep<20p=p*(1+r)
I=I+1WendPrintI;"年後,我國人口將達到";p;"億"EndSub單擊窗體,程式運行結果如圖5-7所示。5.4Do迴圈
與前面介紹的While迴圈相比,Do迴圈具有更強的靈活性,它可以根據需要決定是條件滿足時執行循環體,還是一直執行循環體直到條件滿足。Do迴圈有兩種語句格式。 格式1:
Do{while|until}<條件>[<循環體>]Loop格式2:
Do[<循環體>]Loop{while|until}<條件>
【例5.7】求兩自然數m,n的最大公約數。 設計思想:(1)m除以n得到餘數r;(2)若r=0,則n為要求的最大公約數,演算法結束; 否則執行(3);(3)n→m,r→n,再轉到(1)執行。 程式如下:
PrivateSubcommand1_Click()
Dimm%,n%,r%m=Val(Text1.Text)n=Val(Text2.Text)
r=mModnDoUntilr=0m=nn=rr=mModnLoopPrint"它們的最大公約數是";nEndSub程式運行結果如圖5-12所示。5.5迴圈的嵌套
在一個循環體內又包含了一個完整的迴圈,這樣的結構稱為多重迴圈或迴圈的嵌套。在程式設計時,許多問題要用二重或多重迴圈才能解決。我們前面學過的For迴圈、While迴圈、Do迴圈都可以互相嵌套,如在For…Next的循環體中可以使用While迴圈,而在While…Wend的循環體中也可以出現For迴圈等。 二重迴圈的執行過程是外迴圈執行一次,內迴圈執行一遍,在內迴圈結束後,再進行下一次外迴圈,如此反復,直到外迴圈結束。 【例5.8】列印九九乘法表。 分析:列印九九乘法表,只要利用迴圈變數作為乘數和被乘數就可以方便的解決。 程式如下:
PrivateSubForm_Click()
Dimi%,j%,str$PrintTab(35);"九九乘法表"Fori=1To9Forj=1To9str=i&"×"&j&"="&i*jPrintTab((j-1)*
9+1);str;
NextjPrintNextiEndSub程式運行結果如圖5-13所示。
對於迴圈的嵌套,要注意以下事項: (1)在多重迴圈中,各層迴圈的迴圈控制變數不能同名。但並列迴圈的迴圈控制變數名可以相同,也可以不同。 (2)外迴圈必須完全包含內迴圈,不能交叉。 【例5.10】求 分析:觀察多項式就會發現,奇數項為正,偶數項為負,各項分子的指數與分母的階乘數相同,各相鄰項指數相差為2。因此,可以設計一個二重迴圈,內層迴圈實現每項的計算,外層迴圈完成對各項的求和。程式如下:
PrivateSubcommand1_Click()
Dimx#,n&,s#,i%,j%,k#,p#,f%x=Val(Text1.Text)
n=Val(Text2.Text)
s=0:f=-1Fori=1Tonp=1:k=1Forj=1To2*i-1p=p*jk=k*xNextjf=f*(-1)
s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 台州市物业服务合同
- 主播居间服务合同
- 公共区域物业合同
- 商铺租户跟物业合同
- 专项工作部署管理制度
- 2026年物联网维护人事外包协议
- 代卖二手车交易合同
- 中越外贸交易合同
- 二手车个人交易合同
- 合成旅装备交易合同
- 2026四川成都新都区面向社会招聘全职党建指导员11人笔试模拟试题及答案解析
- 2026年高考数学终极冲刺:题号猜押04 全国卷高考数学第9~10题(多选题)(原卷版)
- 2026年4月自考13140财务会计(中级)试题
- 2026浙江杭州市西湖区人民政府西溪街道办事处招聘编外合同制工作人员2人笔试备考题库及答案解析
- 企业微信报销审批制度
- 钢结构施工平台施工方案(3篇)
- 湖北农业发展集团笔试
- 病理科细胞学常见误诊分析
- 2026年威海市高考数学三模试卷(含答案解析)
- 必修上文言文挖空(答案)
- 2026年两会政府工作报告精神宣讲《聚焦两会关注民生》
评论
0/150
提交评论