溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

VBS基礎(chǔ)知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2021-10-12 09:57:18 來源:億速云 閱讀:116 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)VBS基礎(chǔ)知識(shí)點(diǎn)有哪些的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

VBScript(Microsoft Visual Basic Script Editon).,微軟公司可視化BASIC腳本版). 正如其字面所透露的信息, VBS(VBScript的進(jìn)一步簡寫)是基于Visual Basic的腳本語言. Microsoft Visual Basic是微軟公司出品的一套可視化編程工具, 語法基于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)檫@些工具可以提供 "語法高亮"等功能, 更加方便開發(fā), 用哪一個(gè)隨你喜好, 我比較喜歡Edit Plus ScriptCryptor也不錯(cuò) OK, 我們先來寫一個(gè)VBScript程序熱熱身。

REM 輸入并回顯你的名字 
'使用InputBox和Msgbox函數(shù) 
'(上面及本行可以不必寫入源代碼中,下面才是運(yùn)行的代碼) 
Dim name,msg 
msg="請輸入你的名字:" 
name=Inputbox(msg) 
Msgbox name

  把上面的程序清單輸入到記事本里面, 然后保存為以.vbs為擴(kuò)展名的文件(如果在文件名上沒有“.***”,就打開控制面板-文件夾選項(xiàng)-查看-取消隱藏已知文件類型的擴(kuò)展名).然后雙擊, 觀察運(yùn)行結(jié)果。

  注意:為了使你學(xué)得更好,推薦自己輸入程序清單, 盡量不要復(fù)制->粘貼

  我來解釋一下這個(gè)程序, 第一行和第二行的開頭分別是"REM"語句和" ' ", 這兩個(gè)東西的作用是相同的, 表示之后的文字是注釋, 就是說符號(hào)后的什么也不干,只是用來說明這段程序的功能, 版權(quán)信息等等. 注釋行是程序最重要的部分之一, 盡管它不是必需的, 但對(duì)于其他人閱讀源代碼, 以及自己分析源代碼是很有好處的. 好的習(xí)慣是在必要的地方加上清晰, 簡潔的注釋。

  Dim用來聲明一個(gè)變量, 在VBS中, 變量類型并不是那么重要, 就是說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)幫你搞定. 所以第三行語句可以刪除, 效果不會(huì)變, 但我強(qiáng)烈反對(duì)這么做, 一個(gè)變量的基本原則就是:先聲明,后使用.變量名用字母開頭,可以使用下劃線,數(shù)字, 但不能使用vbs已經(jīng)定義的字, 比如dim, 也不能是純數(shù)字。

  下一行被稱之為"賦值", "="是賦值符號(hào), 并不是數(shù)學(xué)中的等于號(hào), 盡管看起來一樣.這是正統(tǒng)的理解, 你要理解成等于也沒有什么不可. 賦值號(hào)的左邊是一個(gè)變量, 右邊是要賦給變量的值, 經(jīng)過賦值以后, msg這個(gè)變量在程序中等同于"請輸入你的名字:"這個(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ù), 不過那要等到以后再講. 現(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="請輸入你的名字:", 所以我們在對(duì)話框的提示欄就會(huì)看到"請輸入你的名字:" 第二個(gè)參數(shù)是對(duì)話框的標(biāo)題, 我們用直接量(學(xué)名叫"常量", 這里是"字符串常量")傳遞給函數(shù), 當(dāng)然你也可以傳遞變量. Inputbox還有很多參數(shù), 比如你在"名稱"后面再加一個(gè)","然后輸入隨便一串字符(字符串,用雙引號(hào)""包裹起來的一串字符叫做字符串)然后運(yùn)行, 看看結(jié)果. 你會(huì)發(fā)現(xiàn)用于輸入的文本框有了默認(rèn)的值, 這就是第三個(gè)參數(shù)的作用。

  Msgbox函數(shù)是用來輸出的函數(shù), 在VBS中沒有專門的輸出函數(shù)(BASIC中的print,C中的printf), 所以我們只能用對(duì)話框來觀察輸出結(jié)果, Msgbox的必要參數(shù)只有一個(gè), 就是要輸出的內(nèi)容, 在這種情況下, 我們不需要理會(huì)msgbox的返回值. 關(guān)于Msgbox和Inputbox我們以后還會(huì)在討論, 今天只是熱熱身, 到此為止。

  要點(diǎn):

  1) 注釋(以REM或'開頭)行在程序中不起作用, 但能讓別人更容易讀懂你的程序.
  2) 變量好像一個(gè)盒子, 或一個(gè)代號(hào), 可以代表你想代表的東西. 變量賦值使用"="
  3) 以""包裹起來的字符稱之為"字符串"
  4) 函數(shù)像一個(gè)"黑箱", 有參數(shù)和返回值, 用"="左邊的變量可以接住返回值
  5) Inputbox函數(shù)彈出一個(gè)輸入對(duì)話框,Msgbox則用于輸出

  作業(yè):

  1) 試驗(yàn)Inputbox的第三個(gè)參數(shù)
  2) 寫一段程序輸出你的年齡
  3) 寫一段程序進(jìn)行3次輸入, 分別輸入你和你父母的姓名(要求顯示提示), 并分3次輸出

第二篇(共六篇)

  今天講各種"量"和基本運(yùn)算

  先說常量, 這個(gè)比較簡單.

  什么是常量呢, 常量就是其值不可變化的量.

  常量分為兩種:第一種, 自然常量. 這叫是因?yàn)樗鼈儽旧砭褪浅A? 你怎么更改21的值呢? 他永遠(yuǎn)都是21, 不可能變成46 。

  如果你在程序中使用"21=46", 這樣的語句將會(huì)引發(fā)一個(gè)錯(cuò)誤. 同樣的, 字符串也是常量 (還記得字符串嗎? 就是包裹在""之間的一串字符), "Hello World"就是一個(gè)例子, 如果你用"Hello World"="Bye"這樣的語句同樣會(huì)引發(fā)一個(gè)錯(cuò)誤. 你能舉出自然常量的更多例子嗎?

  第二種, 是我們自己定義的常量,這種量也使用代號(hào), 它們也被賦值, 但和變量的不同點(diǎn)在于, 他們在定義的時(shí)候被賦值,以后就不能改變了,如果企圖改變將會(huì)引發(fā)一個(gè)錯(cuò)誤. 定義一個(gè)常量,我們使用"const"這個(gè)關(guān)鍵字(關(guān)鍵字的意思是系統(tǒng)定義了有特殊功能的字, 不能作為變量名或常量名使用)

  格式是:const 常量名=常量值.

  例如:

  const PI=3.1415962
  const NAME="億速云"

  這樣我們就定義了兩個(gè)常量, PI和NAME, 一般說來, 常量名全部使用大寫, 但也可以不用, 隨你喜好. 將一些在程序中不需要改變的值定義為常量是個(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è)問題:

  const hw="Hello World"
  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)你在程序中使用變量的時(shí)候, 系統(tǒng)會(huì)打開盒子取出里面的東西, 讓這些東西參與處理, 而不是盒子. 有些語言是很依賴"盒子"里面裝些什么東西, 這樣才能找到合適的"盒子"(比如C語言), 但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語言那樣麻煩: 或者是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)了……

  變量有什么用呢? 哇, 那用處可大了. 最簡單, 你并不能確定程序運(yùn)行時(shí)變量的值, 比如前一節(jié)課我們編的輸入姓名的程序, 你不能確定InputBox返回的是什么(還記得Inputbox的返回值嗎? 就是你輸入的內(nèi)容), 所以你就沒有辦法應(yīng)對(duì)各種情況, 但我們用name這個(gè)"盒子"把用戶的名字裝起來, 到用的時(shí)候我們只要知道name這個(gè)盒子的名字就行了, 系統(tǒng)會(huì)自己打開它并把里面的內(nèi)容拿出來用. 再舉個(gè)例子, 我們編寫一個(gè)程序計(jì)算一個(gè)矩形的面積, 比如這個(gè)程序要發(fā)給小學(xué)生使用:

dim a,b,s 
a=15 
b=12 
s=a*b 
msgbox s

  這樣就可以求出長為15,寬為12的矩形的面積了, 是不是很簡單? 當(dāng)然, 這個(gè)程序也可以這樣寫:

  dim s 
  s=15*12 
  msgbox s

  這樣看起來程序短了許多, 也節(jié)約內(nèi)存, 但兩種都不是鼓勵(lì)的做法, 為什么? 請看下面.
  現(xiàn)在, 我們的程序要變得像點(diǎn)樣子才行, 誰的程序?qū)懗鰜磉€要?jiǎng)e人修改源代碼才能用啊?
  所以, 我們要接受用戶的輸入, 還記得嗎? InputBox函數(shù).
  修改后程序如下:

dim a,b,s 
a=inputbox("請輸入矩形的長:") 
b=inputbox("請輸入矩形的寬:") 
s=a*b 
msgbox s

ok, 這么一修改, 無論用戶輸入怎樣的數(shù)據(jù), 我們都能計(jì)算出矩形的面積了. 如果你用s=15*12能改嗎? 當(dāng)然不行。

  我想你已經(jīng)發(fā)現(xiàn)了, vbs中的數(shù)學(xué)計(jì)算和真正的算術(shù)沒有什么不同, +,-,*,/,(),[],{}都是一樣的用法, 比如:

dim ans 
ans=12+32/4+[(23-10)*2] 
msgbox ans

四則運(yùn)算的法則在編程中同樣生效, 你可以在編程中重新獲得小學(xué)時(shí)候的樂趣(你恨數(shù)學(xué)?那就別學(xué)電腦了)。

在編程中有一個(gè)有趣的運(yùn)算符是"mod", 這個(gè)運(yùn)算符叫做"取余運(yùn)算符", 就是取得一次除法的余數(shù), 例如

  dim a
  a=16 mod 5

  你知道a等于幾嗎? Bingo! 沒錯(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)算在編程中沒有任何不同
  4) MOD是取余運(yùn)算

  作業(yè):

  1) 編一個(gè)程序, 計(jì)算圓形的面積, 半徑由用戶給出 (使用Inputbox) PI取值3.14159
  2) 編一個(gè)程序取得20 / 3 的余數(shù)

第三篇(共六篇)

  首先, 我來解決一下上次課程的幾個(gè)疑問

  第一, 那個(gè)余數(shù)問題, 16 / 5 = 3……1, 是因?yàn)槲腋倪^前面的部分, 后面的忘了改了, 不好意思。

  第二, 請看一下程序清單:

  (1)

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中也是如此. 問題出在"+"上, 在VBS中, +不僅僅是加號(hào)的意思還表示把兩個(gè)字符串連接起來,例如"Hello"+"World"="HelloWorld" ,have you understood? 你還記得InoutBox函數(shù)的返回值嗎? 是字符串! 這就看出問題了吧, 在編程中"1"不等于(<>)1, "1"是一個(gè)字符, 而1是一個(gè)數(shù), 所以a,b都是字符串變量, "1"+"2"="12", 這就好像我們小時(shí)跟伙伴開玩笑問他們1+1=?一樣, 我們總是笑著說"錯(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語句加工一下:比如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。不過這樣寫比較適合學(xué)習(xí)過一段時(shí)間VBS的朋友.

  大家是不是覺得這個(gè)課程有點(diǎn)枯燥?呵呵, 變量和運(yùn)算符部分的確是這樣的, 不過多多練習(xí)也就好了, 這次, 我們寫寫真正好玩的東西: 流程控制語句. 這個(gè)部分開始才是真正的編程.

  首先介紹判斷結(jié)構(gòu).

  在此之前, 我們先介紹一種簡單的變量類型:布爾值(Boolean), 這種變量只有兩個(gè)可能值:True,Flase,即真或假. 這種變量在某些情況下很有用(比如"開關(guān)"). 我們定義一個(gè)Boolean變量的方法和其他變量一樣, 賦值也一樣, 例如:

  dim a,b
  a=true
  b=false 

   注意,true和"true"(加雙引號(hào))是不一樣的, "true"是字符串,true是布爾值, 千萬不能混淆.
  回到if語句上來, 我們先來看看簡化版的if語句:if 判斷式 then 語句體 我們來看一個(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語句判斷這個(gè)表達(dá)式的返回值是真還是假, 如果是真(true)則執(zhí)行then后面的語句, 如果是假, 則不執(zhí)行, 你把a(bǔ)的值改成14看看還會(huì)不會(huì)彈出對(duì)話框?

  當(dāng)我們要在判斷之后執(zhí)行多行語句怎么辦呢, 我們需要用語句塊來解決, 在這里可以叫塊if 

   dim a,b
  a=12
  b=13
  if a<b then
  msgbox "A小于B"
  msgbox "B大于A"
  end if 

   兩個(gè)msgbox函數(shù)夾在if和end if之間, 這個(gè)部分就是語句塊, 塊里的每一條語句之前請空出4~8(一個(gè)<Tab>鍵)個(gè)格, 這不是必需的, 但是是一個(gè)好習(xí)慣, 以便看清楚程序的結(jié)構(gòu). 這樣我們就能運(yùn)行多于一個(gè)的語句, 請注意if...then...end if 這三個(gè)關(guān)鍵部分不要掉了. OK, 我出一個(gè)題, 輸入一個(gè)數(shù), 如果小于100就輸出"錯(cuò)誤", 如果大于100就輸出"正確", 我這里有兩個(gè)程序版本:

  dim a 
  a=inputbox("請輸入一個(gè)大于100的數(shù)") 
  a=int(a) 'inputbox返回的是字符串, 我們把他變成整數(shù) : ) 
  if a>100 then msgbox "正確" 
  if a<100 then msgbox "錯(cuò)誤"

還有一個(gè)更簡單的 

  dim a 
  a=inputbox("請輸入一個(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("請輸入一個(gè)大于100的數(shù)") 
  a=int(a) 'inputbox返回的是字符串, 我們把他變成整數(shù) 
  if a>100 then 
  msgbox "正確" 
  else if a=100 then 
  msgbox "老大, 你耍我?" 
  else 
  msgbox "錯(cuò)誤" 
  end if 
  end if

  這次輸入100看看, 是什么? else if語句可以在if結(jié)構(gòu)中多次出現(xiàn), 以靈活判斷不同的情況 (如果你要判斷得太多, 就請使用"選擇結(jié)構(gòu)", 過會(huì)兒就講), 當(dāng)所有elseif都處理完了,而沒有符合情況的時(shí)候再執(zhí)行else中的語句.另一個(gè)例子:

  Dim a,b,c,d 
  a=inputbox("a是:","輸入半徑") 
  b=Inputbox("b是:","輸入半徑") 
  d=Inputbox("答案:","輸入答案") 
  c=a*2+b*2 '這里沒有問題, 會(huì)自動(dòng)轉(zhuǎn)換 
  if d=c then 
  msgbox "你好聰明" 
  else 
  msgbox "你好豬頭 自己的題還不會(huì)!" 
  end if

  哈哈, 無論你回答得多么正確你都是豬頭, 不是我耍你, 還是文章開始時(shí)候的inputbox的返回類型在耍你, d是inputbox的返回值, 他是一個(gè)字符串, 而c是一次整數(shù)計(jì)算的結(jié)果, 他是一個(gè)整數(shù). 一個(gè)字符串無論如何也不等于一個(gè)整數(shù), 盡管他們字面上是一樣的:"8"<>(不等于號(hào))8 所以if的判斷式的值永遠(yuǎn)是false, 總是執(zhí)行else部分的語句. 我們可以這么修改

  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è)討厭的地方, 沒辦法, vbs沒有其他好的輸入方式了.

  說到if, 我們不得不說一說邏輯運(yùn)算符, 今天介紹兩種, "and" 和 "or" 學(xué)會(huì)了if語句之后, 我舉一個(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" 這一句, 用華語是這樣:"如果a大于10或者b大于10, 那么...". 這樣是不是就很好理解了呢.

  OK, 我們再來看一種新結(jié)構(gòu),,學(xué)完這個(gè),今天的課就結(jié)束, 已經(jīng)午夜了, 我都累死了.

  當(dāng)你的程序要處理很多種不同的判斷情況的時(shí)候elseif..then會(huì)讓程序看起來很雜亂, 所以就有了一種select case結(jié)構(gòu)專門對(duì)付這種情況, select case的語法結(jié)構(gòu)很簡單:

  select case 變量名
  case 值
  語句
  case 值
  語句
  case else
  語句
  end select
  我們舉個(gè)例子就能很簡單的說明:

  dim a 
  a=inputbox("輸入一個(gè)1--3的值") 
  a=int(a) '處理inputbox返回字符串的問題 
  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)化成中國大寫數(shù)字, 這個(gè)程序?qū)懗蒳f...elseif 的形式如下

  dim a 
  a=inputbox("請輸入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 語句的格式
  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)換成中國大些數(shù)字
  5) 自己隨便設(shè)計(jì)一個(gè)程序, 應(yīng)用今天的知識(shí)

第四篇(共六篇)

  大家好,今天寫第4章:循環(huán)結(jié)構(gòu)

  我們先來看一道題:商場進(jìn)行每日結(jié)算, 要求累加出今天的營業(yè)額, 每次輸入一個(gè)數(shù), 這道題其實(shí)很簡單, 但就我們現(xiàn)在學(xué)過的知識(shí)要完成這道題相當(dāng)麻煩, 我們來分析一下. 首先, 我們需要知道買賣的次數(shù), 這樣才能控制輸入的次數(shù),但是, 這種設(shè)計(jì)是非常低效的, 每天都要重新設(shè)計(jì)程序. 假定今天進(jìn)行了5次交易, 以下是源程序:

  dim sum 
  sum=0 '初始化變量 
  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("請輸入交易額")) 
  sum=sum + int(inputbox("請輸入交易額")) 
  sum=sum + int(inputbox("請輸入交易額")) 
  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), 要停止程序請使用任務(wù)管理器(Ctrl+Alt+Del)中止wscript進(jìn)程"
  loop

  運(yùn)行這個(gè)程序, 當(dāng)你點(diǎn)銷掉一個(gè)對(duì)話框馬上會(huì)出來另一個(gè), 你永遠(yuǎn)點(diǎn)不完, 總有下一個(gè). 誰會(huì)運(yùn)行這樣的程序? 除非是給別人搗亂(我就干過這種事), 所以在do..loop結(jié)構(gòu)中還有一個(gè)語句:exit do, 這個(gè)語句將終止循環(huán), 跳到loop后面的語句繼續(xù)執(zhí)行.舉個(gè)例子來說:

  dim a '注意:常量不需要在dim里面聲明,否則會(huì)引發(fā)錯(cuò)誤 
  const pass="123456" '這是一個(gè)字符串 請用""包裹起來. 設(shè)定密碼為常量, 不可變更 
  do 
  a=inputbox("請輸入密碼") 
  if a=pass then 
  msgbox "密碼校驗(yàn)成功" 
  exit do 
  end if 
  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ù). 修改程序如下

  dim a,ctr 
  ctr=0 '設(shè)置計(jì)數(shù)器 
  const pass="pas123_" '上面的那個(gè)是弱密碼, 這次改的強(qiáng)一點(diǎn) 
  do 
  a=inputbox("請輸入密碼") 
  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 注意:這一句是賦值句,要從右往左讀,即每出錯(cuò)一次就把ctr加上1,然后再放回ctr里面,使得這個(gè)常量加1 

  msgbox "認(rèn)證出錯(cuò), 請檢查密碼" 
  end if 
  end if 
  loop

  運(yùn)行這個(gè)程序試試看, 當(dāng)你出了3次錯(cuò)誤以后, 就會(huì)停止再次詢問密碼, 關(guān)閉程序. telnet認(rèn)證用來限制次數(shù)的程序與此大同小異. 要注意的是嵌套的if語句, 請仔細(xì)讀一下這個(gè)程序, 可能比較難懂, 也請你試著自己設(shè)計(jì)一下類似的程序.

  其實(shí), 要在do...loop加上驗(yàn)證的功能, 并不一定要用if, 我們可以直接利用do. 我來介紹一下while關(guān)鍵字, while可以放在do或者是loop后面, 然后再接一個(gè)表達(dá)式, 當(dāng)表達(dá)式的值為true的時(shí)候(表達(dá)式成立),才運(yùn)行循環(huán)體.我們來看一下修改后的程序"

  dim a,ctr 
  ctr=0 
  const pass="pas123_" 
  do while ctr<3 
  a=inputbox("請輸入密碼") 
  if a=pass then 
  msgbox "認(rèn)證成功" 
  msgbox "(你可以在這里加一段成功后得到的信息)" 
  exit do 
  else 
  ctr=ctr+1 '如果密碼出錯(cuò)就增加一次錯(cuò)誤認(rèn)證計(jì)數(shù) 
  msgbox "認(rèn)證出錯(cuò), 請檢查密碼" 
  end if 
  loop

  這樣實(shí)現(xiàn)的功能和上一個(gè)例子完全一樣, 我們再來看看把while放在loop后面:

  dim a,ctr 
  ctr=0 
  const pass="pas123_" 
  do 
  a=inputbox("請輸入密碼") 
  if a=pass then 
  msgbox "認(rèn)證成功" 
  msgbox "(你可以在這里加一段成功后得到的信息)" 
  exit do 
  else 
  ctr=ctr+1 '如果密碼出錯(cuò)就增加一次錯(cuò)誤認(rèn)證計(jì)數(shù) 
  msgbox "認(rèn)證出錯(cuò), 請檢查密碼" 
  end if 
  loop while ctr<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).

  dim i 
  for i=0 to 5 
  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的形式:

  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在編程中很有用途, 我們再舉一個(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í)行一次(換句話說, 大的for執(zhí)行一次, 小的要執(zhí)行9次), 所以一共執(zhí)行了九九八十一次. 在大的for里可以不僅僅是一個(gè)小的for, 也可以加上另外的語句. 我們來修改一下源程序:

  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)行完一次, 就換一行(通過vbcrlf).

  這次的內(nèi)容對(duì)菜鳥可能比較難懂, 掌握的辦法只有一個(gè):多實(shí)踐. 另外, 我在論壇看到很多人還問:"VBScript要用什么工具編?"我就很氣憤, 我在第一篇里面已經(jīng)說明:用記事本編輯源代碼, 然后保存為以.vbs為擴(kuò)展名的程序就可以了, 請大家不要用其他工具編寫,否則很容易引起錯(cuò)誤.

  另外, 國產(chǎn)的一種垃圾軟件"超級(jí)X霸"搶占了vbs這個(gè)擴(kuò)展名, 請把那個(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) 在我國的數(shù)學(xué)經(jīng)典著作"九章算術(shù)"中有這樣一道題:百錢買百雞, 公雞5錢一只, 母雞3錢一只, 小雞1錢3只)求得是能有多少種辦法買這些雞. 如果看不懂的話我用大白話說說:有人要去買雞, 用100塊錢正好買了100只雞, 價(jià)格如下:公:5$, 母:3$, 小:1$ for 3, 讓你求一共多少種賣法(公母小怎么搭配). 請用循環(huán)解決這個(gè)問題.

第五篇(共六篇)

  今天我們來了解語言本身的最后一個(gè)論題:數(shù)組.

  要理解"數(shù)組", 這個(gè)概念我覺得另一種翻譯對(duì)學(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維以下,你可以利用幾何知識(shí)來理解"維"的概念,一維相當(dāng)于一條線, 二維則是一個(gè)矩形, 三維是一個(gè)長方體. 我知道這么講是很抽象的, 我們先舉個(gè)一維數(shù)組的例子就比較容易了解了.

  dim a(9) '從零開始 
  for i=0 to 9 
  a(i)=i '填充每一個(gè)數(shù)組元素 
  msgbox a(i) '輸出數(shù)組元素 
  next

  我們可以看到, 定義一個(gè)數(shù)組的方法和定義一個(gè)變量沒有什么不同, 同樣是使用dim語句. 定義一維數(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ù)組元素的量可能是毫無關(guān)系的, 比如第一個(gè)數(shù)組元素儲(chǔ)存你的年齡, 第二個(gè)儲(chǔ)存今年西瓜的銷售量, 但這種做法是不鼓勵(lì)的, 甚至是不被接受的, 不要這么干, 這樣的情況請定義獨(dú)立的變量. for語句在數(shù)組中可算是大顯身手, 還記得for嗎? 它累加一個(gè)變量, 我們可以把這個(gè)變量應(yīng)用在數(shù)組中正好用來讀取或者填充按照順序排列的數(shù)組元素, 上面就是這樣一個(gè)例子. 數(shù)組其實(shí)是很簡單的東西(再BASIC語言里面), 數(shù)組難的是怎么搗弄這些循環(huán), 讓他們按照你的要求運(yùn)轉(zhuǎn). 這個(gè)等到二維數(shù)組再說, 我們先看看如何手工填充數(shù)組.

  如果你這個(gè)都想不到的話, 那你真是白學(xué)了:

  dim name(7),str '一共八個(gè)學(xué)生, str變量是用來把他們儲(chǔ)存成一個(gè)字符串以便輸出 
  for i=0 to 7 
  name(i)=inputbox("請輸入第" & i+1 & "個(gè)學(xué)生的名字") 
  str=str & " " & name(i) 
  next 
  msgbox str

  這樣我們就有了一個(gè)小小的數(shù)據(jù)庫, 它們的數(shù)據(jù)排列可以看成這樣:
  name(0),name(1),name(2).....name(7)

  看到了吧, 所以我說我們可以把它看成是"一條線", 等到我們學(xué)到了文件操作, 就可以把他們輸出到文件中去了. 一維數(shù)組有很多用處, 我們來看一下一個(gè)復(fù)雜的例子. 我們要儲(chǔ)存3各學(xué)生的名字, 身高, 成績這三種數(shù)據(jù), 由于名字是字符串, 而身高可能是浮點(diǎn)數(shù)(帶小數(shù)點(diǎn)的數(shù)), 成績則可能是整數(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("請輸入第" & ctr+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ì)查詢功能:

  '接著上面的程序 
  dim cname, temp '要查詢的名字, 和一個(gè)臨時(shí)變量, 用來儲(chǔ)存數(shù)據(jù)的位置 
  cname=inputbox("請輸入你要查詢的名字:") 
  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變量完全沒有必要, 只是為了更清楚地說明問題. 因?yàn)楫?dāng)exit for以后ctr變量的值就不會(huì)改變, 儲(chǔ)存的正好是對(duì)應(yīng)數(shù)據(jù)在數(shù)組中的位置, 寫這個(gè)temp變量是為了照顧到以后要學(xué)C++的朋友(C++可以在for語句里聲明新變量, 只在這個(gè)for結(jié)構(gòu)中有效, 所以到了外部就不能訪問了). 也就是說可以簡化成如下:

dim cname 
  cname=inputbox("請輸入你要查詢的名字:") 
  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ù)組是很好解釋的, 我們來看一下:

  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ù)組(那些","是我用來分割元素的,并不存在), 了解二維數(shù)組的了嗎? 不清楚我們再講一下

  編號(hào) 0 1 2
  0 X,X,X
  1 X,X,X
  2 X,X,X

  二維數(shù)組的看起來是不是就是一個(gè)矩形呢?(你在內(nèi)存中看不到這樣的矩形, 只是便于你理解), 每個(gè)數(shù)據(jù)都有編號(hào), 由兩個(gè)數(shù)來定位, 這個(gè)很像(非常像)你在國際象棋棋盤上尋找一個(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í)際的值)再乘起來就可以了, 非常類似于求一個(gè)矩形的面積.

  假如需要儲(chǔ)存的都是同一類型的數(shù)據(jù), 我們就可以用二維數(shù)組, 比如要儲(chǔ)存5個(gè)人的姓名,國籍,民族, 就可以使用二維數(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="國籍" 
  case 2 
  opt="民族" 
  end select 
  info(i,j)=inputbox("請輸入第" & i+1 & "個(gè)人的" & opt) 
  next 
  next 
  '輸出太麻煩了, 我懶得動(dòng), 你知道那么回事就行了

  這樣就不需要定義3個(gè)一維數(shù)組了.

  多位數(shù)組(三維以上)的定義和使用方法與二維數(shù)組一樣, 但不太好在歐幾里德幾何空間里加以解釋, 幸好我們并不太常用那么多維的數(shù)組.定義一個(gè)三位數(shù)組:dim a(1,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)

  作業(yè):

  上次出的"百雞問題", 大家喜歡嗎? 以后我們就做這種需要?jiǎng)幽X的題目, 那些簡單的實(shí)踐, 大家一定要多做!
  1) 定義一個(gè)數(shù)組, 包含5個(gè)元素, 都是隨機(jī)整數(shù)(隨便輸入), 要求把他們按照從大到小的順序排列起來
  2) 有兩個(gè)二維數(shù)組a(4,4)和b(4,4) (元素值隨便), 交換兩個(gè)數(shù)組(原來的a的所有元素值變成b的, b的所有元素值變成a的)

第六篇(最后一篇)

  今天我們學(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è).

  dim a1,a2,b1,b2,c1,c2 
  a1=2:a2=4 '":"可以讓你把多個(gè)語句寫在一行上 
  b1=32:b2=67 
  c1=12:c2=898 
  if a1>a2 then 
  msgbox a1 
  elseif a1<a2 then 
  msgbox a2 
  end if 
  if b1>b2 then 
  msgbox b1 
  elseif b1<b2 then 
  msgbox b2 
  end if 
  if c1>c2 then 
  msgbox c1 
  elseif c1<c2 then 
  msgbox c2 
  end if

  多么麻煩呀, 我們把相同的比較過程復(fù)制了好幾遍, 早期語言沒有結(jié)構(gòu)化(沒有過程和函數(shù))的時(shí)候, 程序員們的確是這么干的, 那個(gè)年代也沒有剪貼板這一說, 大家都是重新輸入代碼. 后來工作簡化了:

  dim a1,a2,b1,b2,c1,c2 
  a1=2:a2=4 
  b1=32:b2=67 
  c1=12:c2=898 
  msgbox co(a1,a2) 
  msgbox co(b1,b2) 
  msgbox co(c1,c2) 
  function co(t1,t2) '我們使用function定義了一個(gè)新的函數(shù) 
  if t1>t2 then 
  co=t1 '通過"函數(shù)名=表達(dá)式"這種方法返回結(jié)果 
  elseif t2>t1 then 
  co=t2 
  end if 
  end function

  我們在這里是用了一個(gè)新的關(guān)鍵字:funciton, 這個(gè)關(guān)鍵字表示一個(gè)新函數(shù)開始, 格式:
function 函數(shù)名(參數(shù)1, 參數(shù)2...參數(shù)n) '列表可以是空的, 但括號(hào)不能省略, 參數(shù)之間用","分割
  ...
  exit function '結(jié)束函數(shù), 不是必需的
  ...
  end function

  函數(shù)是一個(gè)模塊, 只有你調(diào)用的時(shí)候才會(huì)運(yùn)行, 也就說, 當(dāng)你編寫了一個(gè)函數(shù), 然后在程序中并不調(diào)用它, 那么這個(gè)函數(shù)永遠(yuǎn)不會(huì)運(yùn)行. 一般來說, 我們編寫程序是按照:

  主程序
  ......
  ......
  ......
  函數(shù)1
  ......
  ......
  函數(shù)2
  ......
  ......

  詳細(xì)解釋一下: 函數(shù)中最重要的是參數(shù)和返回值. 參數(shù)是在函數(shù)名后面的()里定義的, 用","分割, 使用參數(shù)的時(shí)候我們也用","分割. 說到這里我想起一件事, 昨天有個(gè)朋友給我發(fā)消息問我:

  msgbox name1,name2,name3

  這個(gè)錯(cuò)在哪里? 為什么不能同時(shí)顯示出三個(gè)變量? 這就是因?yàn)槟阌昧?quot;,", 這個(gè)符號(hào)表示你輸入的三個(gè)量作為三個(gè)不同參數(shù)傳遞給msgbox )函數(shù), msgbox()函數(shù)只會(huì)顯示出第一個(gè)參數(shù), 第二個(gè)參數(shù)的作用是出現(xiàn)在標(biāo)題欄. 所以你應(yīng)該用"&"或者"+"把三個(gè)字符串變量連接起來, 作為第一個(gè)參數(shù)傳遞給msgbox()函數(shù). 程序員說參數(shù)的時(shí)候經(jīng)常說到"形參", "實(shí)參"這樣的"黑話", 我來解釋一下. "形參"是"形式參數(shù)"的簡稱, "實(shí)參"是"實(shí)際參數(shù)"的簡稱, 實(shí)參是指你調(diào)用函數(shù)的時(shí)候傳遞給函數(shù)的量, 可以使變量或者常量(直接量), 例如:co(12,24)中的12,24就是實(shí)參. 形參是你在函數(shù)定義時(shí)定義的變量, 這些變量用來"接住"傳遞過來的量, 例如function co(t1,t2t1,t2就是形參.

  在VBScript中, 參數(shù)傳遞是一種傳值, 而不是傳址(聽不明白不要緊, 學(xué)了C語言的指針你就明白了), 所以我們進(jìn)行的參數(shù)傳遞實(shí)際上是進(jìn)行了一次變量賦值, 例如我們調(diào)用co(a1,a2), 實(shí)際上程序會(huì)執(zhí)行一步:t1=a1,t2=a2這樣的操作. 同樣因?yàn)閭髦祩髦返脑? VBScript只能返回一個(gè)值, 我們先來看看什么叫"返回". 當(dāng)一個(gè)過程調(diào)用了另一個(gè)過程的時(shí)候(比如主程序調(diào)用了函數(shù)), 控制權(quán)就到了被調(diào)用過程那里, 當(dāng)這個(gè)過程執(zhí)行完畢以后, 會(huì)回到調(diào)用它的地方繼續(xù)執(zhí)行, 這個(gè)就叫做"返回", 返回的時(shí)候可以帶一個(gè)值叫做"返回值"(這是"通俗"的理解). 在vbs繼承了basic的傳統(tǒng), 返回的時(shí)候采用"函數(shù)名=返回值"的辦法, 這個(gè)"返回值"是指一個(gè)表達(dá)式(在編程中, 任何東西都是表達(dá)式, 比如變量a, 常數(shù)0, "Hello",c=1+2等等這都是表達(dá)式). 比如

  有一個(gè)函數(shù)是ht, 則返回的方法是:ht=你要返回的值. 注意:返回以后, 后面的語句將不再執(zhí)行.

  調(diào)用一個(gè)函數(shù)我就不用講了吧:變量=函數(shù)名(參數(shù))

  有時(shí)候我們并不需要返回什么值, 這個(gè)時(shí)候我們可以使用一種稱之為"子程序"的結(jié)構(gòu). 子程序或稱之為過程與函數(shù)的差別

  就在于:1) 沒有返回值, 2) 使用sub關(guān)鍵字定義, 3) 通過Call調(diào)用.舉個(gè)例子:

  dim yname 
  yname=inputbox("請輸入你的名字:") 
  call who(yname) 
  sub who(cname) 
  msgbox "你好" & cname 
  msgbox "感謝你閱讀我的課程" 
  msgbox "這是基礎(chǔ)部分的最后一課" 
  end sub

 你一定看明白了, 很簡單的. 退出一個(gè)過程和退出一個(gè)函數(shù)一樣:exit sub(函數(shù):exit function).

  要注意, 子程序(過程)是比較特殊的一個(gè)結(jié)構(gòu), C等語言是沒有這個(gè)概念的, C語言中的一切都是函數(shù), 沒有返回值的函數(shù)

  在C語言中只要使用void修飾符定義就行了.

  今天沒有什么可講的了, 基礎(chǔ)篇就這么結(jié)束了, 目前你已經(jīng)有了基本的編程概念(面向過程的結(jié)構(gòu)化編程), 可以選擇學(xué)習(xí)另外一種語言(比如C或Pascal), 現(xiàn)在的基礎(chǔ)會(huì)有一定的幫助. 如果你想要繼續(xù)學(xué)習(xí)vbs或通過它更詳細(xì)的了解編程在轉(zhuǎn)型可以跟我繼續(xù)學(xué)習(xí), 但因?yàn)槲业募倨诮Y(jié)束所以更新的時(shí)間可能會(huì)比較慢, 請大家原諒.初步計(jì)劃如下:

進(jìn)階篇:

  變量的深入討論
  ┣ 變量類型
  ┣ 變量的有效范圍
  ┣ 數(shù)組的深入討論
  ┣ 動(dòng)態(tài)數(shù)組
  ┣ 函數(shù)的深入討論
  ┣ 數(shù)組作為函數(shù)參數(shù)
  ┣ 多個(gè)返回值
  ┣ 字符串操作
  ┣ 其他
  ┣ 面向?qū)ο缶幊?OOP)的基本知識(shí)
  ┣ 文件操作
  ┣ FSO對(duì)象
  ┣ 其他相關(guān)部分
  ┣ VBS與網(wǎng)頁
  ┣ HTML中嵌入VBS
  ┗ VBS與表單(設(shè)計(jì)你的程序界面 wow!)

  實(shí)戰(zhàn)篇

  ┣ 病毒編程
  ┗ Socket編程(TCP/UDP)
  這只是大概的內(nèi)容, 我想應(yīng)該會(huì)有變化, 到時(shí)候你就會(huì)讀到的. 今天的內(nèi)容請多多實(shí)踐, 作業(yè)就是把前面的各個(gè)課程在溫習(xí)一下. 對(duì)要離開這個(gè)課程去更進(jìn)一步學(xué)習(xí)的朋友:祝你再學(xué)習(xí)編程的道路上一帆風(fēng)順.
編輯本段vbScript常用運(yùn)算符與函數(shù)
  基本運(yùn)算
  + 數(shù)字加法及字符串連接
  - 數(shù)字減法
  * 數(shù)字乘法
  / 數(shù)字除法
  Mod 求余數(shù)
  \ 求商數(shù)
  & 字符串連接
  ^ 次方
  = 相等
  <> 不相等
  >= 大于或等于
  > 大于
  <= 小于或等于
  < 小于
  Not 非
  And 且
  Or 或
  Xor 異或
  循環(huán)及決策
  if ....then 若...則...
  if ...then...else 若...則...非
  else if... 非若
  select case... 群組選擇條件
  end select
  for ... next 計(jì)數(shù)循環(huán)
  while...wend 條件循環(huán)(一)
  do while...loop 條件循環(huán)(二)
  do...loop while 條件循環(huán)(三)
  do until...loop 條件循環(huán)(四)
  do...loop until 條件循環(huán)(五)

  數(shù)學(xué)函數(shù)

  abs絕對(duì)值
  Sgn 正負(fù)號(hào)
  Hex 轉(zhuǎn)換成十六進(jìn)制
  Oct 轉(zhuǎn)換成八進(jìn)制
  Sqr 平方根
  Int 取整數(shù)
  Fix 取整數(shù)
  Round 取整數(shù)
  Log 以e為底的對(duì)數(shù)
  Sin 正弦函數(shù)
  Cos 余弦函數(shù)
  Tan 正切函數(shù)
  字符串處理函數(shù)
  IsNull 判斷對(duì)象是否為空
  Len 字符串長度
  Mid 取部分字符串
  Left 從字符串開頭取部分字符串
  Right 從字符串結(jié)尾取部分字符串
  Lcase 轉(zhuǎn)換成小寫
  Ucase 轉(zhuǎn)換成大寫
  Trim 清除字符串開頭及結(jié)尾的空格符
  Ltrim 清除字符串開頭空格符
  Rtrim 清除字符串結(jié)尾空格符
  Replace 替換字符串部分字符
  Instr 判斷是否包含于另一個(gè)字符串(從起始搜尋)
  InstrRev 判斷是否包含于另一個(gè)字符串(從結(jié)尾搜尋)
  Space 任意字符數(shù)的空格符
  String 任意字符數(shù)的任一字符
  StrReverse 反轉(zhuǎn)字符串
  Split 以某字符分割字符串

  數(shù)據(jù)類型轉(zhuǎn)換函數(shù)

  Cint 轉(zhuǎn)換成整形
  Cstr 轉(zhuǎn)換成字符串
  Clng 轉(zhuǎn)換成長整數(shù)
  Cbool 轉(zhuǎn)換成布爾函數(shù)
  Cdate 轉(zhuǎn)換成日期函數(shù)
  CSng 轉(zhuǎn)換成單精度
  CDbl 轉(zhuǎn)換成雙精度

  日期時(shí)間函數(shù)

  Date 現(xiàn)在日期
  Time 現(xiàn)在時(shí)間
  NOw 現(xiàn)在日期時(shí)間
  DateAdd 增加日期
  DateDiff 兩日期差
  DateSerial 日期設(shè)定
  Datevalue 日期設(shè)定
  Year 現(xiàn)在年份
  Month 現(xiàn)在月份
  Day 現(xiàn)在天
  Hour 現(xiàn)在時(shí)刻
  Minute 現(xiàn)在分鐘
  Second 現(xiàn)在秒鐘
  Timer 午夜距現(xiàn)在秒數(shù)
  TimeSerial 時(shí)間設(shè)定
  Timevalue 時(shí)間所屬部分
  WeekDay 星期名稱
  MonthName 月份名稱

  其它函數(shù)

  Array 產(chǎn)生數(shù)組
  Asc 字符ASCII碼
  Chr ASCII碼字符
  Filter 過濾數(shù)組
  InputBox 輸入窗口
  Join 合并數(shù)組中的元素
  MsgBox 信息窗口
  Lbound 數(shù)組下界
  Ubound 數(shù)組上屆

  指令

  Const 設(shè)定常數(shù)
  Dim 定義變量或者數(shù)組
  Erase 清除數(shù)組
  ReDim 重新聲明數(shù)組
  Randomize 起始隨機(jī)數(shù)
  Rnd 取得隨機(jī)數(shù)
  ASP對(duì)象
  Session對(duì)象
  IsEmpty 測試Session變量是否存在
  TimeOut 設(shè)定Session變量生存周期
  Abandon 強(qiáng)制清除Session變量
  Application對(duì)象
  IsEmpty 測試Application變量是否存在
  Lock 鎖定Application變量
  Unlock 解除Lock指令的鎖定
  Cookies對(duì)象
  Expires 設(shè)定Cookies變量的生存周期
  Connection對(duì)象
  Open 打開與數(shù)據(jù)庫的連接
  Execute 打開Recordset對(duì)象
  Close 關(guān)閉Connection對(duì)象
  Recordset對(duì)象
  movefirst 將記錄指針移至第一條
  movelast 將記錄指針移至最后一條
  movenext 將記錄指針移至下一條
  moveprevious 將記錄指針移至上一條
  bof 測試是否為recordset的起始
  eof 測試是否為recordset的結(jié)束
  open 打開Recoreset對(duì)象
  close 關(guān)閉recordset對(duì)象
  fields 讀取數(shù)據(jù)的子對(duì)象
  fileds.count 字段個(gè)數(shù)
  pagesize 每頁記錄條數(shù)
  absolutepage 設(shè)定為某頁
  pagecount 總頁數(shù)
  Absoluteposition 直接跳至某條記錄

感謝各位的閱讀!關(guān)于“VBS基礎(chǔ)知識(shí)點(diǎn)有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

vbs
AI