記事本程序語言_第1頁
記事本程序語言_第2頁
記事本程序語言_第3頁
記事本程序語言_第4頁
記事本程序語言_第5頁
已閱讀5頁,還剩28頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、講一下VBScript。主要面向菜鳥,懂得編程的朋友就不要浪費時間了,如果你想接觸以下VBScript也可以。但既然有編程基礎推薦直接去找一些參考書來讀。會比較快。什么是VBScript呢?VBScript的全稱是:Microsoft Visual Basic Script Editon.(微軟公司可視化BASIC腳本版)。正如其字面所透露的信息,VBS(VBScript的進一步簡寫)是基于Visual Basic的腳本語言。我進一步解釋一下,Microsoft Visual Basic是微軟公司出品的一套可視化編程工具,語法基于Basic.腳本語言,就是不編譯成二進制文件,直接由宿主(hos

2、t)解釋源代碼并執行,簡單點說就是你寫的程序不需要編譯成.exe,而是直接給用戶發送.vbs的源程序,用戶就能執行了。我知道菜鳥現在最關心的就是用什么工具來開發VBS程序了,答案是:記事本(Notepad).我不是開玩笑,其實任何一種文本編輯器都可以用來開發VBS開發,只不過記事本是由系統自帶的,比較好找而已. 盡管如此,我還是建議你去下載一個專業的文本編輯器,因為這些工具可以提供 "語法高亮"等功能,更加方便開發,用哪一個隨你喜好,我比較喜歡Edit Plus (2.10).OK,我們先來寫一個VBScript程序熱熱身.REM 輸入并回顯你的名字'使用Input

3、Box和Msgbox函數Dim name,msgmsg="請輸入你的名字:"name=Inputbox(msg,"名稱")Msgbox(name)把上面的程序清單輸入到記事本里面,然后保存為以.vbs為擴展名的文件("保存類型"里面選擇"所有文件").然后雙擊運行,觀察運行結果. 注意:請自己輸入程序清單,不要復制->粘貼!我來解釋一下這個程序,第一行和第二行的開頭分別是"REM"語句和" ' ",這兩個東西的作用是相同的,表示本行是注釋行,就是說這兩行什么也不

4、干,只是用來說明這段程序的功能,版權信息等等. 注釋行是程序最重要的部分之一,盡管它不是必需的,但對于其他人閱讀源代碼,以及自己分析源代碼是很有好處的. 好的習慣是在必要的地方加上清晰,簡潔的注釋。Dim用來聲明一個變量,在VBS中,變量類型并不是那么重要,就是說VBS會幫你自動識別變量類型,而且變量在使用前不一定要先聲明,程序會動態分配變量空間. 在VBS中你不用考慮name儲存的是一個整數還是一個小數(學名叫"浮點數"),也不用考慮是不是字符串(一串字符,比如:"Hello World"),VBS會自動幫你搞定. 所以第三行語句可以刪除,效果不會變,

5、但我強烈反對這么做,一個變量的基本原則就是:先聲明,后使用.變量名用字母開頭,可以使用下劃線,數字,但不能使用vbs已經定義的字,比如dim,也不能是純數字。1/39頁下一行被稱之為"賦值","="是賦值符號,并不是數學中的等于號,盡管看起來一樣.這是正統的理解,你要理解成等于也沒有什么不可. 賦值號的左邊是一個變量,右邊是要賦給變量的值,經過賦值以后,msg這個變量在程序中等同于"請輸入你的名字:"這個字符串,但當msg被再次復制的時候,原值就會消失. 不光字符串,其他任何變量都這樣被賦值,例如: a=2,b=12.222等等。再往

6、下,Inputbox和Msgbox是VBS內建的函數,一個函數就相當于一個"黑箱",有輸入(參數)和輸出(返回值),你可以不用了解函數是怎么運作的,只要了解這個函數能干什么就行了,我們也可以定義自己的函數,不過那要等到以后再講. 現在我們只要了解,一個函數可以有返回值也可以沒有,可以有參數也可以沒有. 例如Inputbox就是有返回值的函數,我們用賦值號左邊的變量來"接"住InputBox的返回值-就是你輸入的內容. 在inputbox右邊的括號里是參數列表,每個參數用","分隔開,每個參數有不同的功效,比如第一個參數會顯示在提示里,

7、我們把msg這個變量作為第一個參數傳給了Inputbox 函數,而msg="請輸入你的名字:",所以我們在對話框的提示欄就會看到“請輸入你的名字:” 第二個參數是對話框的標題,我們用直接量(學名叫"常量",這里是"字符串常量")傳遞給函數,當然你也可以傳遞變量. Inputbox還有很多參數,比如你在"名稱"后面再加一個","然后輸入隨便一串字符(字符串,用雙引號""包裹起來的一串字符叫做字符串)然后運行,看看結果. 你會發現用于輸入的文本框有了默認的值,這就是第三個參數的作

8、用。Msgbox函數是用來輸出的函數,在VBS中沒有專門的輸出函數(BASIC中的print,C中的printf),所以我們只能用對話框來觀察輸出結果,Msgbox的必要參數只有一個,就是要輸出的內容,在這種情況下,我們不需要理會msgbox的返回值. 關于Msgbox和Inputbox我們以后還會在討論,今天只是熱熱身,到此為止.要點:1) 注釋(以REM或'開頭)行在程序中不起作用,但能讓別人更容易讀懂你的程序.2) 變量好像一個盒子,或一個代號,可以代表你想代表的東西. 變量賦值使用"="3) 以""包裹起來的字符稱之為"字符串&

9、quot;4) 函數像一個"黑箱",有參數和返回值,用"="左邊的變量可以接住返回值5) Inputbox函數彈出一個輸入對話框,Msgbox則用于輸出作業:1) 試驗Inputbox的第三個參數2) 寫一段程序輸出你的年齡3) 寫一段程序進行3次輸入,分別輸入你和你父母的姓名(要求顯示提示),并分3次輸出。-第二篇:2/39頁我真沒想到,第一次的作業竟然有人不會。看來要講的非常非常細致才行,嗯,今天講各種“量”和基本運算。先說常量,這個比較簡單。什么是常量呢,常量就是其值不可變化的量。常量分為兩種:第一種,自然常量。這叫是因為它們本身就是常量,你怎么更

10、改21的值呢? 他永遠都是21,不可能變成46。如果你在程序中使用"21=46",這樣的語句將會引發一個錯誤。同樣的,字符串也是常量(還記得字符串嗎? 就是包裹在""之間的一串字符),"Hello World"就是一個例子,如果你使用"Hello World"="Bye"這樣的語句同樣會引發一個錯誤。你能舉出自然常量的更多例子嗎?第二種,是我們自己定義的常量,這種量也使用代號,他們也被賦值,但和變量的不同點在于,他們在定義的時候被賦值,以后就不能改變了,如果企圖改變將會引發一個錯誤。定義一個變量

11、,我們使用"const"這個關鍵字(關鍵字的意思是系統定義了有特殊功能的字,不能作為變量名或常量名使用),格式是:const 常量名=常量值例如:const PI=3.1415926const NAME="記憶碎片"這樣我們就定義了兩個常量,PI和NAME,一般說來,常量名全部使用大寫,但也可以不用,隨你喜好。將一些在程序中不需要改變的值定義為常量是個好習慣,這樣能防止不必要的意外。另外,使用自定義常量也可以減少你的工作量。 比如:msgbox("Hello World")msgbox("Hello World")

12、msgbox("Hello World")msgbox("Hello World")msgbox("Hello World")這個程序輸出五次Hello World,如果你想要改變輸出為Bye-Bye,就必須修改全部程序,當然你可以手動修改5次,但如果你要輸出1000次呢?常量就可以替我們解決這個問題:const hw="Hello World"msgbox(hw)msgbox(hw)msgbox(hw)msgbox(hw)3/39頁msgbox(hw)這樣當你要修改輸出的時候只要修改hw的值就行了。好了,現在我們

13、來看看編程的第一塊重要“基石”:變量。解釋變量最好的辦法我覺得是“盒子”,一個變量好像一個盒子,里面只能裝一個東西,當你要裝進去別的東西的時候必須把原有的東西拿出來。這個“盒子”是有名稱的,當你在程序中使用變量的時候,系統會打開盒子取出里面的東西,讓這些東西參與處理,而不是盒子。有些語言是很依賴“盒子”里面裝些什么東西,這樣才能找到合適的“盒子”(比如C語言),但VBS給我提供的是能夠自動伸縮的“魔術盒”,我們不用關心裝進去的是什么東西,VBS會自動調整盒子的大小。例如:Dim a1,a2,a3a1=14a2=12.23a3="Hello"而不用像C語言那樣麻煩,或者是VB

14、的正規聲明(VB可以聲明也可以不用)那樣:int a1; Dim a1 as integerfloat a2; Dim a2 as Doublechar* a3; Dim a3 as strniga1=14; a1=14a2=12.23; a2=12.23a3="Hello" a3="Hello"嗯扯遠了變量有什么用呢?哇,那用處可大了。最簡單,你并不能確定程序運行時變量的值,比如前一節課我們編的輸入姓名的程序,你不能確定InputBox返回的是什么(還記得Inputbox的返回值嗎?就是你輸入的內容),所以你就沒有辦法應對各種情況,但我們用name這個

15、“盒子”把用戶的名字裝起來,到用的時候我們只要知道name這個盒子的名字就行了,系統會自己打開他并把里面的內容拿出來用。再舉個例子,我們編寫一個程序計算一個矩形的面積,比如這個程序要發給小學生使用:dim a,b,sa=15b=12s=a*bmsgbox(s)這樣就可以求出長為15,寬為12的矩形的面積了,是不是很簡單?當然, 這個程序也可以這樣寫:4/39頁dim ss=15*12msgbox(s)這樣看起來程序短了許多,也節約內存,但并不是鼓勵的做法,為什么?請看下面。現在,我們的程序要變得像點樣子才行,誰的程序寫出來還要別人修改源代碼才能用啊?所以,我們要接受用戶的輸入,還記得嗎?Inp

16、utBox函數。修改后程序如下:dim a,b,sa=inputbox("請輸入矩形的長:")b=inputbox("請輸入矩形的寬:")s=a*bmsgbox(s)OK,這么一修改,無論用戶輸入怎樣的數據,我們都能計算出矩形的面積了。如果你用s=15*12能改嘛?當然不行。我想你已經發現了,vbs中的數學計算和真正的算術沒有什么不同,+,-,*,/,(),都是一樣的用法,比如:dim ansans=12+32/4+(23-10)*2msgbox(ans)四則運算的法則在編程中同樣生效,你可以在編程中重新獲得小學時候的樂趣(你恨數學?那就別學電腦了)。在

17、編程中有一個有趣的運算符是"mod",這個運算符叫做"取余運算符",就是取得一次除法的余數,例如:dim aa=16 mod 5你知道a等于幾嗎?Bingo!沒錯,就是1。因為16 / 5 =31,所以mod計算的結果就是1。還有一個運算符是""(就是鍵盤“6”上面的小箭頭),他表示“乘冪”(或者是“方”),比如:dim a,b,ca=2b=a2c=a3msgbox(a)msgbox(c)則b=a*a=4,c=a*a*a=8我們一次不要講太多,這次就講到這里,現在總結一下。要點:1) 常量分為自然常量和自定義常量,常量的值不可修改2)

18、 變量就像盒子,我們不在乎盒子里裝的是什么,但一定要知道盒子的名字3) 四則運算在編程中沒有任何不同4) MOD是取余運算作業:1) 編一個程序,計算圓形的面積,半徑由用戶給出 (使用Inputbox) PI取值3.141592) 編一個程序取得20 / 3 的余數估計大家看累了,我來個大話西游2游戲計算器的實例吧。小黑在幫派門口擺攤賣藥,今天共賣了 56 個靈異天香,每個的出售價格為 2170 ,那么他賺了多少錢?(藥店出售的靈異天香價格為2160)在題目中,56和2170是變量。大家可以想想代碼怎么寫,然后再往下看。dim m,n,x,msgmsg="小黑在幫派門口擺攤賣藥,今天

19、共賣了 n 個靈異天香,每個的出售價格為 m ,那么他賺了多少錢?"n=inputbox(msg,"靈異天香個數n","請在此輸入靈異天香個數n")m=inputbox(msg,"每個售價m","請在此輸入每個藥的出售價格m")x=(m-2160)*nmsgbox("答案:" & x)把這段代碼復制粘貼到文本文件,然后把文本文件.txt后綴改為.vbs雙擊運行看看效果。如果看不到.txt后綴,去我的電腦-控制面板-文件夾選項-查看-去掉“隱藏已知文件類型的擴展名”對勾-確定就行

20、了。-6/39頁第三篇:首先,我來解決一下上次課程的幾個疑問。第一,那個余數問題,16 / 5 = 3.1, 是因為我改過前面的部分, 后面的忘了改了,不好意思。第二,請看一下程序清單:1)Dim a,b,ca=inputbox("a是:","輸入半徑")b=Inputbox("b是:","輸入半徑")c=a*2+b*2Msgbox(c)這個 輸入1、2時是62)Dim a,b,ca=inputbox("a是:","輸入半徑")b=Inputbox("b是:&quo

21、t;,"輸入半徑")c=(a+b)*2Msgbox(c)這個輸入1、2時是24為什么會不一樣呢? 在數學上c=(a+b)*2 和 c=a*2+b*2是等價的, 在VBS中也是如此. 問題出在"+"上, 在VBS中, +不僅僅是加號的意思還表示把兩個字符串連接起來, 例如"Hello"+"World"="HelloWorld" have you understood? 你還記得InoutBox函數的返回值嗎?是字符串!這就看出問題了吧,在編程中"1"不等于(<>)1

22、, "1"是一個字符, 而1是一個數,所以a,b都是字符串變量,"1"+"2"="12", 這就好像我們小時跟伙伴開玩笑問他們1+1=?一樣,我們總是笑著說“錯啦,應該是11”,但為什么,a可以*2卻不發生錯誤呢?這是VBS比較智能的一個表現,如果這個字符串的內容是一個數且對他進行數學運算,則把字符串強制轉換成數參與運算,如果字符串代表一個數,但不參加數學運算,而是參加字符串運算(合并)則當作字符串處理,所以你看到a+b=12,這時候a+b的結果(12)是一個字符串,當它要乘以2的時候就被強制轉換成了數字12,這樣

23、我就得到了結果24。怎么修改這個程序呢?我們需要用到另一個內建的函數:intint函數的功能是將輸入值轉化成整數值,我們這樣修改:c=(int(a)+int(b)*2這個意思就是把a作為參數傳遞給int函數,int函數就會返回那個整數(你的輸入值),然后讓返回值參與運算,這樣就得到了正確答案。所以,以后如果你用的是inputbox函數的話,最好用int語句加工一下:比如c=int(c) 'c是你自己的變量。7/39頁大家是不是覺得這個課程有點枯燥。呵呵,變量和運算符部分的確是這樣的,不過多多練習也就好了。這次,我們寫寫真正好玩的東西:流程控制語句。這個部分開始才是真正的編程。首先介紹判

24、斷結構.在此之前, 我們先介紹一種簡單的變量類型:布爾值(Boolean), 這種變量只有兩個可能值:True,Flase,即真或假. 這種變量在某些情況下很有用(比如"開關"). 我們定義一個bool變量的方法和其他變量一樣, 賦值也一樣, 例如:dim a,ba=trueb=false注意,true和"true"是不一樣的, "true"是字符串,true是布爾值, 千萬不能混淆.回到if語句上來, 我們先來看看簡化版的if語句:if 判斷式 then 語句體 我們來看一個例子:dim a,ba=12b=13if b>a t

25、hen msgbox("B大于A")我們只看最后一行, a>b這個式子(表達式)有一個返回值, 是bool型的. 因為這個式子只有兩種可能:b大于a, b不大于a, 所以這個式子也只有兩種可能性, 即真或者假. if語句判斷這個表達式的返回值是真還是假, 如果是真(true)則執行then后面的語句, 如果是假, 則不執行, 你把a的值改成14看看還會不會彈出對話框?當我們要在判斷之后執行多行語句怎么辦呢, 我們需要用語句塊來解決, 在這里可以叫塊ifdim a,ba=12b=13if a<b thenmsgbox("A小于B")msgbox

26、("B大于A")end if兩個msgbox函數夾在if和end if之間, 這個部分就是語句塊, 塊里的每一條語句之前請空出4-8(一個<Tab>鍵)個格, 這不是必需的, 但是是一個好習慣, 以便看清楚程序的結構. 這樣我們就能運行多于一個的語句, 請注意if.then.end if 這三個關鍵部分不要掉了. OK, 我出一個題, 輸入一個數, 如果小于100就輸出"錯誤", 如果大于100就輸出"正確", 我這里有兩個程序版本:dim aa=inputbox("請輸入一個大于100的數")a=in

27、t(a) 'inputbox返回的是字符串, 我們把他變成整數 : )if a>100 then msgbox("正確")if a<100 then msgbox("錯誤")還有一個更簡單的dim aa=inputbox("請輸入一個大于100的數")8/39頁a=int(a) 'inputbox返回的是字符串, 我們把他變成整數if a>100 thenmsgbox("正確")elsemsgbox("錯誤")end if看到多了一個else了吧, else的作

28、用就是當要判斷的表達式為false時執行的. 這樣程序就可以處理兩種不同的情況了. 不要忘了用end if結尾嘿嘿, 我是變態者, 現在我要你處理三種情況, <100,=100,>100, 還要寫在一個if結構里, 你怎么辦, 我給你答案:dim aa=inputbox("請輸入一個大于100的數")a=int(a) 'inputbox返回的是字符串, 我們把他變成整數if a>100 thenmsgbox("正確")elseif a=100 thenmsgbox("老大, 你耍我?")elsemsgbox(

29、"錯誤")end if這次輸入100看看, 是什么? else if語句可以在if結構中多次出現, 以靈活判斷不同的情況 (如果你要判斷得太多, 就請使用"選擇結構", 過會兒就講), 當所有elseif都處理完了,而沒有符合情況的時候再執行else中的語句.另一個例子:Dim a,b,c,da=inputbox("a是:","輸入半徑")b=Inputbox("b是:","輸入半徑")d=Inputbox("答案:","輸入答案")c

30、=a*2+b*2 '這里沒有問題, 會自動轉換if d=c thenMsgbox("你好聰明")elseMsgbox("你好豬頭 自己的題還不會!")end if再看看這個, 無論你回答得多么正確你都是豬頭, 哈哈, 不是我耍你, 還是文章開始時候的inputbox的返回類型在耍你, d是inputbox的返回值, 他是一個字符串, 而c是一次整數計算的結果, 他是一個整數. 一個字符串無論如何也不等于一個整數, 盡管他們字面上是一樣的:"8"<>(不等于號)8 所以if的判斷式的值永遠是false, 總是執行el

31、se部分的語句. 我們可以這么修改Dim a,b,c,da=inputbox("a是:","輸入半徑")b=Inputbox("b是:","輸入半徑")d=Inputbox("答案:","輸入答案")d=int(d)'在這里我們取出了d的值, 變成整數, 在放回"d"這個盒子里9/39頁c=a*2+b*2if d=c thenMsgbox("你好聰明")elseMsgbox("你好豬頭 自己的題還不會!")e

32、nd if這樣就成功了. 這也是Inputbox函數的一個討厭的地方, 沒辦法, vbs沒有其他好的輸入方式了。說到if, 我們不得不說一說邏輯運算符, 今天介紹兩種, "and" 和 "or" 學會了if語句之后, 我舉一個例子, 你一看就明白了.dim a,ba=inputbox("輸入一個數 >10")b=inputbox("輸入另一個數 >10")a=int(a)b=int(b)if a>10 and b>10 thenmsgbox("正確")elsemsgbox

33、("錯誤")end if這段程序讓你輸入兩個值, 必須都大于10, 只要有一個不大于, 就輸出錯誤 dim a,ba=inputbox("輸入一個數 >10")b=inputbox("輸入另一個數 >10")a=int(a)b=int(b)if a>10 or b>10 thenmsgbox("正確")elsemsgbox("錯誤")end if這段程序讓你輸入兩個值, 只要有一個大于10, 就返回成功. 其實and和or很好理解, 我讀"if a>10

34、or b>10 then" 這一句, 用華語是這樣:"如果a大于10或者b大于10, 那么.". 這樣是不是就很好理解了呢.OK, 我們再來看一種新結構, 今天的課就結束, 已經午夜了, 我都累死了.當你的程序要處理很多種不同的判斷情況的時候elseif.then會讓程序看起來很雜亂, 所以就有了一種select case結構專門對付這種情況, select case的語法結構很簡單:select case 變量名case 值語句case 值語句case else語句end select我們舉個例子就能很簡單的說明:dim aa=inputbox("

35、;輸入一個1-3的值")a=int(a) '處理inputbox返回字符串的問題select case acase 1msgbox("壹")case 2msgbox("貳")case 3msgbox("叁")case elsemsgbox("輸入錯誤")end select這個例子把1,2,3這三個阿拉伯數字轉化成中國大寫數字, 這個程序寫成if.elseif 的形式如下dim aa=inputbox("請輸入1-3的值")a=int(a)if a=1 thenmsgbox(&

36、quot;壹")elseif a=2 thenmsgbox("貳")elseif a=3 thenmsgbox("叁")elsemsgbox("輸入錯誤")end if怎么樣, 麻煩吧, 還是select好吧.OK, 今天到此結束, 總結一下:要點:1) inputbox返回的是一個字符串, 而不是一個數, 必須用a=int(a)這種形式轉化成數2) bool變量的值只有兩種:true,false2.5) and兩邊的表達式都是true, 則返回true. or兩邊的表達式有一個是true, 就返回true3) if 語句的

37、格式4) select.case的格式11/39頁作業:1) 使用3個bool值, 儲存你的3兄弟姐妹是否是男性 (提示:sister1male=false)2) 給定一個個數, 大于10而且小于20輸出"正確", 否則輸出"錯誤"3) 輸入12,或者15, 輸出"正確", 否則輸出"錯誤"4) 把5以內的正整數都轉換成中國大些數字5) 自己隨便設計一個程序, 應用今天的知識-第四篇:循環結構我們先來看一道題:商場進行每日結算, 要求累加出今天的營業額, 每次輸入一個數, 這道題其實很簡單, 但就我們現在學過的知識

38、要完成這道題相當麻煩, 我們來分析一下. 首先, 我們需要知道買賣的次數, 這樣才能控制輸入的次數,但是, 這種設計是非常低效的, 每天都要重新設計程序. 假定今天進行了5次交易, 以下是源程序:dim sumsum=0 '初始化變量sum=sum + int(inputbox("請輸入交易額")'sum=sum+x 這種形式是把本身的值取出來, 進行一次運算, 再放回本身, 這種方法很有用處'這里使用了函數嵌套, 把inputbox的返回值直接傳給int函數, 轉化成整數, 下同 sum=sum + int(inputbox("請輸入交易

39、額")sum=sum + int(inputbox("請輸入交易額")sum=sum + int(inputbox("請輸入交易額")sum=sum + int(inputbox("請輸入交易額")msgbox(sum)看到了嗎, 我通過把計算過程復制了5遍才設計好了程序, 這種程序在汽車交易所等交易次數少的地方還能湊合著用, 如果放到超市豈不是要復制, 粘貼幾千遍? 我們今天講的內容就可以克服這種缺陷, 首先, 我們來講以下Do.Loop語句.do.loop的結構看上去非常簡單, 就是:do.loop, 僅此而已, 這個結

40、構不斷執行do和loop之間的語句(學名叫:循環體),永不停止. 舉個例子來說:domsgbox("這個信息會不斷重復出現, 要停止程序請使用任務管理器(Ctrl+Alt+Del)中止wscript進程")loop運行這個程序, 當你點銷掉一個對話框馬上會出來另一個, 你永遠點不完, 總有下一個. 誰會運行這樣的程序? 除非是給別人搗亂(我就干過這種事), 所以在do.loop結構中還有一個語句:exit do, 這個語句將終止循環, 跳到loop后面的語句繼續執行. 據個例子來說:dim a '注意:常量不需要在dim里面聲明,否則會引發錯誤const pass=

41、"123456" '這是一個字符串 請用""包裹起來. 設定密碼為常量, 不可變更 do12/39頁a=inputbox("請輸入密碼")if a=pass thenmsgbox("密碼校驗成功")exit doend ifloop這個程序會一直不停的問你密碼, 知道你輸入了正確的密碼為止.(if可以嵌套在另一個if當中, 也可以嵌套在循環體當中, 所以一定要用縮進, 來分清楚程序的各個部分). 這個程序是很經典的, 早期的程序都是這么做的. 但是我們是Hacker, 所以我們了解系統的安全性, 這種無限次

42、認證程序很容易被窮舉破解, 我們要來限定認證的次數. 修改程序如下dim a,ctrctr=0 '設置計數器const pass="pas123_" '上面的那個是弱密碼, 這次改的強一點doif ctr=3 thenmsgbox("已經達到認證上限, 認證程序關閉")exit doelsea=inputbox("請輸入密碼")if a=pass thenmsgbox("認證成功")msgbox("(你可以在這里加一段成功后得到的信息)")exit doelsectr=ctr+1

43、 '如果密碼出錯就增加一次錯誤認證計數msgbox("認證出錯, 請檢查密碼")end ifend ifloop運行這個程序試試看, 當你出了3此錯誤以后, 就會停止再次詢問密碼, 關閉程序. telnet認證用來限制次數的程序與此大同小異. 要注意的是嵌套的if語句, 清仔細讀一下這個程序, 可能比較難懂, 也請你試著自己設計一下類似的程序.其實, 要在do.loop加上驗證的功能, 并不一定要用if, 我們可以直接利用do. 我來介紹一下while關鍵字, while可以放在do或者是loop后面, 然后再接一個表達式, 當表達式的值為true的時候(表達式成立

44、),才運行循環體.我們來看一下修改后的程序"dim a,ctrctr=0const pass="pas123_"do while ctr<3a=inputbox("請輸入密碼")if a=pass thenmsgbox("認證成功")13/39頁msgbox("(你可以在這里加一段成功后得到的信息)")exit doelsectr=ctr+1 '如果密碼出錯就增加一次錯誤認證計數msgbox("認證出錯, 請檢查密碼")end ifloopdim a,ctrctr=0co

45、nst pass="pas123_"doa=inputbox("請輸入密碼")if a=pass thenmsgbox("認證成功")msgbox("(你可以在這里加一段成功后得到的信息)")exit doelsectr=ctr+1 '如果密碼出錯就增加一次錯誤認證計數msgbox("認證出錯, 請檢查密碼")end ifloop while ctr<3功能是一樣的, 為什么要放在loop后面呢? 你把ctr的值改成3就知道了, while在do后面的程序會直接退出, 而在loop

46、后面還會允許一次認證, 到了loop才結束.和while相反的是until, 用法和while一樣, 不過他只有當后面的表達式的值為false(表達式不成立)的時候才執行循環體, 請自己試驗一下ok, 我們來看另外一種循環結構,for.next, 這種循環結構是基于計數的, 也是在編程中最常見到的循環結構.dim ifor i=0 to 5msgbox(i)next看到了嗎?每次輸出的i都是遞增的, 但我們沒有明確指出i要遞增, 當i達到5的時候, 循環就結束了, 因為由0開始, 所以循環體執行了6次, 這一點很重要, 大部分東西都是從0開始而不是1. 這個程序也可以寫成do的形式:dim i

47、i=0do while i<5msgbox(i)i=i+1 '因為do不能自動計數, 必須手動加loop14/39頁怎么樣, 還是for比較好用吧. for在編程中很有用途, 我們再舉一個例子, 順便講一下嵌套循環.dim i,jfor i=1 to 9for i=1 to 9str=str & i * j & " " '&是和并字符串的符號next '每個next對應一個fornext看看運行結果, 是否令你會想起小學時代的數學老師(丑陋的嘴臉). 要注意, 這里有一個"大"的for, 和一個小的f

48、or, 當小的for執行完一個周期以后, 大的for才執行一次(換句話說, 大的for執行一次, 小的要執行9次), 所以一共執行了九九八十一次. 在大的for里可以不僅僅是一個小的for, 也可以加上另外的語句. 我們來修改一下源程序:dim i,jfor i=1 to 9for i=1 to 9str=str & i * j & " "next '每個next對應一個forstr=str & vbCrlf 'vbCrlf相當于鍵盤上的回車鍵,因為你不能在鍵盤上輸入,所以系統定義了一個默認的常量next這次運行完成以后, 輸出結果按

49、照乘數進行了分割, 每小for運行完一次, 就換一行(通過vbcrlf).這次的內容對菜鳥可能比較難懂, 掌握的辦法只有一個:多實踐. 另外, 我在論壇看到很多人還是問:"VBScript要用什么工具編?"我就很氣憤, 我在第一篇里面已經說明:用記事本編輯源代碼, 然后保存為以.vbs為擴展名的程序就可以了, 請大家不要再問. 另外, 國產的一種垃圾軟件"超級X霸"搶占了vbs這個擴展名, 請把那個垃圾卸載掉.我們總結一下:要點:1) do.loop和exit do的用法2) while當表達式true的時候執行循環體,until反之3) for.nex

50、t是計數循環, 每次執行計數器遞加4) 嵌套循環的作用和寫法4.5) &用于連接字符串5) vbCrLf相當于鍵盤上的回車鍵作業:1) 在我國的數學經典著作"九章算術"中有這樣一道題:百錢買百雞, 公雞5錢一只, 母雞3錢一只, 小雞1錢2只(這個數據我是參考一本編程書的, 但我記得是公3,母1,小1錢3只? 不管了, 就按照書上得來吧)求得是能有多少種辦法買這些雞. 如果看不懂的話我用大白話說說:有人要去買雞, 用100塊錢正好買了100只雞, 價格如下:公:5$, 母:3$, 小:1$ for 2, 讓你求一共多少種賣法(公母小怎么搭配). 請用循環解決這個問題

51、。PS:今天文章寫的很倉促,大部分代碼都沒有實驗,請大家自己檢驗。另外,上次的作業我不說答案了。不知道大家喜歡做這種題,還是以前那種比較簡單的? - 第五篇: 今天我們來了解語言本身的最后一個論題:數組. 要理解"數組", 這個概念我覺得另一種翻譯對學習來說更加容易:"陣列", 沒錯, 數組就是一個陣列, 一個數據的陣列. 最簡單的例子是數據庫系統, 假設你要儲存20名學生的英語成績, 如果不是用數組, 你則要創建20個不同的變量, 累死. 數組就是類型相同(重要!)的一組數據(或者n組), 用來儲存相關的量, 最簡單的數組是一維數組, 我們就先來學習它

52、吧. 什么是一維數組呢? 在3維以下,你可以利用幾何知識來理解"維"的概念,一維相當于一條線, 二維則是一個矩形, 三維是一個長方體. 我知道這么講是很抽象的, 我們先舉個一維數組的例子就比較容易了解了. dim a(9) '從零開始 for i=0 to 9 a(i)=i '填充每一個數組元素 msgbox(a(i) '輸出數組元素 next 我們可以看到, 定義一個數組的方法和定義一個變量沒有什么不同, 同樣是使用dim語句. 定義一維數組的方法如下: dim 數組名(元素數量), 這里大家要注意一點, 這里定義的元素數量總是比你要的要少一個,

53、因為一個數組的起點是0號數據而不是1, 所以大家一定要小心: 你需要10個數據, 就定義"9", 需要100個就定義99, 依此類推. 數組的元素可以看成一個個獨立的變量, 你可以像獨立的變量那樣使用他們. 數組元素的量可能是毫無關系的, 比如第一個數組元素儲存你的年齡, 第二個儲存今年西瓜的銷售量, 但這種做法是不鼓勵的, 甚至是不被接受的, 不要這么干, 這樣的情況請定義獨立的變量. for語句在數組中可算是大顯身手, 還記得for嗎? 它累加一個變量, 我們可以把這個變量應用在數組中正好用來讀取或者填充按照順序排列的數組元素, 上面就是這樣一個例子. 數組其實是很簡單

54、的東西(再BASIC語言里面), 數組難的是怎么搗弄這些循環, 讓他們按照你的要求運轉. 這個等到二維數組再說, 我們先看看如何手工填充數組. 如果你這個都想不到的話, 那你真是白學了: dim name(7),str '一共八個學生, str變量是用來把他們儲存成一個字符串以便輸出 for i=0 to 7 name(i)=inputbox("請輸入第" & i+1 & "個學生的名字") str=str & " " & name(i) next msgbox(str) 這樣我們就有了一個小小

55、的數據庫, 它們的數據排列可以看成這樣: 16/39頁 name(0),name(1),name(2).name(7) 看到了吧, 所以我說我們可以把它看成是"一條線", 等到我們學到了文件操作, 就可以把他們輸出到文件中去了. 一維數組有很多用處, 我們來看一下一個復雜的例子. 我們要儲存3各學生的名字, 身高, 成績這三種數據, 由于名字是字符串, 而身高可能是浮點數(帶小數點的數), 成績則可能是整數, 所以我們不能把他們儲存在一個數組里面(不要忘記, 數組織只能存儲同類的數據), 所以我們要建3個數組, 以下是例程: dim name(2), high(2), ma

56、rk(2) '定義三個數組分別儲存3個人的名字, 身高和得分 dim ctr '計數器 for ctr=0 to 2 name(ctr)=inputbox("請輸入第" & ctr+1 & "個學生的姓名") high(ctr)=inputbox("請輸入第" & ctr+1 & "個學生的身高") mark(ctr)=inputbox("請輸入第" & ctr+1 & "個學生的得分") next OK, 我們

57、已經填充好了數據, 現在我們的小小數據庫只能按順序輸入, 我們要讓它看起來像點樣子, 我們來給他設計查詢功能: '接著上面的程序 dim cname, temp '要查詢的名字, 和一個臨時變量, 用來儲存數據的位置 cname=inputbox("請輸入你要查詢的名字:") for ctr=0 to 2 '遍歷所有name數組的成員, 尋找要查詢的名字 if name(ctr)=cname then temp=ctr '記錄數據位置 exit for '退出循環, 和exit do的用法一樣 end if '不要忘了end

58、if next msgbox("姓名:" & name(temp) & " " & "身高:" & high(temp) & " " & "得分:" & mark(temp) 嘿嘿, 有意思吧, 其實在這個程序里面, 那個temp變量完全沒有必要, 只是為了更清楚地說明問題. 因為當exit for以后ctr變量的值就不會改變, 儲存的正好是對應數據在數組中的位置, 寫這個temp變量是為了照顧到以后要學C+的朋友(C+可以在for語句里聲

59、明新變量, 只在這個for結構中有效, 所以到了外部就不能訪問了). 也就是說可以簡化成如下: dim cname cname=inputbox("請輸入你要查詢的名字:") for ctr=0 to 2 if name(ctr)=cname then exit for '因為只有exit for就不需要塊if了 next msgbox("姓名:" & name(ctr) & " " & "身高:" & high(ctr) & " " &

60、"得分:" & mark(ctr) 這是最直接的路子. 好好重讀一下上面所有的源代碼, 然后自己寫幾個程序, 完全搞清楚一維數組及其應用以后再看后面的二位數組. 二維數組好像是一個一維數組的集合, 就好像"線積成面"一樣, 由n各一維數組組成二維數組, 這是初學者比較好理解的辦法(比較精確的是用"編號"的概念去理解, 因為4維以上的數組就比較難以用歐幾里德幾何概念去解釋了). 二維數組是很好解釋的, 我們來看一下: dim a(2,2) '從零開始, 一共有3 X 3 = 9 個數據 dim i,j '需要兩個

61、計數器 for i=0 to 2 for j=0 to 2 '使用嵌套循環 17/39頁 a(i,j)="X" next next 我們創建了一個這樣的二維數組(那些","是我用來分割元素的,并不存在), 了解二維數組的了嗎? 不清楚我們再講一下 編號 0 1 2 0 X,X,X 1 X,X,X 2 X,X,X 二維數組的看起來是不是就是一個矩形呢?(你在內存中看不到這樣的矩形, 只是便于你理解), 每個數據都有編號, 由兩個數來定位, 這個很像(非常像)你在國際象棋棋盤上尋找一個格, 我們用類似"C6","A2&q

62、uot;這樣的"垂直坐標"進行定位, 對, "垂直坐標", 很確切. 我們要使用一個二維數組元素的時候可以和普通變量一樣使用, 只要指定數組元素的"定位點"就可以了, 例如 a(0)(1)=1, b(2)(1)="你好", 諸如此類. 要注意的是二維數組也只能儲存類型相同的元素, 而且上標(起點)也從0開始. 計算一個二維數組的元素個數只要把兩個下標+1(以得到實際的值)再乘起來就可以了, 非常類似于求一個矩形的面積. 假如需要儲存的都是同一類型的數據, 我們就可以用二維數組, 比如要儲存5個人的姓名,國籍,民族,

63、 就可以使用二維數據 dim info(4,2) '一共五個人, 要儲存的數據類型有3項 dim i,j for i=0 to 4 for j=0 to 2 dim opt '定義一個變量用于存儲數據項提示 select case j '判斷應該輸入的是什么數據 case 0 opt="姓名" case 1 opt="國籍" case 2 opt="民族" end select info(i,j)=inputbox("請輸入第" & i+1 & "個人的"

64、 & opt) next next '輸出太麻煩了, 我懶得動, 你知道那么回事就行了 這樣就不需要定義3個一維數組了. 多位數組(三維以上)的定義和使用方法與二維數組一樣, 但不太好在歐幾里德幾何空間里加以解釋, 幸好我們并不太常用那么多維的數組.定義一個三位數組:dim a(1,2,3) '一共24各數組元素. 今天因為要搬家(我喜歡Sengkang啊, 可是MM嫌交通不便, 誰不知道她只想去逛街),而GF要去和她的同學去參加什么試驗半夜才回家, 所以下午我只能自己去押車搬家了, 5555好可憐, 這次就請大家原諒我少寫一點, 我可是站在圖書館外寫的啊, 現在腿都軟了 本來還要講"動態數組"的, 但想了想還是放到"進階部分"再說吧. 18/39頁 要點: 1) 一維數組是&quo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論