版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
VBS編程教學(xué)系統(tǒng)
第一章
最近我發(fā)覺大部分黑白的摯友都不會(huì)編程,這可不是件好事,所以這次我就寫了一個(gè)簡
潔的編程教程,講?下VBScript.主要面對菜鳥,懂得編程的摯友就不要奢侈時(shí)間了,假如
你想接觸以下VBScript也可以,但既然有編程基礎(chǔ)舉薦干脆去找一些參考書來讀,會(huì)比較
快.
什么是VBScript呢?VBScript的全稱是:MicrosoftVisualBasicScriptEditon.(微軟公司可
視化BASIC腳本版).正如其字面所透露的信息,VBS(VBScript的進(jìn)一步簡寫)是基于Visual
Basic的腳本語言.我進(jìn)一步說明一下,MicrosoftVisualBasic是微軟公司出品的一套可視化
編程工具,語法基于Basic.腳本語言,就是不編譯成二進(jìn)制文件,干脆由宿主(host)說明源
代碼并執(zhí)行,簡潔點(diǎn)說就是你寫的程序不須要編譯成.exe,而是干脆給用戶發(fā)送.vbs的源程
序,用戶就能執(zhí)行了.
我知道菜鳥現(xiàn)在最關(guān)切的就是用什么工具來開發(fā)VBS程序了,答案是:記事本(Notepad).
我不是開玩笑,其實(shí)任何一種文本編輯器都可以用來開發(fā)VBS開發(fā),只不過記事本是由系
統(tǒng)自帶的,比較好找而已.盡管如此,我還是建議你去下載一個(gè)專業(yè)的文本編輯器,因?yàn)檫@
些工具可以供應(yīng)“語法高亮”等功能,更加便利開發(fā),用哪一個(gè)隨你喜好,我比較寵愛Edit
Plus(2.10).
OK,我們先來寫一個(gè)VBScript程序熱熱身.
REM輸入并回顯你的名字
'運(yùn)用InputBox和Msgbox函數(shù)
Dimname,msg
msg二”請輸入你的名字]’
name=Inputbox(msg,"名稱")
Msgbox(name)
把上面的程序清單輸入到記事本里面,然后保存為以.vbs為擴(kuò)展名的文件(“保存類型”
里面選擇“全部文件”).然后雙擊運(yùn)行,視察運(yùn)行結(jié)果.留意:請自己輸入程序清單,不要復(fù)制
->粘貼!
我來說明一下這個(gè)程序,第一行和其次行的開頭分別是“REM“語句和“’",這兩個(gè)東西
的作用是相同的,表示本行是注釋行,就是說這兩行什么也不干,只是用來說明這段程序的
功能,版權(quán)信息等等.注釋行是程序最重要的部分之一,盡管它不是必需的,但對于其他人
閱讀源代碼,以及自己分析源代碼是很有好處的.好的習(xí)慣是在必要的地方加上清楚,簡潔
的注釋.
Dim用來聲明一個(gè)變量,在VBS中,變量類型并不是那么重要,就是說VBS會(huì)幫你自
動(dòng)識(shí)別變量類型,而且變量在運(yùn)用前不愿定要先聲明,程序會(huì)動(dòng)態(tài)支配變量空間.在VBS中
你不用考慮name儲(chǔ)存的是一個(gè)整數(shù)還是一個(gè)小數(shù)(學(xué)名叫“浮點(diǎn)數(shù))也不用考慮是不是字
符串(一串字符,比如:“Hell。World”),VBS會(huì)自動(dòng)幫你搞定.所以第三行語句可以刪除,效果
不會(huì)變,但我猛烈反對這么做,一個(gè)變顯的基本原則就是:先聲明,后運(yùn)用.變最名用字母開頭,
可以運(yùn)用下劃線,數(shù)字,但不能運(yùn)用vbs已經(jīng)定義的字,比如dim、也不能是純數(shù)字.
卜.一行被稱之為“賦值“,三”是賦值符號(hào),并不是數(shù)學(xué)中的等于號(hào),盡管看起來一樣.這是
正統(tǒng)的理解,你要理解成等于也沒有什么不行.賦值號(hào)的左邊是一個(gè)變量,右邊是要賺給變
量的值,經(jīng)過賦值以后,msg這個(gè)變量在程序中等同于"請輸入你的名字:"這個(gè)字符串,但當(dāng)
msg被再次復(fù)制的時(shí)候,原值就會(huì)消逝.不光字符串,其他任何變量都這樣被賦值,洌如:
a=2,b=12.222等等.
再往下』nputbox和Msgbox是VBS內(nèi)建的函數(shù),一個(gè)函數(shù)就相當(dāng)于一個(gè)"黑箱",有輸入
(參數(shù))和輸出(返回值),你可以不用『解函數(shù)是怎么運(yùn)作的,只要了解這個(gè)函數(shù)能干什么就
行了,我們也可以定義自己的函數(shù),不過那要等到以后再講.現(xiàn)在我們只要了解,一個(gè)函數(shù)
可以有返回值也可以沒有.可以有參數(shù)也可以沒有.例如Inputbox就是有返回值的函數(shù),我
們用賦值號(hào)左邊的變量來''接"住InputBox的返回值-就是你輸入的內(nèi)容.在inputbox右邊的
括號(hào)里是參數(shù)列表,每個(gè)參數(shù)用”,“分隔開,每個(gè)參數(shù)有不同的功效,比如第一個(gè)參數(shù)會(huì)顯示
在提示里,我們把msg這個(gè)變量作為第一個(gè)參數(shù)傳給了Inputbox函數(shù),而msg=”請輸入你的
名字:“,所以我們在對話框的提示欄就會(huì)看到"請輸入你的名字:“其次個(gè)參數(shù)是對話框的標(biāo)
題,我們用干脆量(學(xué)名叫“常量”,這里是“字符串常量”)傳遞給函數(shù),當(dāng)然你也可以傳遞變量.
Inputbox還有許多參數(shù),比如你在"名稱"后面再加一個(gè)“,”然后輸入隨意一串字符(字符串,用
雙引號(hào)””包袱起來的一串字符叫做字符串)然后運(yùn)行,看看結(jié)果.你會(huì)發(fā)覺用于輸入的文本
框有了默認(rèn)的值,這就是第三個(gè)參數(shù)的作用.
Msgbox函數(shù)是用來輸出的函數(shù),在VBS中沒有特地的輸出函數(shù)(BASIC中的print.C中
的printf),所以我們只能用對話框來視察輸出結(jié)果,Msgbox的必要參數(shù)只有一個(gè),就是要輸
出的內(nèi)容,在這種狀況下,我們不須要理睬msgbox的返回值.關(guān)于Msgbox和Inputbox我們
以后還會(huì)在探討,今日只是熱熱身,到此為止.
要點(diǎn):
1)注釋(以REM或,開頭)行在程序中不起作用,但能讓別人更簡潔讀懂你的程序.
2)變量好像一個(gè)盒子,或一個(gè)代號(hào),可以代表你想代表的東西.變量賦值運(yùn)用
3)以"”包袱起來的字符稱之為“字符串"
4)函數(shù)像一個(gè)“黑箱”,有參數(shù)和返回值,川左邊的變量可以接住返回值
5)Inputbox函數(shù)彈出一個(gè)輸入對話框,Msgbox則用「輸出
其次章
什么是常量呢,常量就是其值不行變更的量.
常量分為兩種:第一科,自然常量.這叫是因?yàn)樗鼈儾簧砭褪浅A?,你怎么更?1的值
呢?他恒久都是21,不行能變成46
假如你在程序中運(yùn)用”21=46二這樣的語句將會(huì)引發(fā)一個(gè)錯(cuò)誤.同樣的,字符串也是常
量(還記得字符串嗎?就是包袱在””之間的一串字符),“Hell。World”就是一個(gè)例子,假如你
運(yùn)用”Hell。World"="Bye”這樣的語句同樣會(huì)引發(fā)一個(gè)錯(cuò)誤.你能舉出自然常量的更多例子
嗎?
其次種,是我們自己定義的常景,這種最也運(yùn)用代號(hào),他們也被賦值,但和變量的不同點(diǎn)
在于,他們在定義的時(shí)候被賦值,以后就不能變更了,假如企圖變更將會(huì)引發(fā)一個(gè)錯(cuò)誤.定義
一個(gè)變量,我們運(yùn)用“const”這個(gè)關(guān)鍵字(關(guān)鍵字的意思是系統(tǒng)定義了有特殊功能的字,不能作
為變量名或常量名運(yùn)用),格式是:const常量名=常量值.
例如:
constPI=3.1415926
constNAME="記憶碎片”
這樣我們就定義了兩個(gè)常量,PI和NAME,一般說來,常最名全部運(yùn)用大寫,但也可以
不用,隨你喜好.將一些在程序中不須要變更的值定義為常量是個(gè)好習(xí)慣,這樣能防止不必
要的意外.另外,運(yùn)用自定義常量也可以削減你的工作量.比如:
msgbox("HelloWorld")
msgbox("HelloWorld")
msgbox("HelloWorld")
msgbox("HelloWorld")
msgbox("HelloWorld")
這個(gè)程序輸出五次Hell。World,假如你想要變更輸出為Bye-Bye,就必需修改全部程序,
當(dāng)然你可以手動(dòng)修改5次.但假如你要輸出100()次呢?常量就可?以替我們解決這個(gè)問題:
consthw="HelloWorld',
msgbox(hw)
msgbox(hw)
msgbox(hw)
msgbox(hw)
msgbox(hw)
這樣當(dāng)你要修改輸出的時(shí)候只要修改hw的值就行了.
好了,現(xiàn)在我們來看看編程的第一塊重要“基石”:變量.說明變量最好的方法我覺得是”
盒子”,一個(gè)變量好像一個(gè)盒子,里面只能裝一個(gè)東西,當(dāng)你要裝進(jìn)去別的東西的時(shí)候必需
把原有的東西拿出來.這個(gè)“盒子”是出名稱的,當(dāng)你在程序中運(yùn)用變量的時(shí)候,系統(tǒng)會(huì)打開
盒子取出里面的東西,讓這些東西參及處理,而不是盒子.有些語言是很依靠“盒子”里面裝
些什么東西,這樣才能找到合適的“盒子”(比如C語言),但VBS給我供應(yīng)的是能夠自動(dòng)伸縮
的“魔術(shù)盒",我們不用關(guān)切裝進(jìn)去的是什么東西,
VBS會(huì)自動(dòng)調(diào)整盒子的大小.例如:
Dimal,a2,a3
al=14
a2=12.23
a3="Hello"
而不用像C語言那樣麻煩,或者是VB的正規(guī)聲明(VB可以聲明也可以不用)那樣:
intal;Dimalasinteger
floata2;Dima2asDouble
char*a3;Dima3asstmig
al=14;al=14
a2=12.23;a2=12.23
a3="Hello";a3="Hello"
變量有什么用呢?哇,那用處可大了.最簡潔,你并不能確定程序運(yùn)行時(shí)變量的值,比
如前一節(jié)課我們編的輸入姓名的程序,你不能確定InputBox返回的是什么(還記得Inputbox
的返回值嗎?就是你輸入的內(nèi)容),所以你就沒有方法應(yīng)對■各種狀況,但我們用name這個(gè)”
盒子”把用戶的名字裝起來,到用的時(shí)候我們只要知道name這個(gè)盒子的名字就行了,系統(tǒng)會(huì)
自己打開他并把里面的內(nèi)容拿出來用.再舉個(gè)例子,我們編寫一個(gè)程序計(jì)算一個(gè)矩形的面積,
比如這個(gè)程序要發(fā)給小學(xué)生運(yùn)用:
dima,b,s
a=15
b=12
s=a*b
msgbox(s)
這樣就可以求出長為15,寬為12的矩形的面積了,是不是很簡潔?當(dāng)然,這個(gè)程序也
可以這樣寫:
dims
s=15*12
msgbox(s)
Dima,b,c
a=inputbox("a是:","輸入半徑")
b=Inputbox("b是:”輸入半徑”)
c=a*2+b*2
Msgbox(c)
這個(gè)輸入1、2時(shí)是6
2)
Dima,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中也是如此.
問題出在“+"上,在VBS中,+不僅僅是加號(hào)的意思還表示把兩個(gè)字符串連接起來,例如
"Hello"+"World"="HelloWorld"haveyouunderstood?你還記得InoutBox函數(shù)的返回值嗎?是
字符串!這就看出問題了吧,在編程中“1"不等于是一個(gè)字符,而1是一個(gè)數(shù),所以
a,b都是字符串變量,這就好像我們小時(shí)跟伙伴開玩笑問他們1+1=?一樣,我
們總是笑著說”錯(cuò)啦,應(yīng)當(dāng)是11”.但為什么,a可以*2卻不發(fā)生錯(cuò)誤呢?這時(shí)VBS比較智能的
一個(gè)表現(xiàn),假如這個(gè)字符串的內(nèi)容是一個(gè)數(shù)且對他進(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=I2,這時(shí)候a+b的結(jié)果(12)是一個(gè)字符串,當(dāng)它要乘以2的時(shí)
候就被強(qiáng)制轉(zhuǎn)換成了數(shù)字12,這樣我就得到了結(jié)果24.
怎么修改這個(gè)程序呢?我們須要用到另一個(gè)內(nèi)建的函數(shù):int,血函數(shù)的功能是將輸入值
轉(zhuǎn)化成整數(shù)值,我們這樣修改:
c=(int(a)+int(b))*2
這個(gè)意思就是把a(bǔ)作為參數(shù)傳遞給int函數(shù),ini函數(shù)就會(huì)返回那個(gè)整數(shù)(你的輸入值),然
后讓返回值參及運(yùn)算,這樣就得到了正確答案.所以,以后假如你用的是inputbox函數(shù)的話,最
好用int語句加工一下:比如c=int(c),c是你自己的變量
大家是不是覺得這個(gè)課程有點(diǎn)枯燥,呵呵,變量和運(yùn)算符部分的確是這樣的,不過多多
練習(xí)也就好了,這次,我們寫寫真正好玩的東西:流程限制語句.這個(gè)部分起先才是真正的
編程.
首先介紹推斷結(jié)構(gòu).
在此之前,我們先介紹一種簡潔的變量類型:布爾值(Boolean),這種變量只有兩個(gè)可能
值:True,Flase,即真或假.這種變量在某些狀況下很有用(比如"開關(guān))我們定義一個(gè)bool變
量的方法和其他變量一樣.賦值也一樣,例如:
dima.b
a=true
b=false
留意,true和“true”是不一樣的,“true”是字符串,true是布爾值,千萬不能混淆.
回到if語句上來,我們先來看看簡化版的if語句:if推斷式then語句體我們來看一
個(gè)例子:
dima,b
a=12
b=13
ifb>athenmsgbox("B大于A")
我們只看最終一行,a>b這個(gè)式子(表達(dá)式)有一個(gè)返回值,是bool型的.因?yàn)檫@個(gè)式子只
有兩種可能:b大于a,b不大于a,所以這個(gè)式子也只有兩種可能性,即真或者假.if語句推斷
這個(gè)表達(dá)式的返回值是真還是假,假如是真(true)則執(zhí)行由en后面的語句,假如是假,則不執(zhí)
行,你把a(bǔ)的值改成14看看還會(huì)不會(huì)彈出對話框?
當(dāng)我們要在推斷之后執(zhí)行多行語句怎么辦呢,我們須要用語句塊來解決,在這里可以叫
塊if
dima,b
a=12
b=13
ifa<bthen
msgbox("A小于B")
msgbox("B大于A")
endif
兩個(gè)msgbox函數(shù)夾在if和endif之間,這個(gè)部分就是語句塊,塊里的每一條語句之前
請空出4-8(一個(gè)<Tab>鍵j個(gè)格,這不是必需的,但是是一個(gè)好習(xí)慣,以便看清楚程序的結(jié)構(gòu).
這樣我們就能運(yùn)行多于一個(gè)的語句,請留意if...then...endif這三個(gè)關(guān)鍵部分不要掉了.OK,
我出一個(gè)題,輸入一個(gè)數(shù),假如小于100就輸出”錯(cuò)誤“,假如大于100就輸出“正確”,我這里
有兩個(gè)程序版本:
dima
a=inputbox("請輸入一個(gè)大于100的數(shù)”)
a=int(a),inputbox返回的是字符串,我們把他變成整數(shù):)
ifa>10()thenmsgbox("正確")
ifa<100thenmsgbox("錯(cuò)誤")
還有一個(gè)更簡潔的
dima
a=inputbox("請輸入一個(gè)大于100的數(shù)”)
a=int(a),inputbox返回的是字符串,我們把他變成整數(shù)
ifa>100then
msgbox(“正確”)
else
msgbox("錯(cuò)誤")
endif
看到多了一個(gè)else了吧,else的作用就是當(dāng)要推斷的表達(dá)式為false時(shí)執(zhí)行的.這樣程序
就可以處理兩種不同的狀況了.不要忘了用endif結(jié)尾
嘿嘿,我是變態(tài)者,現(xiàn)在我要你處理三種狀況,vl00,=100>100,還要寫在一個(gè)if結(jié)構(gòu)里,
你怎么辦,我給你答案:
dima
a=inputbox("請輸入一個(gè)大于100的數(shù)")
a=inl(a),inputbox返I可的是字符串,我們把他變成整數(shù)
ifa>100then
msgbox(“正確”)
elseifa=100then
msgbox("老大,你耍我?”)
else
msgbox("錯(cuò)誤")
endif
這次輸入100看看,是什么?elseif語句可以在if結(jié)構(gòu)中多次出現(xiàn),以靈敏推斷不同的狀
況(假如你要推斷得太多,就請運(yùn)用“選擇結(jié)構(gòu)”,過會(huì)兒就講),當(dāng)全部elseif都處理完了,而
沒有符合狀況的時(shí)候再執(zhí)行else中的語句.另一個(gè)例子:
Dima,b,c,d
a=inputbox("a是:","輸入半徑")
b=Inputbox("b是:","輸入半徑”)
d=Inpulbox("答案:“,“輸入答案”)
c=a*2+b*2,這里沒有問題,會(huì)自動(dòng)轉(zhuǎn)換
ifd=cthen
Msgbox(“你好聰慧”)
else
Msgbox(“你好豬頭自己的題還不會(huì);)
endif
再看看這個(gè),無論你回答得多么正確你都是豬頭,哈哈,不是我耍你,還是文章起先時(shí)
候的inputbox的返回類型在耍你,d是inputbox的返回值,他是一個(gè)字符串,而c是一次整數(shù)
計(jì)算的結(jié)果,他是一個(gè)整數(shù).一個(gè)字符串無論如何也不等于一個(gè)整數(shù),盡管他們字面上是一
樣的:不等于號(hào))8所以if的推斷式的值恒久是false,總是執(zhí)行else部分的語句.我們
可以這么修改
Dima,b,c,d
a=inputbox("a是:“,“輸入半徑”)
b=Inputbox("b是4,"輸入半徑”)
d=Inputbox("答案:丫輸入答案”)
d=inl(d)
'在這里我們?nèi)〕隽薲的值,變成整數(shù),在放回“d”這個(gè)盒子里
c=a*2+b*2
ifd=cthen
Msgbox("你好聰慧")
else
Msgbox(“你好豬頭自己的題還不會(huì)廣)
endif
這樣就成功了.這也是Inputbox函數(shù)的一個(gè)厭煩的地方,沒方法,vbs沒有其他好的輸入
方式了.
說到if,我們不得不說一說邏輯運(yùn)算符,今日介紹兩種,“and"和"or"學(xué)會(huì)了if語句之
后,我舉一個(gè)例子,你一看就明白了.
dima.b
a二inputbox("輸入一個(gè)數(shù)>10")
b=inpulbox("輸入另一個(gè)數(shù)>10")
a=int(a)
b=int(b)
ifa>10andb>10then
msgbox(“正確”)
else
msgbox("錯(cuò)誤")
endif
這段程序讓你輸入兩個(gè)值,必需都大于10,只要有?個(gè)不大于,就輸出錯(cuò)誤
dima,b
a=inputbox("輸入一個(gè)數(shù)>10")
b=inputbox("輸入另一個(gè)數(shù)>10")
a=int(a)
b=int(b)
ifa>10orb>10then
msgbox("正確")
else
msgbox("錯(cuò)誤")
endif
這段程序讓你輸入兩個(gè)值,只要有一個(gè)大于10.就返回成功.其實(shí)and和or很好理解,
我讀“ifa〉10orb>1()then”這一句,用華語是這樣:“假如a大于10或者b大于10,那么這
樣是不是就很好理解了呢.
當(dāng)你的程序要處理許多種不同的推斷狀況的時(shí)候elscifJhcn會(huì)讓程序看起來很雜亂,所
以就有了一種selectcase結(jié)構(gòu)特地應(yīng)付這種狀況,selectcase的語法結(jié)構(gòu)很簡潔:
selectcase變量名
case值
語句
case值
語句
caseelse
語句
endselect
我們舉個(gè)例子就能很簡潔的說明:
dima
a=inputbox("輸入一個(gè)1一3的值")
a=inl(a)'處理inpulbox返回字符串的問題
selectcasea
caseI
msgbox("壹")
case2
msgbox("貳")
case3
msgbox("叁")
caseelse
msgbox("輸入錯(cuò)誤")
endselect
這個(gè)例子把1,2,3這三個(gè)阿拉伯?dāng)?shù)字轉(zhuǎn)化成中國大寫數(shù)字,這個(gè)程序?qū)懗蒳Jelseif的形
式如下
dima
a=inputbox("請輸入1-3的值")
a=int(a)
ifa=lthen
msgbox("壹")
elseifa=2then
msgbox(“貳")
elseifa=3then
msgbox("叁")
else
msgbox("輸入錯(cuò)誤")
endif
要點(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語句的格式
4)select...case的格式
第四章
我們先來看一道題隔場進(jìn)行每日結(jié)算,要求累加出今日的營業(yè)額,每次輸入一個(gè)數(shù),這
道題其實(shí)很簡潔,但就我們現(xiàn)在學(xué)
過的學(xué)問要完成這道題相當(dāng)麻煩,我們來分析一下.首先,我們須要知道買賣的次數(shù),這樣
才能限制輸入的次數(shù),但是,這種設(shè)
計(jì)是特殊低效的,每天都要重新設(shè)計(jì)程序.假定今口進(jìn)行了5次交易,以下是源程序:
dimsum
sum=0'初始化變量
sum=sum+im(inputbox(”請輸入交易額”))
'sum=sum+x這種形式是把本身的值取出來,進(jìn)行一次運(yùn)算,再放回本身,這種方法很有用
處
'這里運(yùn)用了函數(shù)嵌套,把inputbox的返回值干脆傳給int函數(shù),轉(zhuǎn)化成整數(shù),下同
sum=sum+int(inputbox("請輸入交易額”))
sum=sum+int(inputbox(”請輸入交易額"))
sum二sum+int(inputbox(”請輸入交易額"))
sum=sum+inl(inpuibox(”請輸入交易額”))
msgbox(sum)
看到了嗎,我通過把計(jì)算過程復(fù)制了5遍才設(shè)計(jì)好了程序,這種程序在汽車交易所等交
易次數(shù)少的地方還能湊合著用,假如
放到超市豈不是要復(fù)制,粘貼幾千遍?我們今日講的內(nèi)容就可以克服這種缺陷,首先,我們
來講以下Do...Loop語句.
do...loop的結(jié)構(gòu)看上去特殊簡潔,就是:do...loop,僅此而己,這個(gè)結(jié)構(gòu)不斷執(zhí)行do和
loop之間的語句(學(xué)名叫:循環(huán)體),
永不停止.舉個(gè)例子來說:
do
msgbox(“這個(gè)信息會(huì)不斷重復(fù)出現(xiàn),要停止程序請運(yùn)用任務(wù)管理器(Qrl+Alt+Del)中止
wscript進(jìn)程”)
loop
運(yùn)行這個(gè)程序,當(dāng)你點(diǎn)銷掉一個(gè)對話框立即會(huì)出來另一個(gè),你恒久點(diǎn)不完,總有下一個(gè).
誰會(huì)運(yùn)行這樣的程序?除非是給別人搗亂(我就干過這種事),所以在do.Joop結(jié)構(gòu)中還有一
個(gè)語句:exitdo,這個(gè)語句將終止循環(huán),跳到loop后面的語句接著
執(zhí)行.據(jù)個(gè)例子來說:
dima,留意:常量不須要在dim里面聲明,否則會(huì)引發(fā)錯(cuò)誤
constpass="123456”,這是一個(gè)字符串請用"”包袱起來.設(shè)定密碼為常吊:,不行變更
do
a=inpiubox("請輸入密碼")
ifa=passthen
msgbox("密碼校驗(yàn)成功")
exitdo
endif
loop
這個(gè)程序會(huì)始終不停的問你密碼,知道你輸入了正確的密碼為止.(if可以嵌套在另一個(gè)
if當(dāng)中,也可以嵌套在循環(huán)體當(dāng)中
,所以確定要用縮進(jìn),來分清楚程序的各個(gè)部分).這個(gè)程序是很經(jīng)典的,早期的程序都是這
么做的.但是我們是Hacker,所以
我們了解系統(tǒng)的平安性,這種無限次認(rèn)證程序很簡潔被窮舉破解,我們要來限定認(rèn)證的次數(shù).
修改程序如下
dima,ctr
ctr=O'設(shè)置計(jì)數(shù)器
constpass="pas123_",上面的那個(gè)是弱密碼,這次改的強(qiáng)一點(diǎn)
do
ifctr=3then
msgbox("已經(jīng)達(dá)到認(rèn)證上限,認(rèn)證程序關(guān)閉”)
exitdo
else
a=inputbox("請輸入密碼")
ifa=passthen
msgbox("認(rèn)證成功")
msgbox("(你可以在這里加一段成功后得到的信息)”)
exitdo
else
ctr=ctr+「假如密碼出錯(cuò)就增加一次錯(cuò)誤認(rèn)證計(jì)數(shù)
msgbox("認(rèn)證出錯(cuò),請檢查密碼”)
endif
endif
loop
運(yùn)行這個(gè)程序試試看,當(dāng)你出了3此錯(cuò)誤以后,就會(huì)停止再次詢問密碼,關(guān)閉程序.
telnet認(rèn)證用來限制次數(shù)的程序及此大
同小異.要留意的是嵌套的if語句,清細(xì)致讀一下這個(gè)程序,可能比較難懂,也請你試著自
己設(shè)計(jì)一下類似的程序.
其實(shí),要在do.Joop加上驗(yàn)證的功能,并不愿定要用if,我們可以干脆利用do.我來介
紹一下while關(guān)鍵字,while可以放
在do或者是loop后面,然后再接一個(gè)表達(dá)式,當(dāng)表達(dá)式的值為true的時(shí)候(表達(dá)式成立),才
運(yùn)行循環(huán)體.我們來看一下修改后的
程序"
dima,ctr
ctr=O
constpass=,,pas123_"
dowhileclr<3
a=inpiubox("請輸入密碼")
ifa=passthen
msgbox("認(rèn)證成功")
msgbox("(你可以在這里加一段成功后得到的信息)”)
exitdo
else
ctr=ctr+「假如密碼出錯(cuò)就增加一次錯(cuò)誤認(rèn)證計(jì)數(shù)
msgbox("認(rèn)證出錯(cuò),請檢查密碼”)
endif
loop
這樣實(shí)現(xiàn)的功能和上一個(gè)例子完全一樣,我們再來看看把while放在loop后面:
dima,ctr
ctr=O
constpass="pasl23_"
do
a二inputbox("請輸入密碼")
ifa=passthen
msgbox("認(rèn)證成功")
msgbox("(你可以在這里加一段成功后得到的信息)”)
exitdo
else
ctr=ctr+「假如密碼出錯(cuò)就增加一次錯(cuò)誤認(rèn)證計(jì)數(shù)
msgbox("認(rèn)證出錯(cuò),請檢查密碼”)
endif
loopwhilectr<3
功能是一樣的,為什么要放在loop后面呢?你把ctr的值改成3就知道了,while在do
后面的程序會(huì)干脆退出,而在loop后面
還會(huì)允許一次認(rèn)證,到了loop才結(jié)束.和while相反的是until,用法和while一樣,不過他只
有當(dāng)后面的表達(dá)式的值為false(表
達(dá)式不成立)的時(shí)候才執(zhí)行循環(huán)體,請自己試驗(yàn)一下
ok,我們來看另外一種循環(huán)結(jié)構(gòu),for....next,這種循環(huán)結(jié)構(gòu)是基于計(jì)數(shù)的,也是在編程中
最常見到的循環(huán)結(jié)構(gòu).
dimi
fori=0to5
msgbox(i)
next
看到了嗎?每次輸出的i都是遞增的,但我們沒有明確指出i要遞增,當(dāng)i達(dá)到5的時(shí)候,
循環(huán)就結(jié)束了,因?yàn)橛?起先,所以
循環(huán)體執(zhí)行了6次,這一點(diǎn)很重要,大部分東西都是從0起先而不是1.這個(gè)程序也可以寫成
do的形式:
dimi
i=0
dowhilei<5
msgbox(i)
i=i+「因?yàn)閐o不能自動(dòng)計(jì)數(shù),必需手動(dòng)加
loop
怎么樣,還是for比較好用吧.for在編程中很有用途,我們再舉一個(gè)例子,順便講一下嵌
套循環(huán).
dimi.j
fori=lto9
fori=1to9
str=str&i*j&"口&是和并字符串的符號(hào)
next'每個(gè)next對應(yīng)一個(gè)for
next
看看運(yùn)行結(jié)果,是否令你會(huì)想起小學(xué)時(shí)代的數(shù)學(xué)老師(丑陋的嘴臉).要留意,這里有一
個(gè)“大”的for,和一個(gè)小的for,當(dāng)
小的for執(zhí)行完一個(gè)周期以后,大的for才執(zhí)行一次(換句話說,大的for執(zhí)行一次,小的要執(zhí)
行9次),所以一共執(zhí)行了九九八十
一次.在大的for里可以不僅僅是一個(gè)小的for,也可以加上另外的語句.我們來修改一下源
程序:
dimij
fori=1to9
fori=lto9
str=str&i*j&,1"
next'每個(gè)next對應(yīng)一個(gè)for
str=str&vbCHf"bCrlf相當(dāng)于鍵盤上的回車健,因?yàn)槟悴荒茉阪I盤上輸入,所以系統(tǒng)定義
了一個(gè)默認(rèn)的常量
next
這次運(yùn)行完成以后,輸出結(jié)果依據(jù)乘數(shù)進(jìn)行了分割,每小for運(yùn)行完一次,就換一行(通
過vbcrlf).
這次的內(nèi)容對菜鳥可能比較難懂,駕馭的方法只有一個(gè):多實(shí)踐.另外,我在論壇看到許
多人還是問:“VBScript要用什么工
具編?”我就很生氣,我在第一篇里面已經(jīng)說明:用記事本編輯源代碼,然后保存為以.vbs為擴(kuò)
展名的程序就可以了,請大家不要
再問.另外,國產(chǎn)的一種垃圾軟件“超級(jí)解新”搶占了vbs這個(gè)擴(kuò)展名,請把那個(gè)垃圾卸載掉.
要點(diǎn):
1)do..loop和exitdo的用法
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)&用于連接字符串
6)vbCrLf相當(dāng)于鍵盤上的回車鍵
第五章
今日我們來了解語言本身的最終一個(gè)論題:數(shù)組.
要理解”數(shù)組二這個(gè)概念我覺得另一種翻譯對學(xué)習(xí)又說更加簡潔廠陣列”,沒錯(cuò);數(shù)組就
是一個(gè)陣列,一個(gè)數(shù)據(jù)的陣列.最簡潔的例子是數(shù)據(jù)庫系統(tǒng),假設(shè)你要儲(chǔ)存20名學(xué)生的英語
成果,假如不是用數(shù)組,你則要?jiǎng)?chuàng)建20個(gè)不同的變顯,累死.數(shù)組就是類型相同(重要!)的一
組數(shù)據(jù)(或者n組),用來儲(chǔ)存相關(guān)的量,最簡潔的數(shù)組是一維數(shù)組,我們就先來學(xué)習(xí)它吧.
什么是一維數(shù)組呢?在3維以下,你可以利用幾何學(xué)問來理解“維”的概念,一維相當(dāng)于一
條線,二維則是一個(gè)矩形,三維是一個(gè)長方體.我知道這么講是很抽象的,我們先舉個(gè)一維
數(shù)組的例子就比較簡潔了解了.
dima(9)'從零起先
fori=0to9
a(i)=i,填充每一個(gè)數(shù)紐元素
msgbox(a⑴)'輸出數(shù)組元素
next
我們可以看到,定義一個(gè)數(shù)組的方法和定義一個(gè)變量沒有什么不同,同樣是運(yùn)用dim語
句.定義一維數(shù)組的方法如E:
dim數(shù)組名(元素?cái)?shù)量),這里大家要留意一點(diǎn),這里定義的元素?cái)?shù)量總是比你要的要少一個(gè),
因?yàn)橐粋€(gè)數(shù)組的起點(diǎn)是0號(hào)數(shù)據(jù)而不是1,所以大家確定要當(dāng)心:你須要10個(gè)數(shù)據(jù),就定義
"9,;須要100個(gè)就定義99,依此類推.數(shù)組的元素可以看成一個(gè)個(gè)獨(dú)立的變量,你可以像獨(dú)
立的變量那樣運(yùn)用他們.數(shù)組元素的量可能是亳無關(guān)系的,比如第一個(gè)數(shù)組元素儲(chǔ)存你的年
齡,其次個(gè)儲(chǔ)存今年西瓜的銷售量,但這種做法是不激勵(lì)的,甚至是不被接受的,不要這么
干,這樣的狀況請定義獨(dú)立的變量.foi?語句在數(shù)組中可算是大顯身手,還記得for嗎?它累
加一個(gè)變量,我們可■以把這個(gè)變量應(yīng)用在數(shù)組中正好用來讀取或者填充依據(jù)依次排列的數(shù)
組元素,上面就是這樣一個(gè)例子.數(shù)組其實(shí)是很簡潔的東西(再BASIC語言里面),數(shù)組難的
是怎么搗弄這些循環(huán),讓他們依據(jù)你的要求運(yùn)轉(zhuǎn).這個(gè)等到二維數(shù)組再說,我們先看看如何
手工填充數(shù)組.
假如你這個(gè)都想不到的話,那你真是白學(xué)了:
dimname(7),str,一共八個(gè)學(xué)生,str變審是用來把他們儲(chǔ)存成一個(gè)字符串以便輸出
fori=0to7
name(i)=inputbox("請輸入第"&i+1&”個(gè)學(xué)生的名字”)
str=str&""&name(i)
next
rnsgbox(str)
這樣我們就有了一個(gè)小小的數(shù)據(jù)庫,它們的數(shù)據(jù)排列可以看成這樣:
name(()),name(1),nanie(2)…name(7)
看到了吧,所以我說我們可以把它看成是”一條線“,等到我們學(xué)到了文件操作,就可以
把他們輸出到文件中去了.一維數(shù)組有許多用處,我們來看一卜.一個(gè)困難的例子.我們要儲(chǔ)
存3各學(xué)生的名字,身高,成果這三種數(shù)據(jù),由于名字是字符串,而身高可能是浮點(diǎn)數(shù)(帶小
數(shù)點(diǎn)的數(shù)),成果則可能是整數(shù),所以我們不能把他們儲(chǔ)存在?個(gè)數(shù)組里面(不要遺忘,數(shù)組
織只能存儲(chǔ)同類的數(shù)據(jù)),所以我們要建3個(gè)數(shù)組,以下是例程:
dimname(2),high(2),mark(2),定義三個(gè)數(shù)組分別儲(chǔ)存3個(gè)人的名字,身高和得分
dimctr'計(jì)數(shù)器
forctr=0to2
name(ctr)=inputbox("請輸入第"&cir+1&"個(gè)學(xué)生的姓名")
high(ctr)二inputbox("請輸入第"&ctr+1&"個(gè)學(xué)生的身高”)
mark(ctr)=inputbox("請輸入第"&ctr+1&"個(gè)學(xué)生的得分")
next
OK,我們已經(jīng)填充好了數(shù)據(jù),現(xiàn)在我們的小小數(shù)據(jù)庫只能按依次輸入,我們要讓它看
起來像點(diǎn)樣子,我們來給他設(shè)計(jì)查詢功能:
’接著上面的程序
dimcname,temp,要資詢的名字,和一個(gè)臨時(shí)變量,用來儲(chǔ)存數(shù)據(jù)的位置
cname=inputbox("請輸入你要查詢的名字:")
forc(r=0io2,遍歷全部name數(shù)組的成員,找尋要查詢的名字
ifname(ctr)=cnamethen
temp=ctr'記錄數(shù)據(jù)位置
exitfor,退出循環(huán),和exitdo的用法一樣
endif'不要忘了endif
next
msgbox("姓名:"&namc(tcmp)&'、''&"身高:"&high(tcmp)&°"&”得分門&mark(tcmp))
嘿嘿,有意思吧,其實(shí)在這個(gè)程序里面,那個(gè)lemp變量完全沒有必要,只是為了更清楚
地說明問題.因?yàn)楫?dāng)exitfor以后ctr變量的值就不會(huì)變更,儲(chǔ)存的正好是對應(yīng)數(shù)據(jù)在數(shù)組中
的位置,寫這個(gè)temp變量是為了照看到以后要學(xué)C++的摯友(C++可以在for語句里聲明新
變量,只在這個(gè)for結(jié)構(gòu)中有效,所以到了外部就不能訪問了).也就是說可以簡化成如下:
dimcname
cname:inputbox("請輸入你要查詢的名字:")
forctr=Oto2
ifname(ctr)=cnamethenexitfor,因?yàn)橹挥衑xitfor就不須要塊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ù)組是很好說明的,我們來看一下:
dima(2,2)從零起先,一共有3X3=9個(gè)數(shù)據(jù)
dimi,j,須要兩個(gè)計(jì)數(shù)器
fori=0to2
forj=0to2,運(yùn)用嵌套循環(huán)
a(ij)="X,'
next
next
我們創(chuàng)建了一個(gè)這樣的二維數(shù)組(那些“,”是我用來分割元素的,并不存在),了解二維數(shù)
組的了嗎?不清楚我們再講一下
編號(hào)012
0x,x,x
1x,x,x
2X,X,X
二維數(shù)組的看起來是不是就是一個(gè)矩形呢?(你在內(nèi)存中看不到這樣的矩形,只是便于你
理解),每個(gè)數(shù)據(jù)都有編號(hào),由兩個(gè)數(shù)來定位,這個(gè)很像(特殊像)你在國際象棋棋盤上找尋?
個(gè)格,我們用類似”C6YA2”這樣的“垂直坐標(biāo)”進(jìn)行定位,對,”垂直坐標(biāo)”,很精確.我僅要運(yùn)
用一個(gè)二維數(shù)組元素的時(shí)候可以和一般變量一樣運(yùn)用,只要指定數(shù)組元素的“定位點(diǎn)”就可
以了,例如
a(O)(l)=l,b(2)(l)="你好",諸如此類.要留意的是二維數(shù)組也只能儲(chǔ)存類型相同的元素,而
且上標(biāo)(起點(diǎn))也從0起先.計(jì)算一個(gè)二維數(shù)組的元素個(gè)數(shù)只要把兩個(gè)F標(biāo)+1(以得到實(shí)際的
值)再乘起來就可以了,特殊類似于求一個(gè)矩形的面積.
假如須要儲(chǔ)存的都是同一類型的數(shù)據(jù),我們就可以用二維數(shù)組,比如要儲(chǔ)存5個(gè)人的姓
名,國籍,民族,就可以運(yùn)用二維數(shù)據(jù)
diminfo(4,2)'一共五個(gè)人,要儲(chǔ)存的數(shù)據(jù)類型有3項(xiàng)
dimi,j
fori=0to4
forj=0to2
dimopt,定義一個(gè)變量用于存儲(chǔ)數(shù)據(jù)項(xiàng)提示
selecteasej'推斷應(yīng)當(dāng)輸入的是什么數(shù)據(jù)
case0
opt二"姓名"
caseI
opt="國籍"
ease2
opt="民族”
endselect
info(i,j尸inpulbox("請輸入第”&i+1&”個(gè)人的“&opt)
next
next
這樣就不須要定義3個(gè)一維數(shù)組了.
多位數(shù)組(三維以上)的定義和運(yùn)用方法及二維數(shù)組一樣,但不太好在歐幾里德幾何空間
里加以說明,幸好我們并不太常用那么多維的數(shù)組.定義一個(gè)三位數(shù)組:dima(l,2,3)一共24
各數(shù)組元素.
要點(diǎn):
1)一維數(shù)組是“線",二維數(shù)組是“面“,三維數(shù)組是“體“(多維數(shù)組就亂套)
2)數(shù)組的下標(biāo)從0起先
3)for循環(huán)在數(shù)組的應(yīng)用中起了很大作用,二維數(shù)組須要嵌套循環(huán)
第六章
今日我們學(xué)習(xí)基礎(chǔ)篇的最終一個(gè)部分:自定義函數(shù)和過程.我們每天都在和函數(shù)打交道,
inputbox()是函數(shù),msgbox])是函數(shù),int()也是函數(shù)…這些函數(shù)都是系統(tǒng)內(nèi)建的,我們只能用不
能改.今日,我就教大家怎樣自己制作一個(gè)函數(shù).
首先我們要了解,為什么要用函數(shù),我們用“實(shí)例”說話,先看一個(gè)例子:給出兩個(gè)數(shù),
輸出較大的那一個(gè).
dimal,a2,bl,b2,cl,c2
al=2:a2=4可以讓你把多個(gè)語句寫在一行上
bl=32:b2=67
c1=12x2=898
ifal>a2then
msgbox(al)
elseifal<a2then
msgbox(a2)
endif
ifbl>b2then
msgbox(bl)
elseifbl<b2then
msgbox(b2)
endif
ifcl>c2then
msgbox(cl)
elseifcI<c2then
msgbox(c2)
endif
多么麻煩呀,我們把相同的比較過程復(fù)制了好幾遍,早期語言沒有結(jié)構(gòu)化(沒有過程和
函數(shù))的時(shí)候,程序員們的確是這么干的,他們復(fù)制(Copy),那個(gè)年頭也沒有剪貼板這一說,
大家都是重新輸入代碼.后來工作簡化了:
dimal,a2,bl,b2,cLc2
al=2:a2=4
bl=32:b2=67
c1=12x2=898
msgbox(co(al,a2))
msgbox(co(bl,b2))
msgbox(co(c1,c2))
functionco⑴,t2),我們運(yùn)用function定義了一個(gè)新的函數(shù)
iftl>t2then
co=tl'通過”函數(shù)名二表達(dá)式”這種方法返回結(jié)果
elseift2>tlthen
co=t2
endif
endfunction
我們在這里是用了一個(gè)新的關(guān)鍵字:funciton,這個(gè)關(guān)鍵字表示一個(gè)新函數(shù)起先,格式:
funciton函數(shù)名(參數(shù)1,參數(shù)2…參數(shù)n)冽表可以是空的,但括號(hào)不能省略,參數(shù)之間
用分割
exitfunciton,結(jié)束函數(shù),不是必需的
endfunction
函數(shù)是一個(gè)模塊,只有你調(diào)用的時(shí)候才會(huì)運(yùn)行,也就說,當(dāng)你編寫了一個(gè)函數(shù),然后在
程序中并不調(diào)用它,那么這個(gè)函數(shù)
恒久不會(huì)運(yùn)行.一般來說,我們編寫程序是依據(jù):
主程序
函數(shù)1
函數(shù)2
詳細(xì)說明一下:函數(shù)中最重要的是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 稅務(wù)師事務(wù)所審計(jì)崗位面試題集
- 電氣自動(dòng)化專業(yè)高級(jí)工程師招聘面試題集
- 金融行業(yè)面試題信貸評(píng)估經(jīng)理選拔指南
- 酒店管理崗面試常見問題及答案參考
- 美容行業(yè)店長面試題庫及答案參考
- 2025年海洋旅游項(xiàng)目開發(fā)與管理可行性研究報(bào)告
- 2025年農(nóng)業(yè)科技金融服務(wù)平臺(tái)可行性研究報(bào)告
- 2025年海洋資源開發(fā)與利用研究可行性報(bào)告
- 2025年供應(yīng)鏈金融創(chuàng)新服務(wù)項(xiàng)目可行性研究報(bào)告
- 2025年區(qū)塊鏈技術(shù)在金融領(lǐng)域應(yīng)用可行性研究報(bào)告
- 哈爾濱鐵路局2012年515火災(zāi)死亡事故86課件
- 學(xué)校宿舍家具采購?fù)稑?biāo)方案技術(shù)標(biāo)
- GB 42301-2022口岸公共衛(wèi)生核心能力建設(shè)技術(shù)規(guī)范
- 第15課《誡子書》知識(shí)點(diǎn)梳理語文七年級(jí)上冊
- 萬物皆有歡喜時(shí)李漢榮散文集
- 顱頜面骨異常整形術(shù)后護(hù)理查房
- 兒童繪畫與心理治療課件
- 特種設(shè)備安全管理培訓(xùn)(培訓(xùn)材料)課件
- 流程設(shè)計(jì)與優(yōu)化培訓(xùn)課件
- 《鄉(xiāng)土中國》讀書分享讀書感悟讀后感圖文課件
- 高位截癱患者的麻醉演示文稿
評(píng)論
0/150
提交評(píng)論