高级程序设计语言VB课件_第1页
高级程序设计语言VB课件_第2页
高级程序设计语言VB课件_第3页
高级程序设计语言VB课件_第4页
高级程序设计语言VB课件_第5页
已阅读5页,还剩349页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章

VisualBasic概述1.1VB概述

一.什麼是VB?

VB(VisualBasic)是一種通用高級程式設計語言;

VB是一种OOP開發工具。

VB是可視化的工具二.VB的特點1.可視化2.集成開發環境(IDE)。3.VB與office.(VBA)。4.支持Windows系統的OLE技術。5.支持面向對象程式設計(OOP)技術。三、VB的學習特點易學難學實用聽課與實習作業與檢查1.2VisualBasic簡介一.VB運行在32位windows9x

以上版本的操作系统。二.VB的三種版本:標準版、專業版、企業版。1.3面向對象的

程式設計方法概論一、什麼是面向對象的程式設計方法?二、什麼是對象及類?三、什麼是屬性、事件、方法?四、VB的窗體與控件

一、什麼是OOP

(面向對象程式設計)

OOP是提高程式設計開發效率的面向對象的程式設計方法。它以對象為中心;它是基於對類和對象的程式設計;它以事件驅動機制實現資訊傳遞機制與分佈式系統,網路模型融為一體。二、什麼是對象及類1、類: 定義了一組有共同特性,外觀,行為的對象的範本; 如:汽車類;電話類;機器人類 類:是對象的正式定義。

2、對象1)對象:是類的一個實例;

動作體的邏輯模型。2)對象包括類共同特性下的

具體数据(尺寸,顏色,狀態);

具體操作(事件,方法)3)對象的屬性(property)

对象的事件(event)

对象的方法(method)4)對象是程式運行時刻的基本成分,是一個封裝體。

而這個類的實例—對象,便是一部電話。電話的電路結構和設計佈局可以是一個類品牌型號顏色大小聽筒有拿起和掛上兩種狀態三.什麼是屬性:

对象特征的描述。对象具有属性(Property)每個對象都有屬性。屬性定義了對象的特徵或某一方面的行為。屬性由對象所基於的類決定。屬性值既能在設計時也可在運行時進行設置。四、什麼是“事件”1、事件:是對象可以識別的動作;2、事件:使某個對象進入活動狀態(又稱啟動)的一種操作或動作。3、事件發生:

自動執行一段事先安排的代碼程式。4、事件驅動機制。5、例如:演示五.什麼是“方法”

指的是控制對象動作行為的方式。 為對象安排完成某個任務的“方法”;此方法對應有程式或代碼。 例如:為某電話設計了一個可以打出市話外線的方法程式:撥02。

设计了一个可以打出长途电话的方法程式:撥03。習題4.有一個紅色、充滿氫氣的氣球,如果人不小心鬆開手抓的引線,就會飛走;如果用針刺它,則會爆破。請問,對於氣球對象,哪些是屬性、哪些是事件、哪些是方法?討論:

“机器人”:屬性、事件、方法?六、VB的窗體與控件窗體:VB的窗體是大容器。

例如:WORD的窗口,對話框控件:是放在窗體的部件(組件)

例如:窗口中的文本框,列表框,命令按鈕……窗體與控件都有自己的屬性,事件,方法。事件驅動機制。舉例。小結VB與VB的特點。理解OOP、類、對象、屬性、事件、方法等概念。理解“事件驅動”過程的程式設計原理。1.2“工程”的概念一個應用程式——一個工程檔

(擴展名:.vbp)一個工程檔:

將與工程有關的各種類型檔組織在一起。並不包含這些檔,只是對檔的引用。所以

一個窗體檔可以屬於不同的工程檔。开始:‘工程1.VBP’。(可以更名)1.2VB的開發環境一.標題條二.菜單三.工具欄四.窗體設計器五.控制箱六.彈出式菜單七.工程資源管理器窗口和代碼窗口八.屬性窗口九.“窗體佈局”窗口十.“立即”、“本地”和“監視”窗口十一.對象流覽器P3-P7詳細如下標題條菜單工具欄窗體設計器控件箱工程資源

管理窗口屬性窗口佈局窗口詳細如下

工程資源管理器窗口又稱為工程流覽器窗口,在窗口中會列出當前工程的所有窗體和模組。

工程流覽器窗口也有一個小工具欄,上面的三個按鈕分別用於查看代碼、查看對象和切換檔夾。

單擊“查看代碼”按鈕,則會出現該對象的代碼編輯器窗口。

代碼編輯器是輸入應用程式代碼的窗口。應用程式的每個窗體或代碼模組都有一個單獨的代碼編輯器窗口。彈出式菜單 在要使用的對象上單擊滑鼠右鍵即可打開彈出式菜單。屬性窗口 屬性窗口由標題條、對象列表框和屬性列表框及屬性說明幾部分組成工具欄

VB的工具欄由若干命令按鈕組成,在編程環境下提供對於常用命令的快速訪問。以下給出了各個命令按鈕的名稱及功能。1.3利用VB開發應用程式的

一般步驟一.創建程式的用戶介面二.設置介面上各個對象的屬性三.編寫對象回應事件的程式代碼P8四.保存工程(P9).vbp

工程檔一個工程保存在一個檔夾內五.測試和調試應用程式六.創建可執行程式自己動手!舉例:

P9—P101.4VB的幫助“幫助”是自學的老師;是‘110’。獲得幫助的方法。P36-P37VB的示例程式(完全安裝,MSDN)

可以剪切到自己的程式中。演示小結瞭解什麼是工程。熟悉VB的開發環境。熟練掌握VB開發應用程式的一般步驟。學會使用幫助。習題:P13。VB程式代碼的組織方式一、模組的概念:

1、窗體模組(.frm檔)

2、標準模組(.bas檔)

3、類模組(.cls檔)二、各種模組的功能三、各種模組包含的內容(過程...)四、各種模組如何創建,組織3.1五、過程具有特定書寫格式、包含若干可被作為一個整體執行的代碼組(小程式段)過程的種類:事件過程、通用過程。過程的作用範圍:private

與public事件過程通用過程P41練習事件過程為窗體以及各種對象編寫的用來回應各種事件的代碼行就是“事件過程”。

事件過程存儲在被稱為“窗體模組”的檔中(擴展名.FRM)。在缺省情況下,是“私有的”(Private)。事件過程的代碼框架是由VB系統自動提供的

(圖3-1)。

圖3-1通用過程一個應用程式中可被多個窗體共用的過程被稱為“通用過程”。

通用過程是由事件過程或其他通用過程調用而執行的。在缺省情況下,它是“公有的”(Public),即通用過程可被所有的窗體共用。通用過程的位置:(窗體與標準模組)通用過程的創建圖3-2練習P53第1,2,3題代碼行的書寫規則語句書寫規範練習3.2語句語句是

程式的最基本成份。語句的功能:提供資訊(如定義數據類型),或者執行的某些操作。

語句的一般形式是:

一個語句可寫在一行上;一個語句可寫在多行上;使用“續行標誌”多個語句可以寫在一行上;

語句之間用冒號“:”分隔。

<語句定義符>[語句體]示例語句示例例1,一個語句分寫在多行上:Dimstudent_nameAsString,student_numberAs_String,computerAsInteger,englishAsInteger例2,一行寫多個語句:

x=10:y$="VisualBasic":z=20書寫規範語句中字母不區分大小寫。一個代碼行輸入完後,按回車鍵。系統自動進行語法檢查。系統自動將所有“保留字”的第一個字母改為大寫字母。如,Rem是系統保留字,所以不論輸入的是ReM、還是rem或REM等,系統都會自動變換成Rem。

VB的數據類型 VB要處理各種各樣的數據,如何有效的描述與處理這些數據?

每種數據類型的要素:數據類型常量變數3.3類型定義存儲大小取值範圍運算函數數據類型VB支持的數據類型多達12種。表3-1變數若不加說明,系統均按viarian類型處理,它可以存儲各種類型的數據。

如果需要處理的數值超出了相應數據類型數據的表示範圍,將產生“數據溢出”錯誤。

3.3.1常量數值常量字元常量邏輯型常量 只有兩個取值:True和False。

日期常量符號常量3.3.2數值常量一般的數值常量由正負號、數字和小數點組成,正數的正號可以省略。

不帶小數點的數稱為“整數”(integer,long)。帶小數點的數稱為“實型數”或“浮點數”。(Single,double)。

浮點數值可表示為

mmmEeee

mmm

Deee

兩種形式數值常量示例數值常量示例123-22732742(integer)

1758624-3765410(long)123.4-752.6781.234E-5-9.654E-6(single)-5732.12345-8.573264907D-15(double)&O137

表示這是一個八進制數137,它相當於十進位數95;

&H137

表示這是一個十六進制數137,它相當於十進位數311。

字元常量把一串字元用引號括起來,就構成一個字元常量。例如:

"VisualBasic"、"Howareyou!"、"aB"等都是合法的字元常量。字元常量最多可達65535個字元。注意:“ABC”不等於“abc”

日期常量日期常量要用“#”括起來。

日期型常量的一般表示形式是:

#月月/日日/年年#

如2003年2月15日可表示為:

#1/1/2003#

或者為:#january1,2003#符號常量以符號形式表示的常量稱為“符號常量”。代表常量的符號稱作“常量名”。

Const語句的形式是:

VB還在其內部定義了許多符號常量

如:Vbred,Vbblue…...

[Public|Private]Const<常量名>[Astype]=<數值>變數變數名及類型說明變數作用域與變數說明語句3.3.3變數名及類型說明變數名的命名規則是:

首字元必須是字母;

長度不超過255個字元;

在作用域內必須唯一;

不得包括點號和%、&、!、#、@、$。

為了提高程式的可讀性,變數名之前加上一個約定的首碼,用於表示變數的數據類型。約定的首碼見表3-2。表3-2數據類型首碼數據類型首碼整型int長整型lng單精確度型sng雙精度型dbl邏輯型bln貨幣型cur日期型dt字串型str變體型vnt位元組型byt變數作用域與變數說明語句定義變數的兩個要點:

在什麼地點定義變數用什麼語句定義變數變數作用域變數說明語句OptionExplicit語句變數作用域等級(語句)範圍(地點)

局部

Dim/static在過程中說明,僅在此過程中有效窗體/模組

Dim/Private

在窗體或模組中說明,在此模組或窗體的所有過程內均有效全局(公有)

Public在模組或窗體中說明,在工程內的所有過程中都有效注意:變數兩個要點的應用變數說明語句四種說明語句說明變數的類型:

Dim|Public|Private|Static注意:使用四種說明語句的地點!Dim語句對變數的初始化。變數的類型也可以“隱式說明”。

VB規定的類型說明字元如表3-4。關於字串變數的聲明表3-4說明字元示例意義%x%表示x是整型變數&x&表示x是長整型變數!x!表示x是單精確度變數#x#表示x是雙精度變數@x@表示x是貨幣型變數$x$表示x是字元型變數關於字串變數的聲明字串型變數的長度是可變的。但也可以說明為具有固定長度。方法是:

例如,

DimEmpNameAsString*50

去掉多餘的空格,使用Trim

RTrim

函數。

標準模組中的定長字串變數可說明為

Public

Private。在窗體和類模組中,則必須說明為

Private。

Dim<變數名>AsString

*

sizeOptionExplicit語句

在模組中使用OptionExplicit語句,系統將檢查模組中所有未加顯式說明的變數,一旦發現有這樣的變數存在,就會產生一個出錯資訊,提示使用者改正錯誤。

運算符與運算式VB中運算符和運算式可分為以下三類。

算術運算符與算術運算式關係運算符與關係運算式邏輯運算符與邏輯運算式運算規則3.4算術運算符與算術運算式算術運算符算術運算式3.4.1算術運算符VB的算術運算符有以下幾種:

^乘方運算符;+加;-減(負號)*乘;/除;

\

整除

例:8\6結果等於1Mod取餘運算

例:8Mod6結果等於2&字串連接運算

例:"Visual"&"Basic"結果是VisualBasic

算術運算符的運算次序為:

^→

-(負號)→*和

/→\(整除)→Mod→+和

-

→&算術運算式可以使用圓括號來改變運算次序。

例:

a*b/(c*d)3.14159265*r^2

等都是合法的算術運算式。注意:

P53第9題,第8題關係運算符與關係運算式

關係運算用於對兩個數據進行比較,比較結果為邏輯值“True”或“False”。關係運算符關係運算式3.4.2關係運算符運算符功能<小於<=小於等於>大於>=大於等於<>不等於=等於Is用來比較兩個對象的引用變數關係運算式

字元型數據的關係運算是依照字元的ASCII代碼,自左至右按照“查英語字典”的原則進行。例如:

“aBcd”>“abc”的運算結果是False注意:

x+y>a+b

先做算術運算再做關係運算!邏輯運算符與邏輯運算式

邏輯運算是對邏輯值進行的運算。

邏輯運算符邏輯運算式3.4.3邏輯運算符NOT

邏輯非

NOTA>BAND

邏輯與

例:a>=bANDa>=cOR

邏輯或

例:a>=5ORa<=—5XOR

邏輯異或

邏輯運算的優先次序是:

NOT→AND→OR→XOR邏輯運算式邏輯運算式主要用於表示一些複雜的判斷條件。

運算規則算術運算符—關係運算符—邏輯運算符。不同數據類型的數據進行運算,結果的類型為兩個運算對象中存儲長度較長的那個對象的類型。注意:除法運算是個例外,不論除數與被除數類型如何,結果總是雙精度型。

3.4.4VB公共函數(考點)公共函數是由系統提供的,可隨時隨地調用。

函數調用形式:函數名(參數表)。函數的三要素

函數名與功能,參數,返回值算術函數字元函數轉換函數日期與時間函數格式化函數Format$3.5必須掌握的函數(考綱)函數的上機練習P54第11題與補充題函數的總結函數名功能Sqr(x)求平方根值,x≥0Log(x)求自然對數,x>0Exp(x)求以e為底的冪值,即求exAbs(x)求x的絕對值Hex[$](x)求x的十六進制數值Oct[$](x)求x的八進制數值Sgn(x)求x的符號,當x>0,返回1;x=0,返回0;x<0,返回-1Rnd[(x)]產生一個在(0,1)區間均勻分佈的亂數,若x=0,則給出的是上一次利用本函數產生的亂數Sin(x)求x的正弦值,x單位是弧度Cos(x)求x的余弦值,x單位是弧度Tan(x)求x的正切值,x單位是弧度Atn(x)求x的反正切值,函數返回的是主值區間的弧度值函數名功能Len(x)求x字串的長度(字元個數)Left[$](x,n)從x字串左邊起取n個字元Right[$](x,n)從x字串右邊起取n個字元Mid[$](x,n1,n2)從x字串左邊第n1個位置開始向右起取n2個字元Ucase[$](x)將x字串中所有小寫字元改為大寫Lcase[$](x)將x字串中所有大寫字元改為小寫Ltrim[$](x)去掉x左邊的空格Rtrim[$](x)去掉x右邊的空格Instr([n,]x,"字元")從x的第n個位置起查找給定的字元,返回該字元在x中的位置,n的缺省值為1String[$](n,"字元")得到由n個給定字元組成的一個字串Space[$](n)得到n個空格函數名功能Str[$](x)將數值數據x轉換成字串(含符號位)Val(x)將字串x中的數字轉換成數值Chr[$](x)返回以x為ASCII代碼值的字元Asc(x)給出字元x的ASCII代碼值(十進位數)Cint(x)將數值型數據x的小數部分四捨五入取整Fix(x)將數值型數據x的小數部分舍去Int(x)取小於等於x的最大整數CBool(x)將任何有效的字串或數值轉換成邏輯型CByte(x)將0至255之間的數值轉換為位元組型CDate(x)將有效的日期字串轉換成日期Ccur(x)將數值型數據x轉換成貨幣型數據CLng(x)將數值型數據x轉換成長整數型,小數部分四捨五入CDbl(x)將數值型數據x轉換成雙精度數CSng(x)將數值型數據x轉換成單精確度型Cvar(x)將數值型數據x轉換成變體型CStr(x)將x轉換成字串型函數名功能Date[$]返回系統當前的日期Time[$]返回系統當前的時間Now返回系統當前的日期和時間Year(x)X應為一有效的日期變數、常量或字元運算式本函數返回一個表示x的年號的整數Month(x)X應為一有效的日期變數、常量或字元運算式本函數返回一個表示x的月份的整數Day(x)X應為一有效的日期變數、常量或字元運算式本函數返回1到31之間的整數,表示是一個月的第幾日Weekday(x[,c])X應為一有效的日期變數、常量或字元運算式c是用於指定星期幾為一個星期第一天的常數,缺省時表示一周的星期天為第一天格式化函數Format$Format[$]是專門用於將各種數據按指定格式輸出的函數。它的一般形式是:

式中的fmt$是用於格式控制的字串。

格式控制字元有:

#、0、.、,、%、$、-、+、(、)、E+、E-Format函數僅用於控制數據的外部輸出形式,不會改變數據在電腦內部的存儲形式。

Format[$](<算術運算式>,fmt$)本章總結VB程式的組織方式

(模組與過程)數據、運算式及運算規則:

類型、常量、

變數說明與作用域;(兩個要點)

运算符与表达式、运算规则

公共函數:(三要素)

常用算術函數、轉換函數、字元函數、

日期函數及Format函數的功能及應用

演算法基礎及VB的基本語句

第4章演算法及程式設計基礎賦值語句及InputBox、MsgBox函數

分支結構與分支結構語句迴圈結構與迴圈結構語句程式示例小結演算法及程式設計基礎演算法的特徵演算法的描述基本演算法結構4.1演算法的特徵確定性可行性有窮性輸入性輸出性演算法的描述流程圖。 是使用規定的圖形符號來描述演算法的。

流程圖使用的圖形符號見表4-1。圖4-1和圖4-2分別是兩個演算法示例的流程圖。圖框內的文字用於說明具體的操作內容。上例表現演算法的五個特性圖形符號名稱代表的操作輸入/輸出數據的輸入與輸出處理各種形式的數據處理判斷判斷選擇,根據條件滿足與否選擇不同路徑起止流程的起點與終點特定過程一個定義過的過程流程線連接各個圖框,表示執行順序連接點表示與流程圖其他部分相連接基本演算法結構“結構化程式設計方法”的核心是規定了演算法的三種基本結構:

順序結構、分支結構和迴圈結構。P58

三種基本結構的共同特點是:

1)只有單一的入口和單一的出口;2)每個部分都可能被執行;3)結構內不存在永不終止的死迴圈。賦值語句及InputBox、MsgBox函數

賦值語句InputBox函數MsgBox函數4.2習題:P81:第6,7,8題上機:P41實驗5.1,5.2賦值語句賦值語句的形式不同數據類型數據的賦值圖4-4

一個說明不同數據類型數據賦值方式的簡單程式示例

4.2.1賦值語句的形式賦值語句的一般形式是:

其中var表示某個變數名或屬性名。

先運算,後“賦值”。

賦值語句可使變數或某個對象的某屬性獲得一個新值。示例

賦值語句還可以獲取一個對象的當前屬性值。例如:pw=texpass.text

var=<運算式>賦值語句示例x="Thisis”&“aflower"number%=72+23Lable1.Text="Filenameis:"Text.Font.Size=12Y=(a+b)/2思考:如何將A與B交換內容?不同數據類型數據的賦值有數值意義的字串,OK!

无数值意义的字符串出错!字元數值變數True—”true”;False—”False”邏輯值字元變數Ture:變數的值將為-1;

False:變數的值為0邏輯值整型變數值轉換為字元型賦給變數數值字元變數先求值再轉換為變數類型後再賦值數值數值變數系統處理

運算式類型

變數類型

邏輯變數數值非0值轉換為True賦變數,

0則轉換為False賦變數圖4-4

一個簡單程式示例

InputBox函數InputBox函數

用來接受用戶通過鍵盤輸入的數據。

InputBox函數應用示例

P61

4.2.2N_student=inputbox(“請輸入你的學號”,”程式示例”,230001)運行時,N_student的值為用戶輸入的學號值MsgBox函數MsgBox函數用於向用戶發佈提示資訊,並要求用戶作出必要的回應。MsgBox函數根據用戶選擇單擊的按鈕而返回不同的值MsgBox函數有以下幾種使用方法4.2.3MsgBox函數的幾種使用方法

三種方法都可以獲得如圖所示畫面。 但第二、三種用法將得不到用戶點擊不同按鈕的返回值(或沒有返回值)。Ans=msgbox(“非法數據!”,48,“提示資訊”)printmsgbox(“非法數據!”,48,“提示資訊”)Msgbox“非法數據!”,48,“提示資訊”123參數C1,C2,C3,C4見P62分支結構與分支結構語句

分支結構是程式的基本演算法結構之一。VB提供了實現分支結構的相關語句。If-Then-Else-EndIf結構語句Select-Case-EndSelect結構語句4.3習題:P81第2題上機:P43實驗5.3到5.7If-Then-Else-EndIf結構語句該結構語句的一般形式該結構的變形1該結構的變形2[例4-1]已知三角形三個邊的長度,設計求此三角形面積的程式

[例4-2]一個有多個分支的示例程式

4.3.1If結構語句的一般形式IfeThen[A組語句]Else[B組語句]EndIfIf結構的變形1IfeThenA組語句EndifIfeThen<語句>If結構的變形2Ife1ThenA1組語句

ElseIfe2ThenA2組語句

...Endif[例4-1]已知三角形三個邊的長度,設計求此三角形面積的程式演算法流程圖當a+b>c且a+c>b且b+c>a時,三角形存在,其面積式中:

p=(a+b+c)/2[例4-1]演算法流程圖[例4-2]一個有多個分支的示例程式程式代碼[例4-2]程式代碼PrivateSubCommand1_Click()DimxAsIntegerx=Val(Text1.Text)

Ifx<1ThenText2.Text=“這是小於1的數”

ElseIfx<=10ThenText2.Text=“這是1到10之間的數”

ElseText2.Text=”這是大於10的數”

EndIfEndSubSelect-Case-EndSelect結構語句實現多分支結構的另一種方法。

例4-2的程式代碼也可使用本結構語句實現

4.3.2SelectCaseeCasec1A組語句

Casec2B組語句

...CaseElsen組語句

EndSelecte稱為測試運算式;

c1,c2,...是測試項(1)具體取值:如:3、5、7.2等(當測試運算式是算術運算式時);(2)連續的數據範圍:如:8To20;BToH等;(3)滿足某個判決條件:如:Is>20;Is<="P"等。例4-2使用本結構語句實現PrivateSubCommand1_Click()DimxAsIntegerx=Val(text1.Text)

SelectCasexCaseIs<1Text2.text="這是小於1的數"Case1To10Text2.Text="這是1到10之間的數"CaseElseText2.Text="這是大於10的數"

EndSelectEndSub迴圈結構與迴圈結構語句

迴圈結構是程式的基本演算法結構。所謂迴圈,就是重複地執行某些操作。

當型迴圈和直到型循的不同執行方式Do-Loop迴圈結構語句For-Next迴圈結構語句迴圈嵌套4.4習題:P81第3,4,5,9題上機:P47實驗6.1到6.6回顧(3.30)賦值語句的相容(P60)IF語句的多態(舉例)Elseif語句的迷惑(舉例)多路分支語句selectcase的妙用DO語句的2種結構、2種控制語句關於FOR語句當型迴圈和直到型循的不同執行方式當型迴圈的不同執行方式直到型迴圈的不同執行方式Do-Loop迴圈結構語句Do-Loop迴圈結構語句的四種形式

ExitDo語句

[例4-3]

求兩個自然數的最大公約數程式

4.4.11.DoWhilee2.Do......[ExitDo][ExitDo]......LoopLoopWhilee

3.DoUntile4.Do......[ExitDo][ExitDo]......LoopLoopUntile回顧(4.27)補課問題賦值語句的相容(P60)IF語句的多態(舉例)Elseif語句的迷惑(舉例)多路分支語句selectcase的妙用DO語句的2種結構、2種控制語句關於EXITDO語句ExitDo語句循環體中,執行到ExitDo語句時,就會直接退出本層迴圈,轉而執行Loop語句的下一條語句。最常用的形式是與If-Then語句相結合,即:

IfeThenExitDo表示:如果條件e被滿足,則執行ExitDo語句直接退出本層迴圈。

舉例:P81第3題[例4-3]

求兩個自然數的最大公約數程式在程式中加入對數據的合法性進行檢驗的部分;數據類型可選用長整型。

使用Mod運算符時,切記應前後各加一個空格

程式代碼

最小公倍數?For-Next迴圈結構語句如果事先已知迴圈次數,則可使用For-Next迴圈結構語句。它的一般形式是:

For-Next迴圈結構語句的執行方式注意[例4-4][例4-5]4.4.2Forv=e1Toe2[Stepe3]

[ExitFor]

Nextvv是迴圈控制變數,

e1為初值;

e2為終值;

e3為步長。

當e3=1時,可省略。For-Next迴圈結構語句的執行方式1.計算e1、e2和e3的值;2.給v賦初值;(1與2只做一次)3.判v的值是否超過e2,如果未超過,則執行循環體;如果超過了,則退出迴圈。4.做完循環體後,到Next語句,v增加一個步長;轉3:判別操作。

注意迴圈參數e1、e2和e3中包含的變數如果在循環體內被改變,不會影響迴圈的執行次數;但迴圈控制變數若在循環體內被重新賦值,則迴圈次數有可能發生變化(舉例P82:#4)若使用非整型數做迴圈控制變數和迴圈參數,那麼迴圈次數就有可能發生意想不到的變化。[例4-4]求1到10這十個數的和與連乘積

求若干個數之和或連乘積,可採用“累加”或“累乘”法。累加法是設置一個存放和數的變數,稱為“累加器”,初始值為0,累加過程通過迴圈實現;累乘的演算法設置的是“累乘器”,初始值為1,在循環體內,乘數應與累乘器相乘。設置適當的數據類型。程式代碼

FOR語句的特例關於正常情況下的迴圈次數關於正常情況下迴圈結束後迴圈變數的值EXITFOR語句非正常情況下:迴圈變數的值!!舉例:

P81#3#4迴圈嵌套無論是Do-Loop迴圈,還是For-Next迴圈,都可以在大循環中套小迴圈。注意:小迴圈一定要完整地被包含在大循環之內。

PrivateSubForm_Click()Fori=1To9Forj=1To9Printi;"*";j;"=";i*j;NextjPrintNextiEndSub[例4-6]一個模擬搖獎的程式

4.4.3小結VB的基本語法規則VB的基本元素(常量,變數,函數,運算符,各種運算式)結構化程式的三種結構(順序,分支,迴圈)如何設計演算法?如何用VB實現演算法?[例4-5]大寫字母逆序輸出的程式回顧幾組函數:

Len(),

Mid(),Left(),Right(),Chr,Asc()本例利用Mid函數可以從字串中提取出單個字元如何控制迴圈過程?(使用Len函數);如何處理?(採用連接運算)如何逆序輸出?(程式設計技巧之一)

程式代碼[例4-6]一個模擬搖獎的程式設有100個人中簽,要從中找出中獎人。由機器自動隨機產生1000個1到100間的數據,第1000個亂數據即為中獎人的號碼。

如何產生1~100之間的隨機整數。可用以下公式:

Int((上限

-下限lb+1)*Rnd)+下限

調用

Rnd之前,可先使用無參數的

Randomize語句初始化亂數生成器程式代碼程式示例[例4-7]一個簡易函數計算器程式

(P74)[例4-8]

個人收入調節稅應用程式

(P77)[例4-9]牛頓迭代法程式設計(P78)[例4-10]

原碼轉換成反碼的程式(P79)

4.5[例4-7]一個簡易函數計算器程式預處理:

考虑在文本框中没有输入数据;輸入的數據超出函數的定義域時的出錯處理。

程式中使用的IsNumeric(s)函數用於檢測引數s是否是一個可轉換成數值的數字串,如果是,則返回邏輯值True,否則返回False。

程式代碼

PrivateSubcmd1_Click()

IfText1.Text=""ThenMsgBox"請輸入X值!",48+vbOKOnly,"程式示例"Text1.SetFocus

ElseIfIsNumeric(Text1.Text)ThenX=Val(Text1.Text) ‘求函數

Label2.Caption=“Exp(X)=:” ‘換門牌

Text2.Text=Str(Exp(X)) ‘送結果

ElseMsgBox"輸入數據錯誤!",48+vbOKOnly,"程式示例"Text1.Text="”

EndIfEndSubexp效果?初始介面MsgBox“請輸入X值!”,48+vbOKOnly,"程式示例"顯示結果按月收入額計個人收入調節稅的計稅公式式中,pay為納稅人的月收入。

程式代碼[例4-8]個人收入調節稅應用程式

PrivateSubCommand1_Click()DimtaxAsSingle,payAsSinglepay=Text1.Text

IfCheck1.Value=1orpay<=1000Thentax=0

ElseIfpay<=1500Thentax=(pay-1000)*0.05

ElseIfpay<=2000Thentax=25+(pay-1500)*0.1…………...

Else ‘什麼情況下執行??tax=700+(pay-4500)*0.4

EndIfText2.Text=taxEndSub思考:1、判斷順序2、if--then--elseif的結合?3、改成selectcase語句?[例4-9]利用牛頓迭代法求方程根xex-1=0at:x0=0.5<=10-7

演算法說明

P78程式代碼

P79OptionExplicitPrivateSubcmd1_Click()DimxAsSingle,x1AsSingle,EpsAsSinglex=InputBox("輸入初始值x:","牛頓迭代法")Eps=InputBox("輸入允許誤差Eps:","牛頓迭代法")

Dox1=x ‘總把新符換舊符

x=x1-(x1*Exp(x1)-1)/(Exp(x1)*(x1+1))

Loop

UntilAbs(x-x1)<=EpsText1.Text=Str(x)EndSub[例4-10]

原碼轉換成反碼的程式Mid函數的另外一個功能:

可以用在赋值语句中:其功能是用指定的字元替換字串中指定位置的內容。例s=“abcdef”

mid(s,4,3)=“xyz”‘s的結果為“abcxyz”程式代碼

PrivateSubCommand1_Click()DimSourceAsString,IAsIntegerSource=Text1.Text

IfMid(Source,1,1)<>"1"ThenText2.Text="正數沒有補數"Else

ForI=2ToLen(Source)IfMid(Source,I,1)="1"Then

Mid(Source,I,1)="0"Else

Mid(Source,I,1)="1"EndIf

NextIText2.Text=Source

EndIfEndSubMid函數的新作用本章小結演算法及程式設計基礎賦值語句及InputBox、MsgBox函數

分支結構與分支結構語句迴圈結構與迴圈結構語句程式示例習題(P81--P83第10--13題)上機(P41--P55)(5月16日交)時間:5月27日中午要求:60分鐘做完窗體上注明:

班級學號姓名隨機抽題臨時點題可加分1.實驗書P522.實驗書P55(6--6)3.實驗書P604.實驗書P63(7--5)5.實驗書P64(7--7)6.實驗書P72(8--4)7.教材P116第9題8.教材P115第2題關於期中上機考試數組的概念

數組可用於存儲成組的有序數據。使用數組就是用一個相同的名字引用這一組變數中的數據,這個名字被稱為數組名。數組命名與數組元素

數組定義

數組的結構

數組函數及數組語句

5.1數組命名與數組元素數組名的命名規則與簡單變數命名規則一樣。

數組內的每個成員稱為數組元素,數組元素又稱為下標變數,數組元素的類型也就是數組的類型。

數組元素名的一般形式是:

其中:下標可以是常量、變數或算術運算式。當下標的值為非整數時,會自動進行四捨五入。

5.1.1數組名(下標1[,下標2……])數組定義數組說明語句數組的初始化5.1.2定義:1、名稱和數據類型

2、維數和每一維的上、下界的取值範圍。數組類型:

靜態數組和動態數組。數組說明同變數定義(地點?語句?)Optionbase1語句的功能維的大小=上界--下界+1數組元素總個數=各維數連乘數組類型定義(例)數組維說明示例數組說明語句示例 DimA(6)AsInteger PrivateName(1999To2002)AsString*8 DimB(2,1to2)AsIntegerA(6)A(5)A(4)A(3)A(2)A(1)A(0)Name(2002)Name(2001)Name(2000)Name(1999)B(2,2)B(2,1)B(1,2)B(1,1)B(0,2)B(0,1)數組維說明示例DimMAsintegerConstNAsInteger=5DimA(N)AsInteger√DimB(1To6.6)AsInteger√DimC(1To2+3)AsInteger√ DimD(0ToM)AsInteger

×數組初始化數值型的數組元素初始值為零變長字元類型的數組元素初始值為空字元串定長字元類型的數組元素初始值為指定長度個數的空格布爾型的數組元素初始值為False變體(Variant)類型的數組元素的初始值是Empty。

數組的結構一維數組的結構

二維數組的結構

三維數組的結構

5.1.3一維數組的結構DimStrA(8)AsInteger線性順序StrA(0)StrA(1)StrA(2)StrA(3)StrA(4)StrA(5)StrA(6)StrA(7)StrA(8)StrA(8)StrA(7)StrA(6)StrA(5)StrA(4)StrA(3)StrA(2)StrA(1)StrA(0)存儲結構邏輯結構存儲結構二維數組的結構OptionBase1 DimTable(3,4)AsInteger

按列存放Table(1,1)Table(2,1)Table(3,1)Table(1,2)Table(2,2)Table(3,2)Table(1,3)Table(2,3)Table(3,3)Table(1,4)Table(2,4)Table(3,4)Table(3,1)Table(2,1)Table(3,2)Table(3,3)Table(3,4)Table(2,2)Table(2,3)Table(2,4)Table(1,1)Table(1,2)Table(1,3)Table(1,4)存儲結構邏輯結構存儲結構三維數組的結構Page(3,1,1)Page(2,1,1)Page(1,1,2)Page(3,2,1)Page(2,2,1)Page(1,2,2)Page(3,3,2)Page(2,3,2)Page(1,3,2)Page(3,1,1)Page(2,1,1)Page(1,1,1)Page(3,2,1)Page(2,2,1)Page(1,2,1)Page(3,3,1)Page(2,3,1)Page(1,3,1)邏輯結構存儲結構Page(1,1,1)Page(2,1,1)Page(3,1,1)Page(1,2,1)…Page(3,3,1)Page(1,1,2)Page(2,1,2)Page(3,1,2)Page(1,2,2)…Page(3,3,2)DimPage(3,3,2)ASInteger(行,列,頁)存放:逐頁逐列(先變左邊下標)邏輯結構存儲結構數組函數及數組語句LBound

函數與UBound函數

Erase語句

ForEach…Next結構語句

5.1.4LBound

函數;UBound函數Lbound的功能:是返回數組某維的維下界的值(例)Ubound的功能:是返回數組某維的維上界的值(例)例如:dima(-2to3,0to5) ……...printLbound(a),Lbound(a,2)printUbound(a),Ubound(a,2) ……….Lbound函數應用示例PrivateSubForm_Click()DimA(5)AsInteger,DimB(3to8,200to208)PrintLBound(A),LBound(B,1),LBound(B,2)EndSub程式執行結果是:0

3

200Ubound函數應用示例PrivateSubForm_Click()DimA(5)AsInteger,DimB(3to8,200to208)PrintUBound(A),UBound(B,1),UBound(B,2)EndSub程式執行結果是:5

8

208Erase語句Erase語句的功能是重新初始化固定大小數組的元素,或者釋放動態數組的存儲空間。Erase語句應用示例Erase語句應用示例PrivateSubForm_Click()DimA(3)AsInteger,B()AsIntegerA(1)=1:A(2)=2:A(3)=3ReDimB(4)‘為B分配4個整數單元(8B)

PrintA(1),A(2),A(3)EraseA,B‘A充0,B的單元釋放

PrintA(1),A(2),A(3)EndSubForEach…Next結構語句ForEach…Next語句是專門用來為數組或對象集合中的每個元素重複執行一組語句而設置的。ForEach…Next語句應用示例OptionBase1PrivateSubForm_Click()DimA(12)AsInteger,VAsVariantDimIAsInteger,JsAsIntegerJs=14ForI=1To12A(I)=JsJs=Js+7NextIJs=0

ForEachVInAJs=Js+1PrintV;If(JsMod6)=0ThenPrint

NextVPrintEndSub窗體上顯示的結果是:

142128354249566370778491數組賦值輸出每個元素輸出6個,換行數組的基本操作數組元素的賦值數組元素的輸出

數組元素的引用

5.2數組元素的賦值用賦值語句給數組元素賦值

通過迴圈逐一給數組元素賦值

用InputBox函數給數組元素賦值

用Array函數給數組賦值

5.2.1用賦值語句給數組元素賦值DimScore(3)AsIntegerDimTwo(1,1to2)asintegerScore(0)=80 Score(1)=75 Score(2)=91 Score(3)=68Two(0,1)=Score(0)

…K=4Score(K-2)=91PrivateSubForm_Click()DimA(6)AsInteger,IAsIntegerDimB(1to2,1to2)AsInteger,JAsIntegerForI=0To6‘使用迴圈給一維數組賦值並輸出

A(I)=Int(99*Rnd)+1

Print

A(I);

NextI

PrintForI=1To2 ‘利用二重迴圈給二維數組賦值並輸出

ForJ=1To2B(I,J)=I*10+J ‘外迴圈是I,行

PrintB(I,J);NextJ

Print

NextIEndSub用InputBox函數給數組元素賦值PrivateSubForm_Click()DimA(6)AsInteger,IAsIntegerForI=0To6A(I)=InputBox("給元素賦值","數組A賦值")PrintA(I);NextIPrintEndSub慢,適合少量數據OptionBase1PrivateSubForm_Click() DimAAsVariant ‘A是變數

DimB(4)AsVariant ‘B是數組

A=Array(5,4,3,2,1) PrintA(1);A(2);A(3);A(4);A(5) A=Array(1.5!,2.3!,3.6!,4.1!) PrintA(1);A(2);A(3);A(4);A(5);A(6) A=“NOArray” ‘A不是數組了

PrintA B=Array(1,2,3,4,5,6) ‘錯誤語句原因??EndSub注意:只對Varian類型的變數!數組元素輸出示例 P9411121314152019181716212223242530292827261.規律?

2.如何设计算法?

3.用什么语句实现算法?picture1Text1OptionExplicit:OptionBase1PrivateSubCmd1_Click()DimA(4,5)AsInteger,KAsIntegerDimIAsInteger,JAsInteger,SAsStringK=10ForI=1To4IfIMod2<>0Then‘處理奇數行

ForJ=1To5K=K+1A(I,J)=KNextJElseForJ=5To1Step–1 ‘處理偶數行

K=K+1A(I,J)=KNextJEndIfNextI'生成數組IfCheck1.Value<>1ThenForI=1To4 '輸出到圖片框

ForJ=1To5Picture1.PrintA(I,J);NextJPicture1.PrintNextIElseForI=1To4 '輸出到多行文本框

ForJ=1To5S=S&Str(A(I,J))NextJS=S&Chr(13)&Chr(10)NextI

Text1.Text=SEndIfEndSub'數組輸出對text1的屬性有要求!

回顧(4月20日)為什麼要使用數組?

數組的特點

(程序设计=數據結構+演算法)如何定義數組?

固定大小的數組;動態數組

数组的结构(逻辑结构;物理结构)如何使用數組?

函數:Ubound()與Lbound()

數組的賦值;數組的輸出今天:數組的引用?數組元素的引用數組元素的下標在規定的維界範圍之內,否則就會產生“數組越界”的錯誤。

【例5-1】

隨機產生12個兩位數,存放在數組Com中,並從中找出一個最大數和一個最小數。

5.2.3OptionExplicitOptionBase1PrivateSubForm_Click()DimCompare(12)AsInteger

DimIAsIntegerDimMaxAsInteger,MinAsIntegerRandomizeForI=1To12Compare(I)=Int(90*Rnd)+10PrintCompare(I);NextIPrint

生成12個隨機整數

Max=Compare(1):Min=Compare(1)ForI=2To12IfCompare(I)>MaxThen

Max=Compare(I)ElseIfCompare(I)<MinThen

Min=Compare(I)EndIfNextIPrint"最大數是:";MaxPrint"最小數是:";MinEndSub思考:求最大數的位置?動態數組的特點:

不知數組應有多大能滿足需要,在運行程式時改變數組的大小能力。定義動態數組分為兩步:

1.首先定義不指明大小的數組。Public|Private|Dim|Static

數組名()[AS類型]2.用ReDim語句來動態地定義數組的ReDim[Preserve]數組名(維界定義)動態數組5.3OptionBase1

DimDynArry()AsInteger

…….PrivateSubSub1()DimXAsInteger,YAsInteger

ReDimDynArry(9)

……..

X=2:Y=4

ReDimDynArry(X,Y)

EndSub動態數組舉例Redim語句中Preserve的使用 ReDim語句中缺省關鍵字Preserve時,當前存儲在數組中的值全部丟失;

若要保留原數組的內容,應在ReDim語句中使用關鍵字Preserve,並只能改變最後一維的維上界。

舉例OptionBase1DimDynArry()AsInteger

PrivateSubForm_Click()

DimIAsInteger,JAsInteger

ReDimDynarry(3,3)

Debug.Print"數組Dynarry(3,3)的值"

ForI=1To3

ForJ=1To3

Dynarry(I,J)=I*10+J

Debug.PrintDynarry(I,J);

NextJ

Debug.Print

NextI

ReDimPreserveDynarry(3,4)Debug.Print"數組Dynarry(3,4)的值"ForI=1To3

ForJ=1To4

Debug.PrintDynarry(I,J);

NextJ

Debug.Print

NextIEndSubDynarry(3,3)的值為:

111213212223313233Dynarry(3,4)的值為

1112130

2122230

3132330問?!控件數組基本概念

【例5-2】

使用控件數組,編寫一個能進行加、減、乘、除運算的運算器的程式兩條語句(LOAD與UNLOAD)

5.4基本概念5.4.1

控件數組是由一組具有共同名稱和相同類型的控件組成,數組中的每一個控件共用同樣的事件過程。 控件數組的名字由控件的Name屬性指定,每個元素的下標則由控件的Index屬性指定.第一個元素的下標是零(0),最大索引值為32767。引用方式同普通數組元素.操作演示Command2:有5個元素,各元素分別表示+、-、*、/和Mod運算符。

Command3的Caption屬性值設為“清屏”;Command4的Caption屬性值是設為“=”;Command5的Caption屬性值設為“退出”。編寫一個運算器的程式

Command1:

有11個元素,前10個元素分別表示10個數字,第11個元素表示小數點。

共用Command1_Click()事件過程;Load語句格式:Load

Object(Index)功能:向控件數組添加控件Unload語句格式:UnloadObject(Index)功能:刪除用Load語句產生的對象數組元素舉例P100OptionExplicitDimTextNumPrivateSubCommand1_Click()IfTextNum<3ThenTextNum=TextNum+1LoadText1(TextNum)

Text1(TextNum).Visible=TrueText1(TextNum).Top=Text1(TextNum-1).Top+_

Text1(TextNum-1).Height+100Text1(TextNum).Text="文本框"&Str(TextNum)EndIfEndSub回顧數組的基本概念數組的基本操作數組的應用實例?數組與常用演算法精妙的結合難點,重點

N遍的重複===熟練掌握排序演算法的創新!程式示例【例5-3】用選擇法對10個數進行排序

【例5-4】順序查找與二分查找程式【例5-11】將數組中重複元素删除【例5-6】有關矩陣的程式設計

【例5-7】求出裴波拉契數列的前18項【例5-8】統計字母在文本中出現的次數

【例5-9】找出100以內的所有素數【例5-10】找出5000以內的親密對數

5.5用選擇法對10個數進行排序設在數組Sort中存放10個無序的數,要將這10個數按升序重新排列。演算法講解…..比較次數:N*(N-1)/2如何寫程式???如何改進演算法?直接排序法Flash動畫掌握了嗎?(改題)

ForI=1To10Sort(I)=Int(Rnd*(100

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论