VBS或VBE由淺入深兩種方案.doc
《VBS或VBE由淺入深兩種方案.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《VBS或VBE由淺入深兩種方案.doc(47頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
VBS由淺入深兩種方案 以下所整理的是本人學(xué)習(xí)VBS時(shí),根據(jù)經(jīng)驗(yàn)將所用的教程進(jìn)行了歸納。分兩篇,第一篇,是某專業(yè)人士所整理的通俗易懂的學(xué)習(xí)方案,甚至沒(méi)學(xué)過(guò)任何程序語(yǔ)言的人也可以輕松掌握;第二篇?jiǎng)t是另一專業(yè)人士所整理的比較正式的學(xué)習(xí)方案。 本人建議同學(xué)們可以先看第一篇,有較好的語(yǔ)言功底的人可直接看第二篇。 當(dāng)然,我有必要說(shuō)一下VBS與VBE的區(qū)別: VBE跟VBS差不多,都是VB腳本代碼文件,但他們也有不同: VBS是明文代碼,就是說(shuō)可以直接使用記事本編輯; VBE則是編譯后(加密)的VBS代碼,使用記事本打開不能直接看到源代碼。(有些例外) 加密工具有很多,其中常用的是 Microsoft Script Encoder(screnc.exe),此外還有許多。 VBE格式在QQ傳文件中往往不會(huì)被攔截,而VBS格式卻會(huì)被攔截,這應(yīng)該是程序設(shè)計(jì)者的一個(gè)失誤。 因此,所以很多人沒(méi)有進(jìn)行加密而直接改擴(kuò)展名為“VBE”,依然能夠運(yùn)行,只是為了方便一下。 最后祝大家學(xué)習(xí)愉快! 腳本真的很好玩! 第一篇 VBS的基礎(chǔ)教程 第一篇(共六篇) 我知道菜鳥現(xiàn)在最關(guān)心的就是用什么工具來(lái)開發(fā)VBS程序了, 答案是:記事本(Notepad),我不是開玩笑, 其實(shí)任何一種文本編輯器都可以用來(lái)開發(fā)VBS開發(fā), 只不過(guò)記事本是由系統(tǒng)自帶的, 比較好找而已. 盡管如此, 我還是建議你去下載一個(gè)專業(yè)的文本編輯器, 因?yàn)檫@些工具可以提供 "語(yǔ)法高亮"等功能, 更加方便開發(fā), 用哪一個(gè)隨你喜好, 我比較喜歡Edit Plus,ScriptCryptor也不錯(cuò) OK, 我們先來(lái)寫一個(gè)VBScript程序熱熱身. REM 輸入并回顯你的名字 使用InputBox和Msgbox函數(shù) ?。ㄉ厦婕氨拘锌梢圆槐貙懭朐创a中,下面才是運(yùn)行的代碼) Dim name,msg msg="請(qǐng)輸入你的名字:" name=Inputbox(msg) Msgbox name 把上面的程序清單輸入到記事本里面, 然后保存為以.vbs為擴(kuò)展名的文件(如果在文件名上沒(méi)有“.***”,就打開控制面板-文件夾選項(xiàng)-查看-取消隱藏已知文件類型的擴(kuò)展名).然后雙擊, 觀察運(yùn)行結(jié)果. 注意:為了使你學(xué)得更好,推薦自己輸入程序清單, 盡量不要復(fù)制->粘貼 我來(lái)解釋一下這個(gè)程序, 第一行和第二行的開頭分別是"REM"語(yǔ)句和" ", 這兩個(gè)東西的作用是相同的, 表示之后的文字是注釋, 就是說(shuō)符號(hào)后的什么也不干,只是用來(lái)說(shuō)明這段程序的功能, 版權(quán)信息等等. 注釋行是程序最重要的部分之一, 盡管它不是必需的, 但對(duì)于其他人閱讀源代碼, 以及自己分析源代碼是很有好處的. 好的習(xí)慣是在必要的地方加上清晰, 簡(jiǎn)潔的注釋. Dim用來(lái)聲明一個(gè)變量, 在VBS中, 變量類型并不是那么重要, 就是說(shuō)VBS會(huì)幫你自動(dòng)識(shí)別變量類型, 而且變量在使用前不一定要先聲明, 程序會(huì)動(dòng)態(tài)分配變量空間. 在VBS中你不用考慮name儲(chǔ)存的是一個(gè)整數(shù)還是一個(gè)小數(shù)(學(xué)名叫"浮點(diǎn)數(shù)"), 也不用考慮是不是字符串(一串字符, 比如:"Hello World"), VBS會(huì)自動(dòng)幫你搞定. 所以第三行語(yǔ)句可以刪除, 效果不會(huì)變, 但我強(qiáng)烈反對(duì)這么做, 一個(gè)變量的基本原則就是:先聲明,后使用.變量名用字母開頭,可以使用下劃線,數(shù)字, 但不能使用vbs已經(jīng)定義的字, 比如dim, 也不能是純數(shù)字. 下一行被稱之為"賦值", "="是賦值符號(hào), 并不是數(shù)學(xué)中的等于號(hào), 盡管看起來(lái)一樣.這是正統(tǒng)的理解, 你要理解成等于也沒(méi)有什么不可. 賦值號(hào)的左邊是一個(gè)變量, 右邊是要賦給變量的值, 經(jīng)過(guò)賦值以后, msg這個(gè)變量在程序中等同于"請(qǐng)輸入你的名字:"這個(gè)字符串,但當(dāng)msg被再次賦值的時(shí)候, 原值就會(huì)消失. 不光字符串, 其他任何變量都這樣被賦值, 例如: a=2, b=12.222等等. 再往下,Inputbox和Msgbox是VBS內(nèi)建的函數(shù), 一個(gè)函數(shù)就相當(dāng)于一個(gè)"黑箱", 有輸入(參數(shù))和輸出(返回)值, 你可以不用了解函數(shù)是怎么運(yùn)作的, 只要了解這個(gè)函數(shù)能干什么就行了, 我們也可以定義自己的函數(shù), 不過(guò)那要等到以后再講. 現(xiàn)在我們只要了解, 一個(gè)函數(shù)可以有返回值也可以沒(méi)有, 可以有參數(shù)也可以沒(méi)有. 例如Inputbox就是有返回值的函數(shù), 我們用賦值號(hào)左邊的變量來(lái)"接"住InputBox的返回值--就是你輸入的內(nèi)容. 在inputbox右邊的括號(hào)里是參數(shù)列表, 每個(gè)參數(shù)用","分隔開, 每個(gè)參數(shù)有不同的功效, 比如第一個(gè)參數(shù)會(huì)顯示在提示里, 我們把msg這個(gè)變量作為第一個(gè)參數(shù)傳給了Inputbox 函數(shù), 而msg="請(qǐng)輸入你的名字:", 所以我們?cè)趯?duì)話框的提示欄就會(huì)看到"請(qǐng)輸入你的名字:" 第二個(gè)參數(shù)是對(duì)話框的標(biāo)題, 我們用直接量(學(xué)名叫"常量", 這里是"字符串常量")傳遞給函數(shù), 當(dāng)然你也可以傳遞變量. Inputbox還有很多參數(shù), 比如你在"名稱"后面再加一個(gè)","然后輸入隨便一串字符(字符串,用雙引號(hào)""包裹起來(lái)的一串字符叫做字符串)然后運(yùn)行, 看看結(jié)果. 你會(huì)發(fā)現(xiàn)用于輸入的文本框有了默認(rèn)的值, 這就是第三個(gè)參數(shù)的作用. Msgbox函數(shù)是用來(lái)輸出的函數(shù), 在VBS中沒(méi)有專門的輸出函數(shù)(BASIC中的print,C中的printf), 所以我們只能用對(duì)話框來(lái)觀察輸出結(jié)果, Msgbox的必要參數(shù)只有一個(gè), 就是要輸出的內(nèi)容, 在這種情況下, 我們不需要理會(huì)msgbox的返回值. 關(guān)于Msgbox和Inputbox我們以后還會(huì)在討論, 今天只是熱熱身, 到此為止. 要點(diǎn): 1) 注釋(以REM或開頭)行在程序中不起作用, 但能讓別人更容易讀懂你的程序. 2) 變量好像一個(gè)盒子, 或一個(gè)代號(hào), 可以代表你想代表的東西. 變量賦值使用"=" 3) 以""包裹起來(lái)的字符稱之為"字符串" 4) 函數(shù)像一個(gè)"黑箱", 有參數(shù)和返回值, 用"="左邊的變量可以接住返回值 5) Inputbox函數(shù)彈出一個(gè)輸入對(duì)話框,Msgbox則用于輸出 作業(yè): 1) 試驗(yàn)Inputbox的第三個(gè)參數(shù) 2) 寫一段程序輸出你的年齡 3) 寫一段程序進(jìn)行3次輸入, 分別輸入你和你父母的姓名(要求顯示提示), 并分3次輸出 第二篇(共六篇) 我真沒(méi)想到, 第一次的作業(yè)竟然有人不會(huì).看來(lái)要講的非常非常細(xì)致才行, 嗯, 今天講各種"量"和基本運(yùn)算 先說(shuō)常量, 這個(gè)比較簡(jiǎn)單. 什么是常量呢, 常量就是其值不可變化的量. 常量分為兩種:第一種, 自然常量. 這叫是因?yàn)樗鼈儽旧砭褪浅A? 你怎么更改21的值呢? 他永遠(yuǎn)都是21, 不可能變成46 如果你在程序中使用"21=46", 這樣的語(yǔ)句將會(huì)引發(fā)一個(gè)錯(cuò)誤. 同樣的, 字符串也是常量 (還記得字符串嗎? 就是包裹在""之間的一串字符), "Hello World"就是一個(gè)例子, 如果你使用"Hello World"="Bye"這樣的語(yǔ)句同樣會(huì)引發(fā)一個(gè)錯(cuò)誤. 你能舉出自然常量的更多例子嗎? 第二種, 是我們自己定義的常量,這種量也使用代號(hào), 它們也被賦值, 但和變量的不同點(diǎn)在于, 他們?cè)诙x的時(shí)候被賦值,以后就不能改變了,如果企圖改變將會(huì)引發(fā)一個(gè)錯(cuò)誤. 定義一個(gè)常量,我們使用"const"這個(gè)關(guān)鍵字(關(guān)鍵字的意思是系統(tǒng)定義了有特殊功能的字, 不能作為變量名或常量名使用) 格式是:const 常量名=常量值. 例如: const PI=3.1415926 const NAME="記憶碎片" 這樣我們就定義了兩個(gè)常量, PI和NAME, 一般說(shuō)來(lái), 常量名全部使用大寫, 但也可以不用, 隨你喜好. 將一些在程序中不需要改變的值定義為常量是個(gè)好習(xí)慣, 這樣能防止不必要的意外. 另外, 使用自定義常量也可以減少你的工作量. 比如: msgbox "Hello World" msgbox "Hello World" msgbox "Hello World" msgbox "Hello World" msgbox "Hello World" 這個(gè)程序輸出五次Hello World, 如果你想要改變輸出為Bye-Bye, 就必須修改全部程序, 當(dāng)然你可以手動(dòng)修改5次, 但如果你要輸出1000次呢? 常量就可以替我們解決這個(gè)問(wèn)題: const hw="Hello World" msgbox hw msgbox hw msgbox hw msgbox hw msgbox hw 這樣當(dāng)你要修改輸出的時(shí)候只要修改hw的值就行了. 好了, 現(xiàn)在我們來(lái)看看編程的第一塊重要"基石":變量. 解釋變量最好的辦法我覺(jué)得是"盒子", 一個(gè)變量好像一個(gè)盒子, 里面只能裝一個(gè)東西, 當(dāng)你要裝進(jìn)去別的東西的時(shí)候必須把原有的東西拿出來(lái). 這個(gè)"盒子"是有名稱的, 當(dāng)你在程序中使用變量的時(shí)候, 系統(tǒng)會(huì)打開盒子取出里面的東西, 讓這些東西參與處理, 而不是盒子. 有些語(yǔ)言是很依賴"盒子"里面裝些什么東西, 這樣才能找到合適的"盒子"(比如C語(yǔ)言), 但VBS給我提供的是能夠自動(dòng)伸縮的"魔術(shù)盒", 我們不用關(guān)心裝進(jìn)去的是什么東西, VBS會(huì)自動(dòng)調(diào)整盒子的大小. 例如: Dim a1,a2,a3 a1=14 a2=12.23 a3="Hello" 而不用像C語(yǔ)言那樣麻煩: 或者是VB的正規(guī)聲明(VB可以聲明也可以不用)那樣: int a1; Dim a1 as integer float a2; Dim a2 as Double char* a3; Dim a3 as string a1=14; a1=14 a2=12.23; a2=12.23 a3="Hello"; a3="Hello" 嗯……扯遠(yuǎn)了…… 變量有什么用呢? 哇, 那用處可大了. 最簡(jiǎn)單, 你并不能確定程序運(yùn)行時(shí)變量的值, 比如前一節(jié)課我們編的輸入姓名的程序, 你不能確定InputBox返回的是什么(還記得Inputbox的返回值嗎? 就是你輸入的內(nèi)容), 所以你就沒(méi)有辦法應(yīng)對(duì)各種情況, 但我們用name這個(gè)"盒子"把用戶的名字裝起來(lái), 到用的時(shí)候我們只要知道name這個(gè)盒子的名字就行了, 系統(tǒng)會(huì)自己打開它并把里面的內(nèi)容拿出來(lái)用. 再舉個(gè)例子, 我們編寫一個(gè)程序計(jì)算一個(gè)矩形的面積, 比如這個(gè)程序要發(fā)給小學(xué)生使用: dim a,b,s a=15 b=12 s=a*b msgbox s 這樣就可以求出長(zhǎng)為15,寬為12的矩形的面積了, 是不是很簡(jiǎn)單? 當(dāng)然, 這個(gè)程序也可以這樣寫: dim s s=15*12 msgbox s 這樣看起來(lái)程序短了許多, 也節(jié)約內(nèi)存, 但兩種都不是鼓勵(lì)的做法, 為什么? 請(qǐng)看下面. 現(xiàn)在, 我們的程序要變得像點(diǎn)樣子才行, 誰(shuí)的程序?qū)懗鰜?lái)還要?jiǎng)e人修改源代碼才能用啊? 所以, 我們要接受用戶的輸入, 還記得嗎? InputBox函數(shù). 修改后程序如下: dim a,b,s a=inputbox("請(qǐng)輸入矩形的長(zhǎng):") b=inputbox("請(qǐng)輸入矩形的寬:") s=a*b msgbox s ok, 這么一修改, 無(wú)論用戶輸入怎樣的數(shù)據(jù), 我們都能計(jì)算出矩形的面積了. 如果你用s=15*12能改嗎? 當(dāng)然不行. 我想你已經(jīng)發(fā)現(xiàn)了, vbs中的數(shù)學(xué)計(jì)算和真正的算術(shù)沒(méi)有什么不同, +,-,*,/,(),[],{}都是一樣的用法, 比如: dim ans ans=12+32/4+[(23-10)*2] msgbox ans 四則運(yùn)算的法則在編程中同樣生效, 你可以在編程中重新獲得小學(xué)時(shí)候的樂(lè)趣(你恨數(shù)學(xué)?那就別學(xué)電腦了). 在編程中有一個(gè)有趣的運(yùn)算符是"mod", 這個(gè)運(yùn)算符叫做"取余運(yùn)算符", 就是取得一次除法的余數(shù), 例如 dim a a=16 mod 5 你知道a等于幾嗎? Bingo! 沒(méi)錯(cuò), 就是1. 因?yàn)?6 / 5 =3....1, 所以mod計(jì)算的結(jié)果就是1. 還有一個(gè)運(yùn)算符是"^"(就是鍵盤"6"上面的小箭頭), 他表示"乘冪"(或者是"方") 比如: dim a,b,c a=2 b=a^2 c=a^3 msgbox b msgbox c 則b=a*a=4, c=a*a*a=8 好了,我們一次不要講太多, 這次就講到這里, 現(xiàn)在總結(jié)一下. 要點(diǎn): 1) 常量分為自然常量和自定義常量, 常量的值不可修改 2) 變量就像盒子, 我們不在乎盒子里裝的是什么, 但一定要知道盒子的名字 3) 四則運(yùn)算在編程中沒(méi)有任何不同 4) MOD是取余運(yùn)算 作業(yè): 1) 編一個(gè)程序, 計(jì)算圓形的面積, 半徑由用戶給出 (使用Inputbox) PI取值3.14159 2) 編一個(gè)程序取得20 / 3 的余數(shù) 第三篇(共六篇) 首先, 我來(lái)解決一下上次課程的幾個(gè)疑問(wèn) 第一, 那個(gè)余數(shù)問(wèn)題, 16 / 5 = 3……1, 是因?yàn)槲腋倪^(guò)前面的部分, 后面的忘了改了, 不好意思. 第二, 請(qǐng)看一下程序清單: ?。?) Dim a,b,c a=inputbox("a是:","輸入半徑") b=Inputbox("b是:","輸入半徑") c=a*2+b*2 msgbox c 這個(gè) 輸入1、2時(shí)是6 ?。?) Dim a,b,c a=inputbox("a是:","輸入半徑") b=Inputbox("b是:","輸入半徑") c=(a+b)*2 msgbox c 這個(gè)輸入1、2時(shí)是24 為什么會(huì)不一樣呢? 在數(shù)學(xué)上c=(a+b)*2 和 c=a*2+b*2是等價(jià)的, 在VBS中也是如此. 問(wèn)題出在"+"上, 在VBS中, +不僅僅是加號(hào)的意思還表示把兩個(gè)字符串連接起來(lái), 例如"Hello"+"World"="HelloWorld" ,have you understood? 你還記得InoutBox函數(shù)的返回值嗎? 是字符串! 這就看出問(wèn)題了吧, 在編程中"1"不等于(<>)1, "1"是一個(gè)字符, 而1是一個(gè)數(shù), 所以a,b都是字符串變量, "1"+"2"="12", 這就好像我們小時(shí)跟伙伴開玩笑問(wèn)他們1+1=?一樣, 我們總是笑著說(shuō)"錯(cuò)啦,應(yīng)該是11".但為什么, a可以*2卻不發(fā)生錯(cuò)誤呢? 這時(shí)VBS比較智能的一個(gè)表現(xiàn), 如果這個(gè)字符串的內(nèi)容是一個(gè)數(shù)且對(duì)他進(jìn)行數(shù)學(xué)運(yùn)算, 則把字符串強(qiáng)制轉(zhuǎn)換成數(shù)參與運(yùn)算, 如果字符串代表一個(gè)數(shù), 但不參加數(shù)學(xué)運(yùn)算, 而是參加字符串運(yùn)算(合并)則當(dāng)作字符串處理, 所以你看到a+b=12, 這時(shí)候a+b的結(jié)果(12)是一個(gè)字符串, 當(dāng)它要乘以2的時(shí)候就被強(qiáng)制轉(zhuǎn)換成了數(shù)字12, 這樣我就得到了結(jié)果24. 怎么修改這個(gè)程序呢? 我們需要用到另一個(gè)內(nèi)建的函數(shù):int, int函數(shù)的功能是將輸入值轉(zhuǎn)化成整數(shù)值, 我們這樣修改: c=(int(a)+int(b))*2 這個(gè)意思就是把a(bǔ)作為參數(shù)傳遞給int函數(shù), int函數(shù)就會(huì)返回那個(gè)整數(shù)(你的輸入值), 然后讓返回值參與運(yùn)算, 這樣就得到了正確答案.所以,以后如果你用的是inputbox函數(shù)的話,最好用int語(yǔ)句加工一下:比如c=int(c) c是你自己的變量 另外,還有一個(gè)函數(shù):CDbl。如果你想把字符轉(zhuǎn)換為數(shù)字,但又不取整時(shí)就用這個(gè): Dim a,b,c,d,e a=inputbox("a是:","輸入半徑") b=Inputbox("b是:","輸入半徑") c=CDbl(a) d=CDbl(b) e=(c+d)*2 msgbox e 你輸入1.2,1.3時(shí)就會(huì)輸出5。 上面的實(shí)例也可以綜合寫成: Dim a,b a=CDbl(inputbox("a是:","輸入半徑")) b=CDbl(Inputbox("b是:","輸入半徑")) Msgbox (a+b)*2 這樣輸入1.2,1.3時(shí)依然就得出5。不過(guò)這樣寫比較適合學(xué)習(xí)過(guò)一段時(shí)間VBS的朋友. 大家是不是覺(jué)得這個(gè)課程有點(diǎn)枯燥?呵呵, 變量和運(yùn)算符部分的確是這樣的, 不過(guò)多多練習(xí)也就好了, 這次, 我們寫寫真正好玩的東西: 流程控制語(yǔ)句. 這個(gè)部分開始才是真正的編程. 首先介紹判斷結(jié)構(gòu). 在此之前, 我們先介紹一種簡(jiǎn)單的變量類型:布爾值(Boolean), 這種變量只有兩個(gè)可能值:True,Flase,即真或假. 這種變量在某些情況下很有用(比如"開關(guān)"). 我們定義一個(gè)Boolean變量的方法和其他變量一樣, 賦值也一樣, 例如: dim a,b a=true b=false 注意,true和"true"(加雙引號(hào))是不一樣的, "true"是字符串,true是布爾值, 千萬(wàn)不能混淆. 回到if語(yǔ)句上來(lái), 我們先來(lái)看看簡(jiǎn)化版的if語(yǔ)句:if 判斷式 then 語(yǔ)句體 我們來(lái)看一個(gè)例子: dim a,b a=12 b=13 if b>a then msgbox "B大于A" 我們只看最后一行, a>b這個(gè)式子(表達(dá)式)有一個(gè)返回值, 是Boolean型的. 因?yàn)檫@個(gè)式子只有兩種可能:b大于a, b不大于a, 所以這個(gè)式子也只有兩種可能性, 即真或者假. if語(yǔ)句判斷這個(gè)表達(dá)式的返回值是真還是假, 如果是真(true)則執(zhí)行then后面的語(yǔ)句, 如果是假, 則不執(zhí)行, 你把a(bǔ)的值改成14看看還會(huì)不會(huì)彈出對(duì)話框? 當(dāng)我們要在判斷之后執(zhí)行多行語(yǔ)句怎么辦呢, 我們需要用語(yǔ)句塊來(lái)解決, 在這里可以叫塊if dim a,b a=12 b=13 if a鍵)個(gè)格, 這不是必需的, 但是是一個(gè)好習(xí)慣, 以便看清楚程序的結(jié)構(gòu). 這樣我們就能運(yùn)行多于一個(gè)的語(yǔ)句, 請(qǐng)注意if...then...end if 這三個(gè)關(guān)鍵部分不要掉了. OK, 我出一個(gè)題, 輸入一個(gè)數(shù), 如果小于100就輸出"錯(cuò)誤", 如果大于100就輸出"正確", 我這里有兩個(gè)程序版本: dim a a=inputbox("請(qǐng)輸入一個(gè)大于100的數(shù)") a=int(a) inputbox返回的是字符串, 我們把他變成整數(shù) : ) if a>100 then msgbox "正確" if a<100 then msgbox "錯(cuò)誤" 還有一個(gè)更簡(jiǎn)單的 dim a a=inputbox("請(qǐng)輸入一個(gè)大于100的數(shù)") a=int(a) inputbox返回的是字符串, 我們把他變成整數(shù) if a>100 then msgbox "正確" else msgbox "錯(cuò)誤" end if 看到多了一個(gè)else了吧, else的作用就是當(dāng)要判斷的表達(dá)式為false時(shí)執(zhí)行的. 這樣程序就可以處理兩種不同的情況了. 不要忘了用end if結(jié)尾 嘿嘿, 我是“變態(tài)者”, 現(xiàn)在我要你處理三種情況, <100,=100,>100, 還要寫在一個(gè)if結(jié)構(gòu)里, 你怎么辦, 我給你答案: dim a a=inputbox("請(qǐng)輸入一個(gè)大于100的數(shù)") a=int(a) inputbox返回的是字符串, 我們把他變成整數(shù) if a>100 then msgbox "正確" elseif a=100 then msgbox "老大, 你耍我?" else msgbox "錯(cuò)誤" end if 這次輸入100看看, 是什么? else if語(yǔ)句可以在if結(jié)構(gòu)中多次出現(xiàn), 以靈活判斷不同的情況 (如果你要判斷得太多, 就請(qǐng)使用"選擇結(jié)構(gòu)", 過(guò)會(huì)兒就講), 當(dāng)所有elseif都處理完了,而沒(méi)有符合情況的時(shí)候再執(zhí)行else中的語(yǔ)句.另一個(gè)例子: Dim a,b,c,d a=inputbox("a是:","輸入半徑") b=Inputbox("b是:","輸入半徑") d=Inputbox("答案:","輸入答案") c=a*2+b*2 這里沒(méi)有問(wèn)題, 會(huì)自動(dòng)轉(zhuǎn)換 if d=c then msgbox "你好聰明" else msgbox "你好豬頭 自己的題還不會(huì)!" end if 哈哈, 無(wú)論你回答得多么正確你都是豬頭, 不是我耍你, 還是文章開始時(shí)候的inputbox的返回類型在耍你, d是inputbox的返回值, 他是一個(gè)字符串, 而c是一次整數(shù)計(jì)算的結(jié)果, 他是一個(gè)整數(shù). 一個(gè)字符串無(wú)論如何也不等于一個(gè)整數(shù), 盡管他們字面上是一樣的:"8"<>(不等于號(hào))8 所以if的判斷式的值永遠(yuǎn)是false, 總是執(zhí)行else部分的語(yǔ)句. 我們可以這么修改 Dim a,b,c,d a=inputbox("a是:","輸入半徑") b=Inputbox("b是:","輸入半徑") d=Inputbox("答案:","輸入答案") d=int(d) 在這里我們?nèi)〕隽薲的值, 變成整數(shù), 再放回"d"這個(gè)盒子里 c=a*2+b*2 if d=c then msgbox "你好聰明" else msgbox "你好豬頭 自己的題還不會(huì)!" end if 這樣就成功了. 這也是Inputbox函數(shù)的一個(gè)討厭的地方, 沒(méi)辦法, vbs沒(méi)有其他好的輸入方式了. 說(shuō)到if, 我們不得不說(shuō)一說(shuō)邏輯運(yùn)算符, 今天介紹兩種, "and" 和 "or" 學(xué)會(huì)了if語(yǔ)句之后, 我舉一個(gè)例子, 你一看就明白了. dim a,b a=inputbox("輸入一個(gè)數(shù) >10") b=inputbox("輸入另一個(gè)數(shù) >10") a=int(a) b=int(b) if a>10 and b>10 then msgbox "正確" else msgbox "錯(cuò)誤" end if 這段程序讓你輸入兩個(gè)值, 必須都大于10, 只要有一個(gè)不大于, 就輸出錯(cuò)誤 dim a,b a=inputbox("輸入一個(gè)數(shù) >10") b=inputbox("輸入另一個(gè)數(shù) >10") a=int(a) b=int(b) if a>10 or b>10 then msgbox "正確" else msgbox "錯(cuò)誤" end if 這段程序讓你輸入兩個(gè)值, 只要有一個(gè)大于10, 就返回成功. 其實(shí)and和or很好理解, 我讀"if a>10 or b>10 then" 這一句, 用華語(yǔ)是這樣:"如果a大于10或者b大于10, 那么...". 這樣是不是就很好理解了呢. OK, 我們?cè)賮?lái)看一種新結(jié)構(gòu),,學(xué)完這個(gè),今天的課就結(jié)束, 已經(jīng)午夜了, 我都累死了. 當(dāng)你的程序要處理很多種不同的判斷情況的時(shí)候elseif..then會(huì)讓程序看起來(lái)很雜亂, 所以就有了一種select case結(jié)構(gòu)專門對(duì)付這種情況, select case的語(yǔ)法結(jié)構(gòu)很簡(jiǎn)單: select case 變量名 case 值 語(yǔ)句 case 值 語(yǔ)句 case else 語(yǔ)句 end select 我們舉個(gè)例子就能很簡(jiǎn)單的說(shuō)明: dim a a=inputbox("輸入一個(gè)1--3的值") a=int(a) 處理inputbox返回字符串的問(wèn)題 select case a case 1 msgbox "壹" case 2 msgbox "貳" case 3 msgbox "叁" case else msgbox "輸入錯(cuò)誤" end select 這個(gè)例子把1,2,3這三個(gè)阿拉伯?dāng)?shù)字轉(zhuǎn)化成中國(guó)大寫數(shù)字, 這個(gè)程序?qū)懗蒳f...elseif 的形式如下 dim a a=inputbox("請(qǐng)輸入1--3的值") a=int(a) if a=1 then msgbox "壹" elseif a=2 then msgbox "貳" elseif a=3 then msgbox "叁" else msgbox "輸入錯(cuò)誤" end if 怎么樣, 麻煩吧, 還是select好吧. OK, 今天到此結(jié)束, 總結(jié)一下: 要點(diǎn): 1) inputbox返回的是一個(gè)字符串, 而不是一個(gè)數(shù), 必須用a=int(a)這種形式轉(zhuǎn)化成數(shù) 2) bool變量的值只有兩種:true,false 2.5) and兩邊的表達(dá)式都是true, 則返回true. or兩邊的表達(dá)式有一個(gè)是true, 就返回true 3) if 語(yǔ)句的格式 4) select...case的格式 作業(yè): 1) 使用3個(gè)bool值, 儲(chǔ)存你的3兄弟姐妹是否是男性 (提示:sister1male=false) 2) 給定一個(gè)個(gè)數(shù), 大于10而且小于20輸出"正確", 否則輸出"錯(cuò)誤" 3) 輸入12,或者15, 輸出"正確", 否則輸出"錯(cuò)誤" 4) 把5以內(nèi)的正整數(shù)都轉(zhuǎn)換成中國(guó)大些數(shù)字 5) 自己隨便設(shè)計(jì)一個(gè)程序, 應(yīng)用今天的知識(shí) 第四篇(共六篇) 大家好,今天寫第4章:循環(huán)結(jié)構(gòu) 我們先來(lái)看一道題:商場(chǎng)進(jìn)行每日結(jié)算, 要求累加出今天的營(yíng)業(yè)額, 每次輸入一個(gè)數(shù), 這道題其實(shí)很簡(jiǎn)單, 但就我們現(xiàn)在學(xué)過(guò)的知識(shí)要完成這道題相當(dāng)麻煩, 我們來(lái)分析一下. 首先, 我們需要知道買賣的次數(shù), 這樣才能控制輸入的次數(shù),但是, 這種設(shè)計(jì)是非常低效的, 每天都要重新設(shè)計(jì)程序. 假定今天進(jìn)行了5次交易, 以下是源程序: dim sum sum=0 初始化變量 sum=sum + int(inputbox("請(qǐng)輸入交易額")) sum=sum+x 這種形式是把本身的值取出來(lái), 進(jìn)行一次運(yùn)算, 再放回本身, 這種方法很有用處 這里使用了函數(shù)嵌套, 把inputbox的返回值直接傳給int函數(shù), 轉(zhuǎn)化成整數(shù), 下同 sum=sum + int(inputbox("請(qǐng)輸入交易額")) sum=sum + int(inputbox("請(qǐng)輸入交易額")) sum=sum + int(inputbox("請(qǐng)輸入交易額")) sum=sum + int(inputbox("請(qǐng)輸入交易額")) msgbox sum 看到了嗎, 我通過(guò)把計(jì)算過(guò)程復(fù)制了5遍才設(shè)計(jì)好了程序, 這種程序在汽車交易所等交易次數(shù)少的地方還能湊合著用, 如果放到超市豈不是要復(fù)制, 粘貼幾千遍? 我們今天講的內(nèi)容就可以克服這種缺陷, 首先, 我們來(lái)講以下Do...Loop語(yǔ)句. do...loop的結(jié)構(gòu)看上去非常簡(jiǎn)單, 就是:do...loop, 僅此而已, 這個(gè)結(jié)構(gòu)不斷執(zhí)行do和loop之間的語(yǔ)句(學(xué)名叫:循環(huán)體), 永不停止. 舉個(gè)例子來(lái)說(shuō): do msgbox "這個(gè)信息會(huì)不斷重復(fù)出現(xiàn), 要停止程序請(qǐng)使用任務(wù)管理器(Ctrl+Alt+Del)中止wscript進(jìn)程" loop 運(yùn)行這個(gè)程序, 當(dāng)你點(diǎn)銷掉一個(gè)對(duì)話框馬上會(huì)出來(lái)另一個(gè), 你永遠(yuǎn)點(diǎn)不完, 總有下一個(gè). 誰(shuí)會(huì)運(yùn)行這樣的程序? 除非是給別人搗亂(我就干過(guò)這種事), 所以在do..loop結(jié)構(gòu)中還有一個(gè)語(yǔ)句:exit do, 這個(gè)語(yǔ)句將終止循環(huán), 跳到loop后面的語(yǔ)句繼續(xù)執(zhí)行.舉個(gè)例子來(lái)說(shuō): dim a 注意:常量不需要在dim里面聲明,否則會(huì)引發(fā)錯(cuò)誤 const pass="123456" 這是一個(gè)字符串 請(qǐng)用""包裹起來(lái). 設(shè)定密碼為常量, 不可變更 do a=inputbox("請(qǐng)輸入密碼") if a=pass then msgbox "密碼校驗(yàn)成功" exit do end if loop 這個(gè)程序會(huì)一直不停的問(wèn)你密碼, 知道你輸入了正確的密碼為止.(if可以嵌套在另一個(gè)if當(dāng)中, 也可以嵌套在循環(huán)體當(dāng)中, 所以一定要用縮進(jìn), 來(lái)分清楚程序的各個(gè)部分). 這個(gè)程序是很經(jīng)典的, 早期的程序都是這么做的. 但是我們是Hacker, 所以我們了解系統(tǒng)的安全性, 這種無(wú)限次認(rèn)證程序很容易被窮舉破解, 我們要來(lái)限定認(rèn)證的次數(shù). 修改程序如下 dim a,ctr ctr=0 設(shè)置計(jì)數(shù)器 const pass="pas123_" 上面的那個(gè)是弱密碼, 這次改的強(qiáng)一點(diǎn) do a=inputbox("請(qǐng)輸入密碼") if a=pass then msgbox "認(rèn)證成功" exit do else if ctr=3 then msgbox "已經(jīng)達(dá)到認(rèn)證上限, 認(rèn)證程序關(guān)閉" exit do else ctr=ctr+1 msgbox "認(rèn)證出錯(cuò), 請(qǐng)檢查密碼" end if end if loop 運(yùn)行這個(gè)程序試試看, 當(dāng)你出了3次錯(cuò)誤以后, 就會(huì)停止再次詢問(wèn)密碼, 關(guān)閉程序. telnet認(rèn)證用來(lái)限制次數(shù)的程序與此大同小異. 要注意的是嵌套的if語(yǔ)句, 請(qǐng)仔細(xì)讀一下這個(gè)程序, 可能比較難懂, 也請(qǐng)你試著自己設(shè)計(jì)一下類似的程序. 其實(shí), 要在do...loop加上驗(yàn)證的功能, 并不一定要用if, 我們可以直接利用do. 我來(lái)介紹一下while關(guān)鍵字, while可以放在do或者是loop后面, 然后再接一個(gè)表達(dá)式, 當(dāng)表達(dá)式的值為true的時(shí)候(表達(dá)式成立),才運(yùn)行循環(huán)體.我們來(lái)看一下修改后的 程序" dim a,ctr ctr=0 const pass="pas123_" do while ctr<3 a=inputbox("請(qǐng)輸入密碼") if a=pass then msgbox "認(rèn)證成功" msgbox "(你可以在這里加一段成功后得到的信息)" exit do else ctr=ctr+1 如果密碼出錯(cuò)就增加一次錯(cuò)誤認(rèn)證計(jì)數(shù) msgbox "認(rèn)證出錯(cuò), 請(qǐng)檢查密碼" end if loop 這樣實(shí)現(xiàn)的功能和上一個(gè)例子完全一樣, 我們?cè)賮?lái)看看把while放在loop后面: dim a,ctr ctr=0 const pass="pas123_" do a=inputbox("請(qǐng)輸入密碼") if a=pass then msgbox "認(rèn)證成功" msgbox "(你可以在這里加一段成功后得到的信息)" exit do else ctr=ctr+1 如果密碼出錯(cuò)就增加一次錯(cuò)誤認(rèn)證計(jì)數(shù) msgbox "認(rèn)證出錯(cuò), 請(qǐng)檢查密碼" end if loop while ctr<3 功能是一樣的, 為什么要放在loop后面呢? 你把ctr的值改成3就知道了, while在do后面的程序會(huì)直接退出, 而在loop后面還會(huì)允許一次認(rèn)證, 到了loop才結(jié)束.和while相反的是until, 用法和while一樣, 不過(guò)他只有當(dāng)后面的表達(dá)式的值為false(表達(dá)式不成立)的時(shí)候才執(zhí)行循環(huán)體, 請(qǐng)自己試驗(yàn)一下 ok, 我們來(lái)看另外一種循環(huán)結(jié)構(gòu),for....next, 這種循環(huán)結(jié)構(gòu)是基于計(jì)數(shù)的, 也是在編程中最常見(jiàn)到的循環(huán)結(jié)構(gòu). dim i for i=0 to 5 msgbox i next 看到了嗎?每次輸出的i都是遞增的, 但我們沒(méi)有明確指出i要遞增, 當(dāng)i達(dá)到5的時(shí)候, 循環(huán)就結(jié)束了, 因?yàn)橛?開始, 所以循環(huán)體執(zhí)行了6次, 這一點(diǎn)很重要, 大部分東西都是從0開始而不是1. 這個(gè)程序也可以寫成 do的形式: dim i i=0 do while i<5 msgbox i i=i+1 因?yàn)閐o不能自動(dòng)計(jì)數(shù), 必須手動(dòng)加 loop 怎么樣, 還是for比較好用吧. for在編程中很有用途, 我們?cè)倥e一個(gè)例子, 順便講一下嵌套循環(huán). dim i,j for i=1 to 9 for j=1 to 9 str=str & i * j & " " &是和并字符串的符號(hào) next 每個(gè)next對(duì)應(yīng)一個(gè)for next msgbox str (這樣出現(xiàn)的結(jié)果是一次性的,如果你需要依次出現(xiàn)把msgbox str)提前到next之前 看看運(yùn)行結(jié)果, 是否令你會(huì)想起小學(xué)時(shí)代的數(shù)學(xué)老師(丑陋的嘴臉). 要注意, 這里有一個(gè)"大"的for, 和一個(gè)小的for, 當(dāng)小的for執(zhí)行完一個(gè)周期以后, 大的for才執(zhí)行一次(換句話說(shuō), 大的for執(zhí)行一次, 小的要執(zhí)行9次), 所以一共執(zhí)行了九九八十一次. 在大的for里可以不僅僅是一個(gè)小的for, 也可以加上另外的語(yǔ)句. 我們來(lái)修改一下源程序: dim i,j for i=1 to 9 for j=1 to 9 str=str & i * j & " " next 每個(gè)next對(duì)應(yīng)一個(gè)for str=str & vbCrlf vbCrlf相當(dāng)于鍵盤上的回車鍵,因?yàn)槟悴荒茉阪I盤上輸入,所以系統(tǒng)定義了一個(gè)默認(rèn)的常量 next msgbox str 這次運(yùn)行完成以后, 輸出結(jié)果按照乘數(shù)進(jìn)行了分割, 每小for運(yùn)行完一次, 就換一行(通過(guò)vbcrlf). 這次的內(nèi)容對(duì)菜鳥可能比較難懂, 掌握的辦法只有一個(gè):多實(shí)踐. 另外, 我在論壇看到很多人還問(wèn):"VBScript要用什么工具編?"我就很氣憤, 我在第一篇里面已經(jīng)說(shuō)明:用記事本編輯源代碼, 然后保存為以.vbs為擴(kuò)展名的程序就可以了, 請(qǐng)大家不要用其他工具編寫,否則很容易引起錯(cuò)誤. 再問(wèn). 另外, 國(guó)產(chǎn)的一種垃圾軟件"超級(jí)X霸"搶占了vbs這個(gè)擴(kuò)展名, 請(qǐng)把那個(gè)垃圾卸載掉. 我們總結(jié)一下: 要點(diǎn): 1) do..loop和exit do的用法 2) while當(dāng)表達(dá)式true的時(shí)候執(zhí)行循環(huán)體,until反之 3) for...next是計(jì)數(shù)循環(huán), 每次執(zhí)行計(jì)數(shù)器遞加 4) 嵌套循環(huán)的作用和寫法 4.5) &用于連接字符串 5) vbCrLf相當(dāng)于鍵盤上的回車鍵 作業(yè): 1) 在我國(guó)的數(shù)學(xué)經(jīng)典著作"九章算術(shù)"中有這樣一道題:百錢買百雞, 公雞5錢一只, 母雞3錢一只, 小雞1錢3只)求得是能有多少種辦法買這些雞. 如果看不懂的話我用大白話說(shuō)說(shuō):有人要去買雞, 用100塊錢正好買了100只雞, 價(jià)格如下:公:5$, 母:3$, 小:1$ for 3, 讓你求一共多少種賣法(公母小怎么搭配). 請(qǐng)用循環(huán)解決這個(gè)問(wèn)題. ps:今天要去移民局辦事, 所以文章寫的很倉(cāng)促. 大部分代碼都沒(méi)有實(shí)驗(yàn), 請(qǐng)大家?guī)臀艺义e(cuò). 另外, 上次的作業(yè)大家在論壇應(yīng)該看到了, 我就不重復(fù)答案了, 不知道大家喜歡做這種題, 還是以前那種比較簡(jiǎn)單的? 第五篇(共六篇) 請(qǐng)?jiān)试S我先描述一下我現(xiàn)在的環(huán)境:氣溫高達(dá)37攝氏度, 而我忘記了圖書館開門的時(shí)間, 還要在這里站上一個(gè)小時(shí), 在熱帶植物的包裹下, 各種奇怪的小飛蟲圍著我轉(zhuǎn)來(lái)轉(zhuǎn)去. 不過(guò)令我欣慰的是, 終于寫到五了, 還有兩課我們的"基礎(chǔ)篇"就要結(jié)束了. 今天我們來(lái)了解語(yǔ)言本身的最后一個(gè)論題:數(shù)組. 要理解"數(shù)組", 這個(gè)概念我覺(jué)得另一種翻譯對(duì)學(xué)習(xí)來(lái)說(shuō)更加容易:"陣列", 沒(méi)錯(cuò), 數(shù)組就是一個(gè)陣列, 一個(gè)數(shù)據(jù)的陣列. 最簡(jiǎn)單的例子是數(shù)據(jù)庫(kù)系統(tǒng), 假設(shè)你要儲(chǔ)存20名學(xué)生的英語(yǔ)成績(jī), 如果不是用數(shù)組, 你則要?jiǎng)?chuàng)建20個(gè)不同的變量, 累死. 數(shù)組就是類型相同(重要!)的一組數(shù)據(jù)(或者n組), 用來(lái)儲(chǔ)存相關(guān)的量, 最簡(jiǎn)單的數(shù)組是一維數(shù)組, 我們就先來(lái)學(xué)習(xí)它吧. 什么是一維數(shù)組呢? 在3維以下,你可以利用幾何知識(shí)來(lái)理解"維"的概念,一維相當(dāng)于一條線, 二維則是一個(gè)矩形, 三維是一個(gè)長(zhǎng)方體. 我知道這么講是很抽象的, 我們先舉個(gè)一維數(shù)組的例子就比較容易了解了. dim a(9) 從零開始 for i=0 to 9 a(i)=i 填充每一個(gè)數(shù)組元素 msgbox a(i) 輸出數(shù)組元素 next 我們可以看到, 定義一個(gè)數(shù)組的方法和定義一個(gè)變量沒(méi)有什么不同, 同樣是使用dim語(yǔ)句. 定義一維數(shù)組的方法如下: dim 數(shù)組名(元素?cái)?shù)量), 這里大家要注意一點(diǎn), 這里定義的元素?cái)?shù)量總是比你要的要少一個(gè), 因?yàn)橐粋€(gè)數(shù)組的起點(diǎn)是0號(hào)數(shù)據(jù)而不是1, 所以大家一定要小心: 你需要10個(gè)數(shù)據(jù), 就定義"9", 需要100個(gè)就定義99, 依此類推. 數(shù)組的元素可以看成一個(gè)個(gè)獨(dú)立的變量, 你可以像獨(dú)立的變量那樣使用他們. 數(shù)組元素的量可能是毫無(wú)關(guān)系的, 比如第一個(gè)數(shù)組元素儲(chǔ)存你的年齡, 第二個(gè)儲(chǔ)存今年西瓜的銷售量, 但這種做法是不鼓勵(lì)的, 甚至是不被接受的, 不要這么干, 這樣的情況請(qǐng)定義獨(dú)立的變量. for語(yǔ)句在數(shù)組中可算是大顯身手, 還記得for嗎? 它累加一個(gè)變量, 我們可以把這個(gè)變量應(yīng)用在數(shù)組中正好用來(lái)讀取或者填充按照順序排列的數(shù)組元素, 上面就是這樣一個(gè)例子. 數(shù)組其實(shí)是很簡(jiǎn)單的東西(再BASIC語(yǔ)言里面), 數(shù)組難的是怎么搗弄這些循環(huán), 讓他們按照你的要求運(yùn)轉(zhuǎn). 這個(gè)等到二維數(shù)組再說(shuō), 我們先看看如何手工填充數(shù)組. 如果你這個(gè)都想不到的話, 那你真是白學(xué)了: dim name(7),str 一共八個(gè)學(xué)生, str變量是用來(lái)把他們儲(chǔ)存成一個(gè)字符串以便輸出 for i=0 to 7 name(i)=inputbox("請(qǐng)輸入第" & i+1 & "個(gè)學(xué)生的名字") str=str & " " & name(i) next msgbox str 這樣我們就有了一個(gè)小小的數(shù)據(jù)庫(kù), 它們的數(shù)據(jù)排列可以看成這樣: name(0),name(1),name(2).....name(7) 看到了吧, 所以我說(shuō)我們可以把它看成是"一條線", 等到我們學(xué)到了文件操作, 就可以把他們輸出到文件中去了. 一維數(shù)組有很多用處, 我們來(lái)看一下一個(gè)復(fù)雜的例子. 我們要儲(chǔ)存3各學(xué)生的名字, 身高, 成績(jī)這三種數(shù)據(jù), 由于名字是字符串, 而身高可能是浮點(diǎn)數(shù)(帶小數(shù)點(diǎn)的數(shù)), 成績(jī)則可能是整數(shù), 所以我們不能把他們儲(chǔ)存在一個(gè)數(shù)組里面(不要忘記, 數(shù)組織只能存儲(chǔ)同類的數(shù)據(jù)), 所以我們要建3個(gè)數(shù)組, 以下是例程: dim name(2), high(2), mark(2) 定義三個(gè)數(shù)組分別儲(chǔ)存3個(gè)人的名字, 身高和得分 dim ctr 計(jì)數(shù)器 for ctr=0 to 2 name(ctr)=inputbox("請(qǐng)輸入第" & ctr+1 & "個(gè)學(xué)生的姓名") high(ctr)=inputbox("請(qǐng)輸入第" & ctr+1 & "個(gè)學(xué)生的身高") mark(ctr)=inputbox("請(qǐng)輸入第" & ctr+1 & "個(gè)學(xué)生的得分") next OK, 我們已經(jīng)填充好了數(shù)據(jù), 現(xiàn)在我們的小小數(shù)據(jù)庫(kù)只能按順序輸入, 我們要讓它看起來(lái)像點(diǎn)樣子, 我們來(lái)給他設(shè)計(jì)查詢功能: 接著上面的程序 dim cname, temp 要查詢的名字, 和一個(gè)臨時(shí)變量, 用來(lái)儲(chǔ)存數(shù)據(jù)的位置 cname=inputbox("請(qǐng)輸入你要查詢的名字:") for ctr=0 to 2 遍歷所有name數(shù)組的成員, 尋找要查詢的名字 if name(ctr)=cname then temp=ctr 記錄數(shù)據(jù)位置 exit for 退出循環(huán), 和exit do的用法一樣 end if 不要忘了end if next msgbox "姓名:" & name(temp) & " " & "身高:" & high(temp) & " " & "得分:" & mark(temp) 嘿嘿, 有意思吧, 其實(shí)在這個(gè)程序里面, 那個(gè)temp變量完全沒(méi)有必要, 只是為了更清楚地說(shuō)明問(wèn)題. 因?yàn)楫?dāng)exit for以后ctr變量的值就不會(huì)改變, 儲(chǔ)存的正好是對(duì)應(yīng)數(shù)據(jù)在數(shù)組中的位置, 寫這個(gè)temp變量是為了照顧到以后要學(xué)C++的朋友(C++可以在for語(yǔ)句里聲明新變量, 只在這個(gè)for結(jié)構(gòu)中有效, 所以到了外部就不能訪問(wèn)了). 也就是說(shuō)可以簡(jiǎn)化成如下: dim cname cname=inputbox("請(qǐng)輸入你要查詢的名字:") for ctr=0 to 2 if name(ctr)=cname then exit for 因?yàn)橹挥衑xit for就不需要塊if了 next msgbox "姓名:" & name(ctr) & " " & "身高:" & high(ctr) & " " & "得分:" & mark(ctr) 這是最直接的路子. 好好重讀一下上面所有的源代碼, 然后自己寫幾個(gè)程序, 完全搞清楚一維數(shù)組及其應(yīng)用以后再看后面的二位數(shù)組. 二維數(shù)組好像是一個(gè)一維數(shù)組的集合, 就好像"線積成面"一樣, 由n各一維數(shù)組組成二維數(shù)組, 這是初學(xué)者比較好理解的辦法(比較精確的是用"編號(hào)"的概念去理解, 因?yàn)?維以上的數(shù)組就比較難以用歐幾里德幾何概念去解釋了). 二維數(shù)組是很好解釋的, 我們來(lái)看一下: dim a(2,2) 從零開始, 一共有3 X 3 = 9 個(gè)數(shù)據(jù) dim i,j 需要兩個(gè)計(jì)數(shù)器 for i=0 to 2 for j=0 to 2 使用嵌套循環(huán) a(i,j)="X" next next 我們創(chuàng)建了一個(gè)這樣的二維數(shù)組(那些","是我用來(lái)分割元素的,并不存在), 了解二維數(shù)組的了嗎? 不清楚我們?cè)僦v一下 編號(hào) 0 1 2 0 X,X,X 1 X,X,X 2 X,X,X 二維數(shù)組的看起來(lái)是不是就是一個(gè)矩形呢?(你在內(nèi)存中看不到這樣的矩形, 只是便于你理解), 每個(gè)數(shù)據(jù)都有編號(hào), 由兩個(gè)數(shù)來(lái)定位, 這個(gè)很像(非常像)你在國(guó)際象棋棋盤上尋找一個(gè)格, 我們用類似"C6","A2"這樣的"垂直坐標(biāo)"進(jìn)行定位, 對(duì), "垂直坐標(biāo)", 很確切. 我們要使用一個(gè)二維數(shù)組元素的時(shí)候可以和普通變量一樣使用, 只要指定數(shù)組元素的"定位點(diǎn)"就可以了, 例如a(0)(1)=1, b(2)(1)="你好", 諸如此類. 要注意的是二維數(shù)組也只能儲(chǔ)存類型相同的元素, 而且上標(biāo)(起點(diǎn))也從0開始. 計(jì)算一個(gè)二維數(shù)組的元素個(gè)數(shù)只要把兩個(gè)下標(biāo)+1(以得到實(shí)際的值)再乘起來(lái)就可以了, 非常類似于求一個(gè)矩形的面積. 假如需要儲(chǔ)存的都是同一類型的數(shù)據(jù), 我們就可以用二維數(shù)組, 比如要儲(chǔ)存5個(gè)人的姓名,國(guó)籍,民族, 就可以使用二維數(shù)據(jù) dim info(4,2) 一共五個(gè)人, 要儲(chǔ)存的數(shù)據(jù)類型有3項(xiàng) dim i,j for i=0 to 4 for j=0 to 2 dim opt 定義一個(gè)變量用于存儲(chǔ)數(shù)據(jù)項(xiàng)提示 select case j 判斷應(yīng)該輸入的是什么數(shù)據(jù) case 0 opt="姓名" case 1 opt="國(guó)籍" case 2 opt="民族" end select info(i,j)=inputbox("請(qǐng)輸入第" & i+1 & "個(gè)人的" & opt) next next 輸出太麻煩了, 我懶得動(dòng), 你知道那么回事就行了 這樣就不需要定義3個(gè)一維數(shù)組了. 多位數(shù)組(三維以上)的定義和使用方法與二維數(shù)組一樣, 但不太好在歐幾里德幾何空間里加以解釋, 幸好我們并不太常用那么多維的數(shù)組.定義一個(gè)三位數(shù)組:dim a(1,2,3) 一共24各數(shù)組元素. 今天因?yàn)橐峒?我喜歡Sengkang啊, 可是MM嫌交通不便, 誰(shuí)不知道她只想去逛街),而GF要去和她的同學(xué)去參加什么試驗(yàn)半夜才回家, 所以下午我只能自己去押車搬家了, 5555~~好可憐, 這次就請(qǐng)大家原諒我少寫一點(diǎn), 我可是站在圖書館外寫的啊, 現(xiàn)在腿都軟了~~~ 本來(lái)還要講"動(dòng)態(tài)數(shù)組"的, 但想了想還是放到"進(jìn)階部分"再說(shuō)吧. 要點(diǎn): 1) 一維數(shù)組是"線", 二維數(shù)組是"面", 三維數(shù)組是"體" (多維數(shù)組就亂套) 2) 數(shù)組的下標(biāo)從0開始 3) for循環(huán)在數(shù)組的應(yīng)用中起了很大作用, 二維數(shù)組需要嵌套循環(huán) 作業(yè): 上次出的"百雞問(wèn)題", 大家喜歡嗎? 以后我們就做這種需要?jiǎng)幽X的題目, 那些簡(jiǎn)單的實(shí)踐, 大家一定要多做! 1) 定義一個(gè)數(shù)組, 包含5個(gè)元素, 都是隨機(jī)整數(shù)(隨便輸入), 要求把他們按照從大到小的順序排列起來(lái) 2) 有兩個(gè)二維數(shù)組a(4,4)和b(4,4) (元素值隨便), 交換兩個(gè)數(shù)組(原來(lái)的a的所有元素值變成b的, b的所有元素值變成a的) 最后一篇: 新家不錯(cuò), MM開心, 我也就跟著高興了!今天我們學(xué)習(xí)基礎(chǔ)篇的最后一個(gè)部分:自定義函數(shù)和過(guò)程. 我們每天都在和函數(shù)打交道, i- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- VBS VBE 由淺入深 方案
鏈接地址:http://www.3dchina-expo.com/p-8819987.html