版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、很好的VBS教程(帶實例) 推薦第一篇:講一下VBScript。主要面向菜鳥,懂得編程的朋友就不要浪費(fèi)時間了,如果你想接觸以下VBScript也可以。但既然有編程基礎(chǔ)推薦直接去找一些參考書來讀。會比較快。什么是 VBScript 呢? VBScript 的全稱是:Microsoft Visual Basic Script Editon.(微軟公司 可視化BASIC腳本版)。正如其字面所透露的信息,VBS(VBScript的進(jìn)一步簡寫)是基于Visual Basic的腳本語言。我進(jìn)一步解釋一下,Microsoft Visual Basic是微軟公司出品的一套可視化編程工具,語法基于Basic.腳
2、本語言,就是不編譯成二進(jìn)制文件,直接由宿主(host)解釋源代碼并執(zhí)行,簡單點(diǎn)說就是你寫的程序不需要編譯成.exe,而是直接給用戶發(fā)送.vbs的源程序,用戶就能執(zhí)行了。我知道菜鳥現(xiàn)在最關(guān)心的就是用什么工具來開發(fā)VBS程序了,答案是:記事本(Notepad).我不是開玩笑,其實任何一種文本編輯器都可以用來開發(fā)VBS開發(fā),只不過記事本是由系統(tǒng)自帶的,比較好找而已.盡管如此,我還是建議你去下載一個專業(yè)的文本編輯器,因為這 些工具可以提供"語法高亮”等功能,更加方便開發(fā),用哪一個隨你喜好,我比較喜歡EditPlus (2.10).OK,我們先來寫一個 VBScript程序熱熱身.REM輸入并
3、回顯你的名字使用InputBox和Msgbox函數(shù)Dim n ame,msgmsg="請輸入你的名字:" name= Inputbox(msg,"名稱") Msgbox (n ame)把上面的程序清單輸入到記事本里面,然后保存為以.vbs為擴(kuò)展名的文件("保存類型”里面選擇"所有文件").然后雙擊運(yùn)行,觀察運(yùn)行結(jié)果.注意:請自己輸入程序清單,不要復(fù)制-粘貼!我來解釋一下這個程序,第一行和第二行的開頭分別是"REM"語句和"",這兩個東西的作用是相同的,表示本行是注釋行,就是說這兩行什么
4、也不干,只是用來說明這段程序的功能,信息等等.注釋行是程序最重要的部分之一,盡管它不是必需的,但對于其他人閱讀 源代碼,以及自己分析源代碼是很有好處的.好的習(xí)慣是在必要的地方加上清晰,簡潔的注釋。Dim用來聲明一個變量, 在VBS中,變量類型并不是那么重要,就是說VBS會幫你自動識別變量類型,而且變量在使用前不一定要先聲明,程序會動態(tài)分配變量空間.在VBS中你不用考慮 name儲存的是一個整數(shù)還是一個小數(shù)(學(xué)名叫”浮點(diǎn)數(shù)"),也不用考慮是不是字符串(一串字符,比如:"Hello World"),VBS會自動幫你搞定.所以第三行語句可以刪除, 效果不會變,但我強(qiáng)烈反
5、對這么做,一個變量的基本原則就是:先聲明,后使用.變量名用字母開頭,可以使用下劃線,數(shù)字,但不能使用 vbs已經(jīng)定義的字,比如 dim,也不能是純數(shù)字。下一行被稱之為”賦值","="是賦值符號,并不是數(shù)學(xué)中的等于號,盡管看起來一樣是正統(tǒng)的理解,你要理解成等于也沒有什么不可賦值號的左邊是一個變量,右邊是要賦給變量的值,經(jīng)過賦值以后,msg這個變量在程序中等同于”請輸入你的名字:"這個字符串,但當(dāng)msg被再次復(fù)制的時候,原值就會消失.不光字符串,其他任何變量都這樣被賦值,例如:a=2, b=12.222 等等。再往下,Inputbox和Msgbox是VBS建
6、的函數(shù),一個函數(shù)就相當(dāng)于一個 ”黑箱”,有輸入(參 數(shù))和輸出(返回值),你可以不用了解函數(shù)是怎么運(yùn)作的,只要了解這個函數(shù)能干什么就行了,我們也可以定義自己的函數(shù),不過那要等到以后再講現(xiàn)在我們只要了解,一個函數(shù)可以有返回值也可以沒有,可以有參數(shù)也可以沒有.例如Inputbox就是有返回值的函數(shù),我們用賦值號左邊的變量來”接”住InputBox的返回值-就是你輸入的容.在inputbox右邊的括號里是 參數(shù)列表,每個參數(shù)用","分隔開,每個參數(shù)有不同的功效,比如第一個參數(shù)會顯示在提示 里,我們把msg這個變量作為第一個參數(shù)傳給了Inputbox函數(shù),而msg="請輸
7、入你的名字:",所以我們在對話框的提示欄就會看到“請輸入你的名字:”第二個參數(shù)是對話框的標(biāo)題,我們用直接量(學(xué)名叫”常量”,這里是”字符串常量”)傳遞給函數(shù),當(dāng)然你也可以傳遞變量Inputbox還有很多參數(shù),比如你在”名稱"后面再加一個","然后輸入隨便一串字符(字符串,用 雙引號""包裹起來的一串字符叫做字符串)然后運(yùn)行,看看結(jié)果你會發(fā)現(xiàn)用于輸入的文本框有了默認(rèn)的值,這就是第三個參數(shù)的作用。Msgbox函數(shù)是用來輸出的函數(shù),在VBS中沒有專門的輸出函數(shù)(BASIC中的print,C中 的printf),所以我們只能用對話框來觀察輸出
8、結(jié)果,Msgbox的必要參數(shù)只有一個,就是要輸出的容,在這種情況下,我們不需要理會msgbox的返回值.關(guān)于Msgbox和Inputbox我們以后還會在討論,今天只是熱熱身,到此為止要點(diǎn):1)注釋(以REM或'開頭)行在程序中不起作用,但能讓別人更容易讀懂你的程序2)變量好像一個盒子,或一個代號,可以代表你想代表的東西.變量賦值使用"="3)以""包裹起來的字符稱之為”字符串”4)函數(shù)像一個"黑箱”,有參數(shù)和返回值,用"="左邊的變量可以接住返回值5)Inputbox函數(shù)彈出一個輸入對話框,Msgbox則用于輸出作業(yè)
9、:1)試驗Inputbox的第三個參數(shù)2)寫一段程序輸出你的年齡3)寫一段程序進(jìn)行3次輸入,分別輸入你和你父母的(要求顯示提示),并分3次輸出。第二篇:我真沒想到,第一次的作業(yè)竟然有人不會??磥硪v的非常非常細(xì)致才行,嗯,今天講各種“量”和基本運(yùn)算。先說常量,這個比較簡單。什么是常量呢,常量就是其值不可變化的量。常量分為兩種:第一種,自然常量。這叫是因為它們本身就是常量,你怎么更改21的值呢?他永遠(yuǎn)都是21,不可能變成46。如果你在程序中使用"2仁46",這樣的語句將會引發(fā)一個錯誤。同樣的,字符串也是常 量(還記得字符串嗎?就是包裹在""之間的一串字符)
10、,"Hello World"就是一個例子,如果你 使用"Hello World"="Bye"這樣的語句同樣會引發(fā)一個錯誤。你能舉出自然常量的更多例子 嗎?第二種,是我們自己定義的常量,這種量也使用代號,他們也被賦值,但和變量的不同點(diǎn)在于,他們在定義的時候被賦值,以后就不能改變了,如果企圖改變將會引發(fā)一個錯誤。 定義一個變量,我們使用"const"這個關(guān)鍵字(關(guān)鍵字的意思是系統(tǒng)定義了有特殊功能的字,不能作為變量名或常量名使用),格式是:const常量名=常量值例如:con st Pl=3.1415926con st
11、NAME="記憶碎片”這樣我們就定義了兩個常量,PI和NAME,般說來,常量名全部使用大寫,但也可以不用,隨你喜好。將一些在程序中不需要改變的值定義為常量是個好習(xí)慣,這樣能防止不必要的意外。另外,使用自定義常量也可以減少你的工作量。比如:msgbox("Hello World") msgbox("Hello World") msgbox("Hello World") msgbox("Hello World") msgbox("Hello World")這個程序輸出五次 Hello Wo
12、rld,如果你想要改變輸出為Bye-Bye,就必須修改全部程序,當(dāng)然你可以手動修改5次,但如果你要輸出 1000次呢?常量就可以替我們解決這個問題:con st hw="Hello World"msgbox(hw) msgbox(hw) msgbox(hw) msgbox(hw) msgbox(hw)好了,現(xiàn)在我們來看看編程的第一塊重要“基石”:變量。解釋變量最好的辦法我覺得是“盒子”,一個變量好像一個盒子,里面只能裝一個東西,當(dāng)你要裝進(jìn)去別的東西的時候 必須把原有的東西拿出來。這個“盒子”是有名稱的,當(dāng)你在程序中使用變量的時候,系統(tǒng) 會打開盒子取出里面的東西,讓這些東西參
13、與處理,而不是盒子。有些語言是很依賴“盒子” 里面裝些什么東西,這樣才能找到合適的“盒子”(比如C語言),但VBS給我提供的是能夠自動伸縮的“魔術(shù)盒”,我們不用關(guān)心裝進(jìn)去的是什么東西,VBS會自動調(diào)整盒子的大小。例如:Dim a1,a2,a3a1=14a2=12.23a3="Hello"而不用像C語言那樣麻煩,或者是VB的正規(guī)聲明(VB可以聲明也可以不用)那樣:int a1; Dim al as in tegerfloat a2; Dim a2 as Doublechar* a3; Dim a3 as strniga1=14; a1=14a2=12.23; a2=12.23
14、a3="Hello" a3="Hello"嗯扯遠(yuǎn)了變量有什么用呢?哇,那用處可大了。最簡單,你并不能確定程序運(yùn)行時變量的值,比如前一節(jié)課我們編的輸入的程序,你不能確定InputBox返回的是什么(還記得Inputbox的返回值嗎?就是你輸入的容),所以你就沒有辦法應(yīng)對各種情況,但我們用name這個“盒子”把用戶的名字裝起來,至憫的時候我們只要知道name這個盒子的名字就行了,系統(tǒng)會自己打開他并把里面的容拿出來用。再舉個例子,我們編寫一個程序計算一個矩形的面積, 比如這個程序要發(fā)給小學(xué)生使用:dim a,b,sa=15b=12s=a*bmsgbox(s)這
15、樣就可以求出長為15,寬為12的矩形的面積了,是不是很簡單?當(dāng)然,這個程序也可以這樣寫:dim s s=15*12 msgbox(s)這樣看起來程序短了許多,也節(jié)約存,但并不是鼓勵的做法,為什么?請看下面。現(xiàn)在,我們的程序要變得像點(diǎn)樣子才行,誰的程序?qū)懗鰜磉€要別人修改源代碼才能用 ???所以,我們要接受用戶的輸入,還記得嗎?InputBox函數(shù)。修改后程序如下:dim a,b,sa=inputbox("請輸入矩形的長:")b=inputbox("請輸入矩形的寬:") s=a*b msgbox(s)OK,這么一修改,無論用戶輸入怎樣的數(shù)據(jù),我們都能計算出矩形
16、的面積了。如果你 用s=15*12能改嘛?當(dāng)然不行。我想你已經(jīng)發(fā)現(xiàn)了,vbs中的數(shù)學(xué)計算和真正的算術(shù)沒有什么不同,+,-,*,/,(),都是一樣的用法,比如:dim ansan s=12+32/4+(23-10)*2 msgbox(a ns)四則運(yùn)算的法則在編程中同樣生效,你可以在編程中重新獲得小學(xué)時候的樂趣(你恨數(shù)學(xué)?那就別學(xué)電腦了)。在編程中有一個有趣的運(yùn)算符是"mod",這個運(yùn)算符叫做”取余運(yùn)算符”,就是取得一次除法的余數(shù),例如:dim aa=16 mod 5你知道a等于幾嗎? Bin go!沒錯,就是1。因為16 / 5 =31,所以mod計算的結(jié)果就是1。還有一個
17、運(yùn)算符是"A"(就是鍵盤“ 6”上面的小箭頭),他表示“乘幕”(或者是“方”), 比如:dim a,b,ca=2b=aA2c=aA3msgbox(a)msgbox(c)貝U b=a*a=4 , c=a*a*a=8我們一次不要講太多,這次就講到這里,現(xiàn)在總結(jié)一下。要點(diǎn):1)常量分為自然常量和自定義常量,常量的值不可修改2)變量就像盒子,我們不在乎盒子里裝的是什么,但一定要知道盒子的名字3)四則運(yùn)算在編程中沒有任何不同4)MOD是取余運(yùn)算(使用 Inputbox) PI 取值 3.14159作業(yè):1)編一個程序,計算圓形的面積,半徑由用戶給出2)編一個程序取得20 / 3的余數(shù)
18、估計大家看累了,我來個大話西游2游戲計算器的實例吧。小黑在幫派門口擺攤賣藥,今天共賣了 56個靈異天香,每個的出售價格為 2170,那 么他賺了多少錢?(藥店出售的靈異天香價格為2160)在題目中,56和2170是變量。大家可以想想代碼怎么寫,然后再往下看。dim m, n,x,msgmsg="小黑在幫派門口擺攤賣藥,今天共賣了 n個靈異天香,每個的出售價格為 m,那么他賺了多少錢?”n=inputbox(msg,"靈異天香個數(shù)n","請在此輸入靈異天香個數(shù)n")m=inputbox(msg,"每個售價m","請在
19、此輸入每個藥的出售價格m")x=(m-2160)*nmsgbox("答案:” & x)把這段代碼復(fù)制粘貼到文本文件,然后把文本文件.txt后綴改為.vbs雙擊運(yùn)行看看效果。如果看不到.txt后綴,去我的電腦-控制面板-文件夾選項-查看-去掉“隱藏已知文件類型的擴(kuò)展 名”對勾-確定就行了。第三篇:首先,我來解決一下上次課程的幾個疑問。第一,那個余數(shù)問題,16 / 5 = 3.1,是因為我改過前面的部分,后面的忘了改了,不好 意思。第二,請看一下程序清單:1)Dim a,b,c a=inputbox("a 是:","輸入半徑")
20、b=Inputbox("b 是:",”輸入半徑”) c=a*2+b*2Msgbox(c)這個輸入1、2時是62)Dim a,b,ca=inputbox("a 是:","輸入半徑") b=Inputbox("b 是:","輸入半徑”) c=(a+b)*2 Msgbox(c) 這個輸入1、2時是24為什么會不一樣呢?在數(shù)學(xué)上c=(a+b)*2和c=a*2+b*2是等價的,在VBS中也是如此. 問題出在"+"上,在VBS中,+不僅僅是加號的意思還表示把兩個字符串連接起來,例如"He
21、llo"+"World"="HelloWorld"have you understood?你還記得 InoutBox 函數(shù)的返回值嗎?是字符串!這就看出問題了吧,在編程中"1"不等于(<>)1, "1"是一個字符,而1是一個數(shù),所以a,b都是字符串變量,"1"+"2"="12",這就好像我們小時跟伙伴開玩笑問他們1+1=?一樣,我們總是笑著說“錯啦,應(yīng)該是11”,但為什么,a可以*2卻不發(fā)生錯誤呢?這是 VBS比較智能的一個表現(xiàn),如果
22、這個字符串的容是一個數(shù)且對他進(jìn)行數(shù)學(xué)運(yùn)算,則把字符串強(qiáng)制轉(zhuǎn)換成數(shù)參與運(yùn)算,如果字符串代表一個數(shù),但不參加數(shù)學(xué)運(yùn)算,而是參加字符串運(yùn)算(合并)則當(dāng)作字符串處理,所以你看到a+b=12,這時候a+b的結(jié)果(12)是一個字符串,當(dāng)它要乘以2的時候就被強(qiáng)制轉(zhuǎn)換成了數(shù)字12,這樣我就得到了結(jié)果 24。怎么修改這個程序呢?我們需要用到另一個建的函數(shù):intint函數(shù)的功能是將輸入值轉(zhuǎn)化成整數(shù)值,我們這樣修改:c=(i nt(a)+i nt(b)*2這個意思就是把 a作為參數(shù)傳遞給int函數(shù),int函數(shù)就會返回那個整數(shù)(你的輸入值), 然后讓返回值參與運(yùn)算,這樣就得到了正確答案。所以,以后如果你用的是inp
23、utbox函數(shù)的話,最好用int語句加工一下:比如 c=int(c) 'c是你自己的變量。大家是不是覺得這個課程有點(diǎn)枯燥。呵呵,變量和運(yùn)算符部分的確是這樣的,不過多多練習(xí)也就好了。這次,我們寫寫真正好玩的東西:流程控制語句。這個部分開始才是真正的編程。首先介紹判斷結(jié)構(gòu)在此之前,我們先介紹一種簡單的變量類型:布爾值(Boolean),這種變量只有兩個可能值:True,Flase,即真或假.這種變量在某些情況下很有用(比如”開關(guān)").我們定義一個bool變量的方法和其他變量一樣,賦值也一樣,例如:dim a,ba=trueb=false注意,true和"true&quo
24、t;是不一樣的,"true"是字符串,true是布爾值,千萬不能混淆.回到if語句上來,我們先來看看簡化版的if語句:if判斷式then語句體我們來看一個例子:dim a,ba=12b=13if b>a then msgbox("B 大于 A")我們只看最后一行,a>b這個式子(表達(dá)式)有一個返回值,是bool型的.因為這個式子只 有兩種可能:b大于a, b不大于a,所以這個式子也只有兩種可能性,即真或者假.if語句判斷這個表達(dá)式的返回值是真還是假,如果是真(true)則執(zhí)行then后面的語句,如果是假,則不執(zhí)行,你把a(bǔ)的值改成14看看還會不
25、會彈出對話框?當(dāng)我們要在判斷之后執(zhí)行多行語句怎么辦呢,我們需要用語句塊來解決,在這里可以叫塊ifdim a,ba=12b=13if a<b the nmsgbox("A 小于 B") msgbox("B 大于 A") end if兩個msgbox函數(shù)夾在if和end if之間,這個部分就是語句塊,塊里的每一條語句之前 請空出4-8( 個<Tab>鍵)個格,這不是必需的,但是是一個好習(xí)慣,以便看清楚程序的結(jié)構(gòu) 這樣我們就能運(yùn)行多于一個的語句,請注意if.then.end if這三個關(guān)鍵部分不要掉了. 0K,我出一個題,輸入一個數(shù),如果小于
26、100就輸出”錯誤",如果大于100就輸出”正確",我這里 有兩個程序版本:dim aa=inputbox("請輸入一個大于100的數(shù)")a=int(a)'inputbox返回的是字符串,我們把他變成整數(shù):)if a>100 then msgbox("正確")if a<100 then msgbox("錯誤") 還有一個更簡單的dim aa=inputbox("請輸入一個大于100的數(shù)")a=int(a) 'inputbox返回的是字符串,我們把他變成整數(shù) if a&
27、gt;100 then msgbox("正確")elsemsgbox("錯誤”)end if看到多了一個else了吧,else的作用就是當(dāng)要判斷的表達(dá)式為false時執(zhí)行的這樣程序就可以處理兩種不同的情況了不要忘了用end if結(jié)尾嘿嘿,我是變態(tài)者,現(xiàn)在我要你處理三種情況,<100,=100,>100,還要寫在一個if結(jié)構(gòu)里, 你怎么辦,我給你答案:dim aa=inputbox("請輸入一個大于 100的數(shù)")a=int(a) 'inputbox返回的是字符串,我們把他變成整數(shù) if a>100 thenmsgbox
28、("正確")elseif a=100 thenmsgbox("老大,你耍我?")elsemsgbox("錯誤")end if這次輸入100看看,是什么? else if語句可以在if結(jié)構(gòu)中多次出現(xiàn),以靈活判斷不同的情 況(如果你要判斷得太多,就請使用”選擇結(jié)構(gòu)",過會兒就講),當(dāng)所有elseif都處理完了,而 沒有符合情況的時候再執(zhí)行else中的語句另一個例子:Dim a,b,c,da=inputbox("a 是:","輸入半徑") b=Inputbox("b 是:"
29、;,"輸入半徑") d=Inputbox("答案:","輸入答案") c=a*2+b*2 '這里沒有問題,會自動轉(zhuǎn)換 if d=c the nMsgbox("你好聰明")elseMsgbox("你好豬頭自己的題還不會r?end if再看看這個,無論你回答得多么正確你都是豬頭,哈哈,不是我耍你,還是文章開始時候的inputbox的返回類型在耍你,d是inputbox的返回值,他是一個字符串,而c是一次整數(shù) 計算的結(jié)果,他是一個整數(shù) 一個字符串無論如何也不等于一個整數(shù),盡管他們字面上是一樣的:&quo
30、t;8"<>(不等于號)8所以if的判斷式的值永遠(yuǎn)是false,總是執(zhí)行else部分的語句我們可以這么修改Dim a,b,c,da=inputbox("a 是:","輸入半徑") b=Inputbox("b 是:","輸入半徑") d=Inputbox("答案:","輸入答案") d=i nt(d)'在這里我們?nèi)〕隽薲的值,變成整數(shù),在放回"d"這個盒子里c=a*2+b*2if d=c the nMsgbox("你好
31、聰明")elseMsgbox("你好豬頭自己的題還不會r?end if這樣就成功了 這也是Inputbox函數(shù)的一個討厭的地方,沒辦法,vbs沒有其他好的輸入 方式了。說到if,我們不得不說一說邏輯運(yùn)算符,今天介紹兩種,"and"和"or"學(xué)會了 if語句之后,我舉一個例子,你一看就明白了 .dim a,ba=inputbox("輸入一個數(shù) >10")b=inputbox("輸入另一個數(shù)>10")a=i nt(a)b=i nt(b)if a>10 and b>10 the
32、nmsgbox("正確")elsemsgbox("錯誤")end if這段程序讓你輸入兩個值,必須都大于10,只要有一個不大于,就輸出錯誤dim a,ba=inputbox("輸入一個數(shù) >10")b=inputbox("輸入另一個數(shù)>10")a=i nt(a)b=i nt(b)if a>10 or b>10 thenmsgbox("正確")elsemsgbox("錯誤")end if這段程序讓你輸入兩個值,只要有一個大于10,就返回成功.其實and和
33、or很好理解, 我讀"if a>10 or b>10 then"這一句,用華語是這樣:"如果a大于10或者b大于10,那么.".這 樣是不是就很好理解了呢.OK,我們再來看一種新結(jié)構(gòu),今天的課就結(jié)束,已經(jīng)午夜了,我都累死了 .當(dāng)你的程序要處理很多種不同的判斷情況的時候elseif.then會讓程序看起來很雜亂,所以就有了一種select case結(jié)構(gòu)專門對付這種情況,select case的語法結(jié)構(gòu)很簡單:select case 變量名case 值 語句 case 值語句case else語句end select我們舉個例子就能很簡單的說明:
34、dim aa=inputbox("輸入一個 1-3 的值")a=int(a)'處理inputbox返回字符串的問題select case acase 1msgbox("壹")case 2msgbox("貳")case 3msgbox("叁")case elsemsgbox("輸入錯誤")end select這個例子把1,2,3這三個阿拉伯?dāng)?shù)字轉(zhuǎn)化成中國大寫數(shù)字,這個程序?qū)懗蒳f.elseif的形式如下dim aa=inputbox("請輸入 1-3 的值")a=i n
35、t(a)if a=1 the nmsgbox("壹")elseif a=2 the nmsgbox("貳")elseif a=3 the nmsgbox("叁")elsemsgbox("輸入錯誤")end if怎么樣,麻煩吧,還是select好吧.OK,今天到此結(jié)束,總結(jié)一下:要點(diǎn):1)inputbox返回的是一個字符串,而不是一個數(shù),必須用a=int(a)這種形式轉(zhuǎn)化成數(shù)2)bool變量的值只有兩種:true,false2.5)and兩邊的表達(dá)式都是true,則返回true. or兩邊的表達(dá)式有一個是true,就
36、返回true3)if語句的格式4)select.case 的格式作業(yè):1)使用3個bool值,儲存你的3兄弟姐妹是否是男性(提示:sister1male=false)2)給定一個個數(shù),大于10而且小于20輸出"正確",否則輸出”錯誤”3)輸入12,或者15,輸出"正確",否則輸出”錯誤”4)把5以的正整數(shù)都轉(zhuǎn)換成中國大些數(shù)字5)自己隨便設(shè)計一個程序,應(yīng)用今天的知識第四篇:循環(huán)結(jié)構(gòu)我們先來看一道題:商場進(jìn)行每日結(jié)算,要求累加出今天的營業(yè)額 ,每次輸入一個數(shù),這道題其實很簡單,但就我們現(xiàn)在學(xué)過的知識要完成這道題相當(dāng)麻煩,我們來分析一下首先,我們需要知道買賣的
37、次數(shù),這樣才能控制輸入的次數(shù),但是,這種設(shè)計是非常低效的,每 天都要重新設(shè)計程序假定今天進(jìn)行了 5次交易,以下是源程序:dim sumsum=O '初始化變量sum=sum + int(inputbox("請輸入交易額")'sum=sum+x 這種形式是把本身的值取出來,進(jìn)行一次運(yùn)算,再放回本身,這種方法很有用處'這里使用了函數(shù)嵌套,把inputbox的返回值直接傳給int函數(shù),轉(zhuǎn)化成整數(shù),下同 sum=sum + int(inputbox("請輸入交易額") sum=sum + int(inputbox("請輸入交易額
38、") sum=sum + int(inputbox("請輸入交易額") sum=sum + int(inputbox("請輸入交易額")msgbox(sum)看到了嗎,我通過把計算過程復(fù)制了5遍才設(shè)計好了程序,這種程序在汽車交易所等交易次數(shù)少的地方還能湊合著用,如果放到超市豈不是要復(fù)制,粘貼幾千遍?我們今天講的容就可以克服這種缺陷,首先,我們來講以下Do.Loop語句.do.loop的結(jié)構(gòu)看上去非常簡單,就是:do.loop,僅此而已,這個結(jié)構(gòu)不斷執(zhí)行do和loop之間的語句(學(xué)名叫:循環(huán)體), 永不停止.舉個例子來說:domsgbox(&qu
39、ot;這個信息會不斷重復(fù)出現(xiàn),要停止程序請使用任務(wù)管理器(Ctrl+Alt+Del)中止wscript 進(jìn)程")loop運(yùn)行這個程序,當(dāng)你點(diǎn)銷掉一個對話框馬上會出來另一個,你永遠(yuǎn)點(diǎn)不完,總有下一個.誰會運(yùn)行這樣的程序?除非是給別人搗亂(我就干過這種事),所以在do.loop結(jié)構(gòu)中還有一 個語句:exit do,這個語句將終止循環(huán),跳到loop后面的語句繼續(xù) 執(zhí)行.據(jù)個例子來說:dim a '注意:常量不需要在dim里面聲明,否則會引發(fā)錯誤con st pass="123456"'這是一個字符串請用""包裹起來.設(shè)定密碼為常量,不
40、可變更doa=inputbox("請輸入密碼")if a=pass the nmsgbox("密碼校驗成功")exit doend ifloop這個程序會一直不停的問你密碼,知道你輸入了正確的密碼為止.(if可以嵌套在另一個if當(dāng)中,也可以嵌套在循環(huán)體當(dāng)中,所以一定要用縮進(jìn),來分清楚程序的各個部分).這個程 序是很經(jīng)典的,早期的程序都是這么做的但是我們是Hacker,所以我們了解系統(tǒng)的安全性,這種無限次認(rèn)證程序很容易被窮舉破解,我們要來限定認(rèn)證的次數(shù)修改程序如下dim a,ctrctr=0 '設(shè)置計數(shù)器con st pass="pas1
41、23_"'上面的那個是弱密碼,這次改的強(qiáng)一點(diǎn)doif ctr=3 the nmsgbox("已經(jīng)達(dá)到認(rèn)證上限,認(rèn)證程序關(guān)閉”)exit doelsea=inputbox("請輸入密碼")if a=pass the nmsgbox("認(rèn)證成功")msgbox("(你可以在這里加一段成功后得到的信息)")exit doelsectr=ctr+1 '如果密碼出錯就增加一次錯誤認(rèn)證計數(shù)msgbox("認(rèn)證出錯,請檢查密碼")end ifend ifloop運(yùn)行這個程序試試看,當(dāng)你出了 3
42、此錯誤以后,就會停止再次詢問密碼 ,關(guān)閉程序 telnet認(rèn)證用來限制次數(shù)的程序與此小異 要注意的是嵌套的if語句,清仔細(xì)讀一下這個程 序,可能比較難懂,也請你試著自己設(shè)計一下類似的程序.其實,要在do.loop加上驗證的功能,并不一定要用if,我們可以直接利用 do.我來介 紹一下while關(guān)鍵字,while可以放在do或者是loop后面,然后再接一個表達(dá)式,當(dāng)表達(dá)式的 值為true的時候(表達(dá)式成立),才運(yùn)行循環(huán)體.我們來看一下修改后的程序”dim a,ctrctr=0const pass="pas123_"do while ctr<3a=inputbox(&qu
43、ot;請輸入密碼")if a=pass the nmsgbox("認(rèn)證成功")msgbox("(你可以在這里加一段成功后得到的信息)")exit doelsectr=ctr+1 '如果密碼出錯就增加一次錯誤認(rèn)證計數(shù)msgbox("認(rèn)證出錯,請檢查密碼")end ifloop dim a,ctrctr=0const pass="pas123_"doa=inputbox("請輸入密碼") if a=pass the n msgbox("認(rèn)證成功")msgbox(
44、"(你可以在這里加一段成功后得到的信息)")exit doelsectr=ctr+1 '如果密碼出錯就增加一次錯誤認(rèn)證計數(shù)msgbox("認(rèn)證出錯,請檢查密碼")end ifloop while ctr<3功能是一樣的,為什么要放在loop后面呢?你把ctr的值改成3就知道了,while在do 后面的程序會直接退出,而在loop后面還會允許一次認(rèn)證,到了 loop才結(jié)束.和while相反的 是until,用法和while 一樣,不過他只有當(dāng)后面的表達(dá)式的值為false(表達(dá)式不成立)的時候才執(zhí)行循環(huán)體,請自己試驗一下ok,我們來看另外一種循
45、環(huán)結(jié)構(gòu),for.next,這種循環(huán)結(jié)構(gòu)是基于計數(shù)的,也是在編程中最常見到的循環(huán)結(jié)構(gòu).dim ifor i=0 to 5msgbox(i)n ext看到了嗎?每次輸出的i都是遞增的,但我們沒有明確指出i要遞增,當(dāng)i達(dá)到5的時候, 循環(huán)就結(jié)束了,因為由0開始,所以循環(huán)體執(zhí)行了 6次,這一點(diǎn)很重要,大部分東西都是從 0 開始而不是1.這個程序也可以寫成do的形式:dim ii=0do while i<5msgbox(i)i=i+1 '因為do不能自動計數(shù),必須手動加loop怎么樣,還是for比較好用吧.for在編程中很有用途,我們再舉一個例子,順便講一下嵌 套循環(huán).dim i,jfor
46、 i=1 to 9for i=1 to 9str=str & i * j & " " '& 是和并字符串的符號 next '每個next對應(yīng)一個for n ext看看運(yùn)行結(jié)果,是否令你會想起小學(xué)時代的數(shù)學(xué)老師(丑陋的嘴臉).要注意,這里有一個"大"的for,和一個小的for,當(dāng)小的for執(zhí)行完一個周期以后,大的for才執(zhí)行一次(換句話 說,大的for執(zhí)行一次,小的要執(zhí)行9次),所以一共執(zhí)行了九九八十 一次.在大的for里可以不僅僅是一個小的for,也可以加上另外的語句.我們來修改一下源程序:dim i,jfor i
47、=1 to 9for i=1 to 9str=str & i * j & ” ” next '每個next對應(yīng)一個forstr=str & vbCrlf 'vbCrlf相當(dāng)于鍵盤上的回車鍵,因為你不能在鍵盤上輸入,所以系統(tǒng)定義了一個默認(rèn)的常量n ext這次運(yùn)行完成以后,輸出結(jié)果按照乘數(shù)進(jìn)行了分割,每小for運(yùn)行完一次,就換一行(通過 vbcrlf).這次的容對菜鳥可能比較難懂 ,掌握的辦法只有一個:多實踐.另外,我在論壇看到很多 人還是問:"VBScript要用什么工具編?"我就很氣憤,我在第一篇里面已經(jīng)說明:用記事本編輯 源代碼,然
48、后保存為以.vbs為擴(kuò)展名的程序就可以了 ,請大家不要再問另外,國產(chǎn)的一種 垃圾軟件"超級X霸"搶占了 vbs這個擴(kuò)展名,請把那個垃圾卸載掉我們總結(jié)一下: 要點(diǎn):1)do.loop 和 exit do 的用法2)while當(dāng)表達(dá)式true的時候執(zhí)行循環(huán)體,until反之3)for.next是計數(shù)循環(huán),每次執(zhí)行計數(shù)器遞加4)嵌套循環(huán)的作用和寫法4.5)&用于連接字符串5)vbCrLf相當(dāng)于鍵盤上的回車鍵作業(yè):1)在我國的數(shù)學(xué)經(jīng)典著作”九章算術(shù)"中有這樣一道題:百錢買百雞,公雞5錢一只,母雞3錢 一只,小雞1錢2只(這個數(shù)據(jù)我是參考一本編程書的,但我記得是公3
49、,母1,小1錢3只?不管了,就按照書上得來吧)求得是能有多少種辦法買這些雞.如果看不懂的話我用大白話說 說:有人要去買雞,用100塊錢正好買了100只雞,價格如下:公 :5$,母:3$,小:1$ for 2,讓你求一共多少種賣法(公母小怎么搭配).請用循環(huán)解決這個問題。PS:今天文章寫的很倉促,大部分代碼都沒有實驗,請大家自己檢驗。另外,上次的作業(yè) 我不說答案了。不知道大家喜歡做這種題,還是以前那種比較簡單的?第五篇:今天我們來了解語言本身的最后一個論題:數(shù)組要理解”數(shù)組",這個概念我覺得另一種翻譯對學(xué)習(xí)來說更加容易:"陣列",沒錯,數(shù)組就是一個陣列,一個數(shù)據(jù)的陣
50、列最簡單的例子是數(shù)據(jù)庫系統(tǒng),假設(shè)你要儲存20名學(xué)生的英語 成績,如果不是用數(shù)組,你則要創(chuàng)建20個不同的變量,累死.數(shù)組就是類型相同(重要!)的一 組數(shù)據(jù)(或者n組),用來儲存相關(guān)的量,最簡單的數(shù)組是一維數(shù)組,我們就先來學(xué)習(xí)它吧什么是一維數(shù)組呢?在3維以下,你可以利用幾何知識來理解 "維"的概念,一維相當(dāng)于一 條線,二維則是一個矩形,三維是一個長方體我知道這么講是很抽象的,我們先舉個一維 數(shù)組的例子就比較容易了解了 dim a(9)'從零開始for i=0 to 9a(i)=i '填充每一個數(shù)組元素msgbox(a(i)'輸出數(shù)組元素n ext我們可以
51、看到,定義一個數(shù)組的方法和定義一個變量沒有什么不同,同樣是使用dim語句.定義一維數(shù)組的方法如下:dim數(shù)組名(元素數(shù)量),這里大家要注意一點(diǎn),這里定義的元素數(shù)量總是比你要的要少一個,因為一個數(shù)組的起點(diǎn)是0號數(shù)據(jù)而不是1,所以大家一定要小心:你需要10個數(shù)據(jù),就定義"9",需要100個就定義99,依此類推數(shù)組的元素可以看成一個個獨(dú)立的變量,你可以像獨(dú)立的變量那樣使用他們數(shù)組元素的量可能是毫無關(guān)系的,比如第一個數(shù)組元素儲存你的年 齡,第二個儲存今年西瓜的銷售量,但這種做法是不鼓勵的,甚至是不被接受的,不要這么干,這樣的情況請定義獨(dú)立的變量.for語句在數(shù)組中可算是大顯身手,還
52、記得for嗎?它累加一個變量,我們可以把這個變量應(yīng)用在數(shù)組中正好用來讀取或者填充按照順序排列的數(shù) 組元素,上面就是這樣一個例子數(shù)組其實是很簡單的東西(再BASIC語言里面),數(shù)組難的是怎么搗弄這些循環(huán),讓他們按照你的要求運(yùn)轉(zhuǎn)這個等到二維數(shù)組再說,我們先看看如何 手工填充數(shù)組如果你這個都想不到的話,那你真是白學(xué)了 :dim name(7),str ' 共八個學(xué)生,str變量是用來把他們儲存成一個字符串以便輸出for i=0 to 7name(i)=inputbox("請輸入第"& i+1 & "個學(xué)生的名字")str=str &am
53、p; "" & name(i)n extmsgbox(str)這樣我們就有了一個小小的數(shù)據(jù)庫,它們的數(shù)據(jù)排列可以看成這樣:name(0),name(1),name(2).n ame(7)看到了吧,所以我說我們可以把它看成是"一條線",等到我們學(xué)到了文件操作,就可以把他們輸出到文件中去了.一維數(shù)組有很多用處,我們來看一下一個復(fù)雜的例子.我們要儲存3各學(xué)生的名字,身高,成績這三種數(shù)據(jù),由于名字是字符串,而身高可能是浮點(diǎn)數(shù)(帶小 數(shù)點(diǎn)的數(shù)),成績則可能是整數(shù),所以我們不能把他們儲存在一個數(shù)組里面(不要忘記,數(shù)組織只能存儲同類的數(shù)據(jù)),所以我們要建3個數(shù)
54、組,以下是例程:dim name(2), high(2), mark(2)'定義三個數(shù)組分別儲存3個人的名字,身高和得分dim ctr '計數(shù)器 for ctr=0 to 2name(ctr)=inputbox("請輸入第"& ctr+1 & "個學(xué)生的") high(ctr)=inputbox("請輸入第"& ctr+1 & "個學(xué)生的身高") mark(ctr)=inputbox("請輸入第 ” & ctr+1 & ” 個學(xué)生的得分”)
55、n extOK,我們已經(jīng)填充好了數(shù)據(jù),現(xiàn)在我們的小小數(shù)據(jù)庫只能按順序輸入,我們要讓它看起來像點(diǎn)樣子,我們來給他設(shè)計查詢功能:'接著上面的程序dim cname, temp '要查詢的名字,和一個臨時變量,用來儲存數(shù)據(jù)的位置 cname=inputbox("請輸入你要查詢的名字:")for ctr=0 to 2 '遍歷所有name數(shù)組的成員,尋找要查詢的名字if n ame(ctr)=c name the n temp=ctr '記錄數(shù)據(jù)位置 exit for '退出循環(huán),和exit do的用法一樣 end if '不要忘了 e
56、nd ifn extmsgbox(":" & name(temp) & ” ” & ” 身高:"& high(temp) & ” ” & ” 得分:"& mark(temp)嘿嘿,有意思吧,其實在這個程序里面,那個temp變量完全沒有必要,只是為了更清楚 地說明問題因為當(dāng)exit for以后ctr變量的值就不會改變,儲存的正好是對應(yīng)數(shù)據(jù)在數(shù)組中 的位置,寫這個temp變量是為了照顧到以后要學(xué)C+的朋友(C+可以在for語句里聲明新變量,只在這個for結(jié)構(gòu)中有效,所以到了外部就不能訪問了).也就是說可
57、以簡化成如下:dim cn amecname=inputbox("請輸入你要查詢的名字:")for ctr=0 to 2if name(ctr)=cname then exit for '因為只有 exit for 就不需要塊 if 了n extmsgbox(":" & name(ctr) & "" & " 身高:"& high(ctr) & "" & " 得分:"& mark(ctr)這是最直接的路子好好重讀一
58、下上面所有的源代碼,然后自己寫幾個程序,完全搞清楚一維數(shù)組及其應(yīng)用以后再看后面的二位數(shù)組二維數(shù)組好像是一個一維數(shù)組的集合,就好像"線積成面"一樣,由n各一維數(shù)組組成二維數(shù)組,這是初學(xué)者比較好理解的辦法(比較精確的是用"編號”的概念去理解,因為4維以上的數(shù)組就比較難以用歐幾里德幾何概念去解釋 了).二維數(shù)組是很好解釋的,我們來看一下: dim a(2,2)'從零開始,一共有3 X 3 = 9個數(shù)據(jù) dim i,j '需要兩個計數(shù)器for i=0 to 2for j=0 to 2 '使用嵌套循環(huán) a(i,j)="X" n e
59、xtn ext我們創(chuàng)建了一個這樣的二維數(shù)組(那些","是我用來分割元素的,并不存在),了解二維數(shù) 組的了嗎?不清楚我們再講一下編號0 1 20 x,x,x1 x,x,x2 x,x,x二維數(shù)組的看起來是不是就是一個矩形呢?(你在存中看不到這樣的矩形,只是便于你理解),每個數(shù)據(jù)都有編號,由兩個數(shù)來定位,這個很像(非常像)你在國際象棋棋盤上尋找一個 格,我們用類似"C6","A2"這樣的"垂直坐標(biāo)”進(jìn)行定位,對,"垂直坐標(biāo)",很確切.我們要使用 一個二維數(shù)組元素的時候可以和普通變量一樣使用,只要指定數(shù)組元素的&
60、quot;定位點(diǎn)"就可以了,例如a(0)(1)=1, b(2)(1)="你好",諸如此類.要注意的是二維數(shù)組也只能儲存類型相同的元素,而且上標(biāo)(起點(diǎn))也從0開始計算一個二維數(shù)組的元素個數(shù)只要把兩個下標(biāo)+1(以得到實際的值)再乘起來就可以了 ,非常類似于求一個矩形的面積假如需要儲存的都是同一類型的數(shù)據(jù),我們就可以用二維數(shù)組,比如要儲存 5個人的,國籍,民族,就可以使用二維數(shù)據(jù)dim info(4,2)' 一共五個人,要儲存的數(shù)據(jù)類型有 3項dim i,jfor i=0 to 4for j=0 to 2dim opt '定義一個變量用于存儲數(shù)據(jù)項提示
61、select case j判斷應(yīng)該輸入的是什么數(shù)據(jù) case 0opt=""case 1 opt="國籍” case 2 opt="民族” end select info(i,j)=inputbox("請輸入第"& i+1 & "個人的"& opt) n ext n ext'輸出太麻煩了,我懶得動,你知道那么回事就行了這樣就不需要定義3個一維數(shù)組了 .多位數(shù)組(三維以上)的定義和使用方法與二維數(shù)組一樣,但不太好在歐幾里德幾何空間里加以解釋,幸好我們并不太常用那么多維的數(shù)組定義一個三位
62、數(shù)組:dim a(1,2,3)'一共24各數(shù)組元素.今天因為要搬家(我喜歡Sengkang啊,可是MM嫌交通不便,誰不知道她只想去逛街), 而GF要去和她的同學(xué)去參加什么試驗半夜才回家,所以下午我只能自己去押車搬家了,5555好可憐,這次就請大家原諒我少寫一點(diǎn),我可是站在圖書館外寫的啊,現(xiàn)在腿都軟了 本來還要講”動態(tài)數(shù)組”的,但想了想還是放到”進(jìn)階部分”再說吧 要點(diǎn):1)一維數(shù)組是”線",二維數(shù)組是”面",三維數(shù)組是”體"(多維數(shù)組就亂套)2)數(shù)組的下標(biāo)從0開始3) for循環(huán)在數(shù)組的應(yīng)用中起了很大作用,二維數(shù)組需要嵌套循環(huán) 作業(yè):上次出的”百雞問題",大家喜歡嗎?以后我們就做這種需要動腦的題目,那些簡單的實踐,大家一定要多做!1) 定義一個數(shù)組,包含5個元素,都是隨機(jī)整數(shù)(隨便輸入),要求把他們按照從大到小的順 序排列起來2) 有兩個二維數(shù)組a(4,4)和b(4,4)(元素值隨便),交換兩個數(shù)組(原來的a的所有元素值變成b的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版國際金融風(fēng)險管理合同范本3篇
- 二零二五版建筑工地勞務(wù)用工及社會保障服務(wù)合同范本3篇
- 二零二五年酒店客房協(xié)議價優(yōu)惠合作合同3篇
- 2024政府采購合同環(huán)境與安全監(jiān)督協(xié)議3篇
- 2025年新型城鎮(zhèn)化項目水電設(shè)施安裝施工合同3篇
- 二零二五版板房租賃與租賃期滿資產(chǎn)評估與轉(zhuǎn)讓合同3篇
- 二零二五年度出租車司機(jī)服務(wù)規(guī)范與客戶滿意度提升合同3篇
- 二零二五年透水混凝土工程驗收與評估合同2篇
- 二零二五年智能交通管理系統(tǒng)采購合同3篇
- 二零二五版房屋代理租賃資產(chǎn)評估合同3篇
- 蓋洛普Q12解讀和實施完整版
- 2023年Web前端技術(shù)試題
- GB/T 20840.8-2007互感器第8部分:電子式電流互感器
- GB/T 14864-2013實心聚乙烯絕緣柔軟射頻電纜
- 品牌策劃與推廣-項目5-品牌推廣課件
- 信息學(xué)奧賽-計算機(jī)基礎(chǔ)知識(完整版)資料
- 發(fā)煙硫酸(CAS:8014-95-7)理化性質(zhì)及危險特性表
- 數(shù)字信號處理(課件)
- 公路自然災(zāi)害防治對策課件
- 耳鳴中醫(yī)臨床路徑
- 安徽身份證號碼前6位
評論
0/150
提交評論