410 likes | 554 Views
Visual Basic 程式設計. 講師:戴志華 hana@ arbor.ee.ntu.edu.tw 國立台灣大學電機工程研究所. 第三章 變數、運算子與流程控制. 變數 運算子 流程控制. 變數. 程式執行時用來記錄資料的地方 每個變數對應一塊記憶體空間 各式的變數功能不同 先宣告再使用. 變數型別. 變數型別( cont’d). 變數型別( cont’d). Boolean: test = true 整數 : test = 10 小數 : test = 1.0 日期( Date): test = #12/30/1999#
E N D
Visual Basic 程式設計 講師:戴志華 hana@arbor.ee.ntu.edu.tw 國立台灣大學電機工程研究所
第三章 變數、運算子與流程控制 變數 運算子 流程控制
變數 • 程式執行時用來記錄資料的地方 • 每個變數對應一塊記憶體空間 • 各式的變數功能不同 • 先宣告再使用
變數型別(cont’d) • Boolean: test = true • 整數: test = 10 • 小數: test = 1.0 • 日期(Date): test = #12/30/1999# • 字串(String): test = “這是字串”
宣告變數 • Dim 變數名 [As 型別] • Ex1. Dim MyName As String • Ex2. Dim MyName As String, MyAge As Integer • What about “Dim MyName,MyAge As Interger” ? • 使用型別代碼: Dim 變數名[代碼] • Ex3. Dim intMyAge% • 好習慣: 宣告在最上面
變數型別(cont’d) • 預設型別:Variant • 數值型態:16 bytes • 字串型態長度:22+字串長度 bytes
隱含宣告 • VB可以直接使用未宣告的變數 • VB會自動宣告成variant (原Basic的特性) • 造成維護不便 • 打錯字 …^_^ • 取消隱含宣告
隱含宣告(cont’d) 注意: 只對之後增加 的模組有效
Variant • 不定型別 • 用VarType測試 Dim vntVariant vntVariant=0.01 Print VarType(vntVariant) vntVariant=0.01! Print VarType(vntVariant) vntVariant=0.01# Print VarType(vntVariant) vntVariant=“test” Print VarType(vntVariant)
Variant(cont’d) • vbEmpty (0) • 變數未初始化 • 型別轉換: • CBool, CByte, CInt, CLng, CSng, CDbl…… • intVariable=CInt(vntVariable) • 由範圍大的型別轉為範小的型別時,不能超過範圍小的型別的範圍 Dim vntTest Print VarType(vntTest)
變數命名規則 不建議使用 • 以字母開頭(可用中文字) • 僅能由字母、數字及底線組成 • 變數名長度不能超過255字元 • 不可使用一些特殊符號(型態宣告字元)和句點 • ex. %,&,!,#,@,$ • 不能使用關鍵字 • Dim, As…… • 在同一個命告範圍(scope)內不得使用相同名稱
變數命名規則(cont’d) • 下列何者正確? • intMyAgem, 38Girl, intMy.Age, 時間, Print, My_課本 • Try It! 改改看,看看 VB如何處理
變數命名規則(cont’d) • 在同一個命告範圍(scope)內不得使用相同名稱 Option Explicit Dim i As Integer 1.[Dim i As Integer] Private Sub Command1_Click() 2.[Dim i As Integer] End Sub Private Sub Command2_Click() …… End Sub 在模組內宣告 在函示內宣告
變數的有效範圍和生命週期 • 區域變數 • 在函式內部使用Dim或Private宣告的變數 • 只有目前函式看的到 • 函式執行結束, 區域變數值會跟著結束消失(靜態變數例外) • 全域變數 • 在模組或form內部使用Dim宣告的變數 • 公用 Public MyCount As Interger • 私用 Private MyCount As Interger • 靜態變數 • Static MyCount as Integer • 函數執行結束, 區域變數值會保留
變數的有效範圍和生命週期 (cont’d) • [Public|Private|Dim|Static] 變數名 As 型別 • 在函式內不能用Public宣告 • 在函式內宣告的變數,只在該函式內有效 • Ex1. Option Explicit Private Sub Command1_Click() Dim i As Integer Print i End Sub Private Sub Command2_Click() Print i End Sub Error!!
變數的有效範圍和生命週期 (cont’d) • Ex2. Option Explicit Private Sub Command1_Click() Dim i As Integer i=1 Print i End Sub Private Sub Command2_Click() Dim i As Integer i=2 Print i End Sub Ok!!
變數的有效範圍 (cont’d) Dim a As Integer Private b As Integer Public c As Integer Private Sub Command1_Click() Print a Print b Print c End Sub Private Sub Command2_Click() 1.[Print Form1.a] 2.[Print Form1.b] 3.[Print Form1.c] End Sub Form1 Form2
變數的有效範圍 (cont’d) 模組一 模組二 Public Public Private Private Private Private 比較命名範圍與有效範圍的不同處
靜態變數 • 靜態變數 • Static [Public|Private] 變數名…… • 用於函式內 Private Sub Form1_Click() 1.[Dim ClickCount As Integer] 2.[Static ClickCount As Integer] ClickCount=ClickCount+1 Print ClickCount End Sub Try It!
常數 • 常數=不變的變數 • 如何避免不小心改到? • [Public|Private] Const 變數名 = 初始值 Dim Pi As Single Pi=3.1415926 Const Pi As Single = 3.1415926
變數命名規則-建議 • 範圍: • g:在模組中以Public宣告 • m:在模組中以Dim或Private宣告 • [無]:在函式中以Dim或Private宣告 • 型態: • 以三個字母代表型態 範圍 資料型態 變數名稱
變數命名規則-建議(cont’d) • 例: • g_intMyAge • m_strMyName • intMyMoney • 變數取名不一定要拘泥於規定,前後一致即可 • 多人開發:決定變數取名方式
算術運算子 • 先後順序 • ^ > -(負數) > *,/ > \ > Mod > +,- > &
運算式練習 • ax2+bx+c=0
IF Statement If (比較式) Then 程式碼 End If Year>2000? 是 Print…… 否 例: If (year>2000) Then Print “21世紀” End If 其它程式
IF Statement(cont’d) If (比較式) Then 程式碼1 Else 程式碼2 End If Year>2000? 是 Print…… 否 例: If (year>2000) Then Print “21世紀” Else Print “不是21世紀” End If Print… 其它程式
IF Statement(cont’d) Year>2000? If (比較式1) Then 程式碼1 ElseIf (比較式2) 程式碼2 Else 程式碼3 End If 是 否 Print…… Year=2000? 是 例: If (year>2000) Then Print “21世紀” ElseIf (year=2000) Then Print “千禧年 Else Print “都不是” End If Print…… 否 Print…… 其它程式
比較運算子 • 運算結果為True或False
邏輯運算子 • 運算結果為True或False
比較運算子與邏輯運算子 • 複合比較式 • Ex. (a>5 And b<4 Or Not c) • 一般而言,比較運算子的優先順序大於邏輯運算子 • 試試看 Private Sub Form_Click() If (True And True) Then Print “True” Else Print “False” End If End Sub
Example • 1. (8 > 3) And ("a" = "b") False • 2. (8 > 3) Or ("a" = "b") True • 3. Not (8 > 3) False • 年齡 20 ≦age < 60 之間的條件式: (age >= 20) And (age < 60)
Select Case Statement Select Case Day Case 1 …… Case 2 …… Case 3 …… Case 4 …… Case Else …… End Select
Select Case Statement(cont’d) Select Case Day Case 1 ‘If (Day=1) …… Case 2,3 ‘ElseIf (Day=2 Or Day=3) …… Case 4 to 10 ‘ElseIf (Day>=4 And Day<=10) …… Case Is>10 ‘ElseIf (Day>10) …… Case Else ‘Else …… End Select
使用If If (Month>=1 And Month <=3) Then Print “春天” ElseIf (Month>=4 And Month <=6) Then Print “夏天” ElseIf (Month>=7 And Month <=9) Then Print “秋天” ElseIf (Month>=10 And Month <=12) Then Print “冬天” Else Print “打錯了” End If
使用Select Case Select Case Month Case 1 to 3 Print “春天” Case 4 to 6 Print “夏天” Case 7 to 9 Print “秋天” Case 10 to 12 Print “冬天” Case Else Print “打錯了” End Select
Try It! • 輸入月分,傳回當月的天數 • 1月31天 • 2月28天 • …… • 7月31天 • 8月31天 • …… • 使用If與Select Case