第3章 VBScript的控制结构.docx

上传人:b****8 文档编号:9719398 上传时间:2023-02-06 格式:DOCX 页数:41 大小:218.50KB
下载 相关 举报
第3章 VBScript的控制结构.docx_第1页
第1页 / 共41页
第3章 VBScript的控制结构.docx_第2页
第2页 / 共41页
第3章 VBScript的控制结构.docx_第3页
第3页 / 共41页
第3章 VBScript的控制结构.docx_第4页
第4页 / 共41页
第3章 VBScript的控制结构.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

第3章 VBScript的控制结构.docx

《第3章 VBScript的控制结构.docx》由会员分享,可在线阅读,更多相关《第3章 VBScript的控制结构.docx(41页珍藏版)》请在冰豆网上搜索。

第3章 VBScript的控制结构.docx

第3章VBScript的控制结构

 

第3章VBScript的控制结构

上一章所用的各范例中的脚本大部分都是相当简单的。

因为它们都是从上到下顺序执行的,总是终止于最后一行,要想再次执行,必须从头开始。

但实际上,一般脚本程序不会都那么简单,它们往往包含一些根据不同的情况选择执行的语句,以及根据某些条件重复执行的语句。

为了能实现这样的功能,VBScript中设置了相应的流程控制语句,控制程序的执行。

本章主要讨论VBScript中常用的几种控制结构,具体包含以下内容:

●条件语句If…Then

●多分支语句SelectCase

●计数式循环For…Next

●集合元素循环Foreach

●条件式循环While和Do…Loop

3.1条件语句If…Then

这是最常用的语句,照字面上的意思翻译过来也相当简单,就是“如果…就”。

日常生活中也常常会用到这种句子,例如:

要买一片CD,当店员告诉我们价钱时,我们就要决定是否要买。

因此我们可以在购买前先设置一个条件:

如果CD的价格在300元以下(含300元)就买;否则就不买。

将这种情况转换为计算机语言程序,表示形式如下:

IfCD价格<=300Then买Else不买

在VBScript脚本语言中,If…Then的语句有多种格式,我们以下分别进行讨论。

3.1.1If的第一种格式:

如果…就…(单一选择)

格式如下:

If条件Then语句组

这是If指令最简单的格式“单一选择”,其中的“条件”是一个表达式,它所计算的结果必须是一个逻辑数据,如果“条件”的计算结果是“TRUE”,那么就会执行Then后面的“语句组”:

如果“条件”的计算结果是“FALSE”,那么就会跳过整个If语句,而不会执行Then后面的“语句组”。

如果Then后面的“语句组”较长,不便于写在同一行,可以另起一行书写,并在最后加上EndIf以结束If条件语句。

形式如下:

If条件Then

语句组

EndIf

【例3-1】简单的If语句

图3-1条件满足时显示的消息框

If

--

Score=70

IfScore>=60ThenMsgBox"及格!

"

-->

上述代码演示了“If…Then”的基本用法,首先将表示分数的变量Score赋值为70,接下来就判断这个变量的值是否大于60(表示是否及格),若大于等于60,则显示消息框“及格”,这里由于70>60,所以显示如图3-1所示。

如果不满足这个条件,则什么也不做。

代码中的“Score>=60”表示分数高于或等于60,如果这个表达式的值为真,表示条件成立,则执行Then后的语句,显示出信息框;如果表达式的值为假,也就是条件不成立,则跳出If语句,执行If语句之后的语句。

读者也可以试着把“Score=70”这行改成“Score=50”,看这样执行时又会产生什么不一样的结果。

在If语句的格式中,Then后面可以写多个语句,如:

Ifx>3Theny=1:

z=2

这时,可以把If语句写成如下形式:

Ifx>3Then

Y=1

Z=2

EndIf

注意:

形式中EndIf不能省。

另外,若把上述形式写成如下:

Ifx>3ThenY=1

Z=2

EndIf

将产生错误。

由于浏览器环境下系统不显示错在哪里,因此,对于这样的问题应特别小心。

当然,你可以借助像FrontPage这样的编程环境来帮助查找脚本的中错误。

3.1.2If的第二种格式:

如果…就…否则…(双向选择)

格式如下:

If条件Then

语句组一

Else

语句组二

EndIf

这个格式跟前一个格式不同的地方是多了Else部分,意思就是说如果上面的条件没有产生“TRUE”的话,那就执行Else后面的“语句组二”,所以叫作双向选择,他比前一个格式又多了一种变化,请看下面的范例。

【例3-2】双向选择

If

--

Score=InputBox("请输入计算机成绩:

","输入成绩")

IfScore>=60Then

Msg="及格!

"

Else

Msg="不及格!

"

EndIf

MsgBox"你的计算机成绩"&Msg

-->

为了验证本例中的代码,你应首先输入代码并保存成一个HTML文件,双击该文件图标后,将显示如图3-2所示输入框,若此时输入“87”,按“确定”按钮,将显示及格信息,如图3-3所示

图3-2成绩输入框图3-3显示及格提示

若输入“48”,如图3-4所示,按“确定”按钮,会显示不及格信息,如图3-5所示。

图3-4在输入框中输入数据图3-5显示不及格提示

本例代码中的If语句也可写在同一行,形式如下:

IfScore>=60ThenMsg=“及格!

”ElseMsg=“不及格!

但是,如果写成以下形式,则是错误的。

IfScore>=60ThenMsg=“及格!

ElseMsg=“不及格!

即使再加上EndIf,也是错误的。

另外,格式中,条件满足时执行的语句和条件不满足时执行的语句都可以是另外一个条件语句,这时,就构成所谓的条件的嵌套。

3.1.3If的第三种格式:

多向选择

当有多种情况需要进行分别处理时,可以使用如下格式的If语句:

If条件1Then

语句组1

Elseif条件2

语句组2

Elseif条件3

语句组3

……

……

Else

语句组N+1

EndIf

前面介绍的两种If语句都只能处理一个条件,而此格式可以同时处理许多条件。

程序执行时,先检查“条件1”,若返回值为“TRUE”,则执行“语句组1”,然后跳到EndIf的下一个指令;若“条件1”的返回值为“FALSE”,则检查“条件2”,若返回值为“TRUE”,则执行“语句组2”,再跳到EndIf的下一个指令,否则检查“条件3”,依此类推。

若所有条件都不成立,则执行Else后的“语句组N+1”。

这里,“语句组1”至“语句组N+1”只有一个会被执行。

这种程序逻辑翻译成一般用语就是“如果…就…否则如果…就…否则…”。

【例3-3】使用多种条件

如果就否则如果就

--

Score=InputBox("请输入计算机成绩:

","输入成绩")

IfScore>=90Then

Msg="优等"

ElseIfScore<90AndScore>=80Then

Msg="甲等"

ElseIfScore<80AndScore>=70Then

Msg="乙等"

ElseIfScore<70AndScore>=60Then

Msg="丙等"

Else

Msg="丁等"

EndIf

MsgBox"你的计算机成绩为"&Msg

-->

执行本例中的代码时,若输入“99”,然后按“确定”,会显示“优等”,如图3-6。

图3-7所示。

图3-6输入框图3-7显示等第

若输入“46”,然后选取“确定”,则会显示“丁等”。

上例中是对输入的一个数进行一系列判断,而实际上,当你浏览各种网页时,很少见到这样的输入框。

那么条件语句用在哪里呢?

请看另外一个例子。

【例3-4】根据时间不同显示不同的问候信息

判断语句

DimiTime

Dimstrmsg

iTime=HOUR(TIME)

IfiTime<3then

strmsg="凌晨了,还没睡,小心身体噢。

"

elseIfiTime<7then

strmsg="起这么早?

"

elseIfiTime<12then

strmsg="上午好。

"

elseIfiTime<18then

strmsg="下午好。

"

else

图3-8不同时间的问候

strmsg="晚上好,吃过晚饭了?

"

endIf

msgboxstrmsg

随时间变化的问候。

当你在深夜浏览该网页时,将得到如图3-8所示的问候,你的心情如何?

3.2多分支语句Select…Case

这种流程控制结构可以根据一个变量的值选择不同的执行方向,你可以把他想象成一个有多重入口的车库,这个车库可以根据要进来的车种而分配停车的位置。

Select…Case就是依据这种方法来进行流程控制,它的格式如下:

SelectCase变量

Case值1

语句组1

Case值2

语句组2

Case值3

语句组3

……

CaseElse

语句组N+1

EndSelect

你必须先给Select…Case语句一个变量,这个变量就是它执行判断的对象,就好象上面所比喻的车库要以车的种类来当作判断的对象。

接下来的Case就是要写出这个变量可能的情况,就好象车库可以停那几种车型,语句组就是指出相应的车型应停靠的位置。

Select会从第一个值依次比较,看看是否和变量的值相等,如果相等就会执行其后的语句组,执行完之后再跳到EndSelect继续执行后面的程序。

下面我们先来看个范例。

【例3-5】多向选择

多向选择1

--

NO=InputBox("请输入一个1-5之间的数字:

","汉译英")

SelectCaseNO'以NO作为比较对象

Case1

MSG="ONE"

Case2

MSG="TWO"

Case3

MSG="THREE"

Case4

MSG="FOUR"

CaseElse

MSG="FIVE"

EndSelect

MsgBoxNO&"的英文为:

"&MSG

-->

像这样用“Select…Case”的结构写出的程序也可以用“If…Then”结构来表示,但用“If…Then”写出的程序看起来会复杂一些。

本例中的代码在浏览时,首先将给出一个输入框,若输入“1”,然后按“确定”,将显示如图3-9所示信息框,若输入5,则将显示如图3-10所示信息框。

图3-9输入1后的显示图3-10输入5后的显示

这个程序会将用户所输入的数值翻译成英文,然后显示出来。

程序一开始会将用户输入的数值存入变量“NO”之中,然后再使用Select把变量“NO”的值同Case后面的各值进行比较,相等时就执行其后的语句组。

如果变量NO的值同所有的Case后面的值都不相等时,就会跳到CaseElse,再执行其后的语句组。

在上面的范例中,如果用户输入“6”的话,结果还是会显示“FIVE”,因为程序只写出判断值有没有等于1到4,若没有就会显示“FIVE”,但你还是可以把最后的Else那段改成如下:

Case5

Msg=“FIVE”

这样的话就算用户输入“6”,也不会判断错误。

其实不管在Select或If判断语句中,都不一定要加入Else语句,你可以根据需求来决定。

上面的程序也可以用“If…Elseif…EndIf”语句来完成,程序如下:

【例3-6】用If语句实现的多向选择

多项选择2

--

NO=InputBox("请输入一个1-5之间的数字:

","汉译英")

IfNO=1Then

MSG="ONE"

ElseifNO=2Then

MSG="TWO"

ElseifNO=3Then

MSG="THREE"

ElseifNO=4Then

MSG="FOUR"

ElseifNO=5Then

MSG="FIVE"

EndIf

MsgBoxNO&"的英文为"&MSG

-->

Select…Case语句的好处就在于它可以清楚的显示出要执行的结果,程序越大就越能看到它的优点。

不过“Select..Case”也有它的缺点,那就是它执行的判断语句只能针对一个变量,而If…Then则没有这个限制。

有时,当需要对多个值进行同样处理时,你可以将多个值放在同一个Case后面,请看例3-7,它用来求当前月份的天数。

【例3-7】求本月的天数

多向选择1

--

m=month(date()):

y=year(date())

SelectCasem'以m作为比较对象

Case1,3,5,7,8,10,12

D=31

Case2

Ifymod4=0andymod100<>0orymod400=0then

D=29

Else

图3-11显示本月天数的信息框

D=28

EndIf

CaseElse

D=30

EndSelect

MsgBox"本月共有:

"&d&"天"

-->

本例代码中首先通过函数求得当前日期的月份和年份,分别放入变量m和变量y中,再根据月份的值,求出相应月份的天数,放入变量D,最后显示该变量的值。

由于像1月、3月等很多月份的天数相同,所以,例中把天数相同的那些月份放在同一个Case中。

写成如下形式:

Case1,3,5,7,8,10,12

注意:

在VB中,Case后面可以使用如下两种形式:

Case1To10

CaseIS<4

这在VBScript脚本语言中都不能使用。

另外,本例代码中,对于2月份,使用了一个条件语句,进一步判断是否是闰年,因为闰年的二月为29天,不是闰年的二月为28天。

本例代码在浏览时,将显示如图3-11所示的信息框。

3.3计数循环语句For…Next

计算机最擅长的功能就是重复执行某段程序,如果每执行一次就要写一次程序代码的话,大部分的程序必然非常庞大冗长,“循环”指令就是用来解决重复执行的问题。

例如要打印一个班级的成绩单,只要使用循环逐一将每个学生的成绩取出送给打印机即可,程序代码写一次便可完成工作。

最常见的循环范例有“算出1加2加3一直加到50的总和”,“显示九九表”等。

For变量=起始值To终止值[Step步长]

语句组

Next

这个“循环”指令以For开始,Next结束。

VBScript开始执行循环时,会将初始值赋给变量,然后判断变量的值是否小于等于“终止值”,若是,执行For和Next间的“语句组”(也称为循环体);否则跳到Next后面的语句执行(即离开循环)。

当VBScript执行完一次循环体后,将变量值加上“步长”后再与“终止值”比较,若仍小于等于“终止值”,则再次执行循环体。

以此类推,直到变量值大于“终止值”为止。

“Step步长”可有可无,若没有设置步长,则步长为1。

通常“步长”为正,若“步长”为负时,处理过程类似,只是每次判断时,变量大于等于“终止值”,则继续执行循环体,否则结束循环。

【例3-8】求1加到10的总和

循环1

--

'计算1加到10的总和

图3-12显示1到10的和

TOTAL=0

ForCOUNTER=1TO10

TOTAL=TOTAL+COUNTER

Next

MsgBox"1加到10的总和为"&TOTAL

-->

本例代码浏览时将显示如图3-12所示的信息框。

由于VBScript并未提供程序调试器。

通过用列表的方式来跟踪循环是理解循环结束时各变量值的最好方式。

本例中循环执行时,循环体(Total=Total+Counter)中各变量的值变化情况如表3-1所示:

表3-1循环过程跟踪

次数

COUNTER

等号右边的TOTAL

等号左边的TOTAL

第一次

1

0

1

第二次

2

1

3

第三次

3

3

6

第九次

9

36

45

第十次

10

45

55

如果要算出1到100之间的偶数和,又该如何处理呢?

请看以下范例。

【例3-9】设置步长的循环

循环2

--

'用循环求2+4+6+....+100的和

TOTAL=0

ForI=2TO100STEP2

TOTAL=TOTAL+I

图3-13设置步长的循环

Next

MsgBox"2+4+6+...+100="&TOTAL

-->

本例浏览结果如图3-13所示

【例3-10】步长为负时的循环

输出一由星号组成的三角形

--

Fori=10To1step-1

document.writeString(i,"*")&"
"

图3-14步长为负数时的循环

Next

-->

本例代码中使用了一个步长为负1的循环,这时,初始值应大于终止值,否则循环一次也不执行。

本例中循环的循环体为一个语句,它使用文档对象的输出方法每次输出I个“*”号。

这样,当循环结束后,显示结果如图3-14所示。

如果循环体中执行的语句又是循环语句时,这种形式称为嵌套循环。

请看以下范例。

【例3-11】输出九九表

九九表

--

Fora=1To9

Forb=1Toa

Document.writea&"*"&b&"="&a*b&""

Ifb=aThendocument.write"
"

Next

Next

-->

执行结果如图3-15所示。

图3-15输出九九表

本例代码中的循环里又套着一个循环,当外层的循环第1次执行时,a的值为1,这时,内层的循环就会执行1到1的循环,只循环1次,打印出一个等式。

当外层的循环执行到第2次时,a的值为2,这时,内层的循环就会执行1到2的循环,循环2次,输出第2行的两个等式。

依次类推,外层的循环执行到最后一次时,a的值为9,这时,内层的循环将变为1到9的循环,共循环9次,将输出最后一行的九个等式。

循环经常用在对数组的处理方面,请看以下例子。

【例3-12】使用循环处理数组

循环与数组1

--

DIMA(99)

ForI=0TO99

A(I)=I+1

Next

-->

这个程序定义了一个可以存放一百个元素的数组,然后使用循环,当第1次执行循环体时,I的值为0,执行结果将把值1(I+1)赋给数组元素A(0);当第2次执行循环体时,又把值2赋给数组元素A

(1)。

依次类推,实际上本例脚本的作用是将数组各元素的值依序设置为1到100。

显然,用循环比一行一行写简单多了。

【例3-13】输出数组内容

DIMmc(3)'定义一个有4个变量的数组

mc(0)="机械工程系"

mc

(1)="电子工程系"

mc

(2)="计算机科学系"

mc(3)="网络工程系"

图3-16用数组构成的列表框

本例代码中包含两处VBScript脚本,其中前一部分定义了一个数组,并设置了一些初始值。

后一部分示意性地说明,可以把数组元素的值作为表单中的一个选项,构成一个下拉列表框。

浏览结果如图3-16所示。

其实,只要是有规律性的变化都可以用循环来执行,关键是如何发现其中的规律。

3.4ForEachIn…Next(数组循环)

形式上它和For…Next循环很象,但它只适用于对数组或集合的元素进行循环,它的格式如下:

ForEach变量In数组名

语句组

Next

其中的“变量”就是存放数组或集合的元素值的地方,请看下面的范例。

【例3-14】输出数组内容

FOREach循环

DIMhf(4,4)'定义了一个5*5的二维数组

i=0:

j=2

Fork=1To25

hf(i,j)=k

Ifkmod5=0then

i=i+1

else

i=i-1

Ifi=-1theni=4

j=j+1

Ifj=5thenj=0

endIf

next

相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1