动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
  
   .Net → 阅读文章

 流程控制

作者来源: 
阅读 1163 人次 , 2006-3-29 4:27:00 

程序在执行的时候,我们可以视情况决定要执行哪些程序,不执行哪些程序,或决定让某段程序代码可以重复执行;这些动作我们称为程序的流程控制。要控制程序的流程,首先我们要了解两种运算子,这两种运算子为比较运算子以及逻辑运算子。这两种运算子的传回值型态都是为布尔,不是代表真的true 就是代表伪的false。

比较运算子
要比较数值、字符串或日期,可以利用比较运算子。例如假设我们的程序要求使用者输入年龄,如果未满十八岁的话就不允许执行一些程序。这时候我们就要来检查使用者所输入的年龄,vb.net 提供了六种用来测试数据的比较运算子,如下图所示:


比较运算子会将其比较测试结果以true 或false 的布尔型态传回,上表的范例利用指定运算子将比较的结果放到指定运算子左边的变量a~f。

逻辑运算子
除了比较运算子外,还有逻辑运算子。最常用到的逻辑运算子是and、or 及not。

and
and 运算子用来组合两个叙述,and 运算子只有在这a以及b 两个叙述同时为true 时传回true,其余皆传回false。以下为and 运算子的真值表,其中f 代表false,t 代表ture,而y 代表输出:


or
or 运算子用来组合两个叙述,只要or 运算子在这a 或b 两个叙述有一个为true 时传回true,只有在两个叙述都为false 时传回false。以下为or 运算子的真值表,其中f 代表false,t 代表ture,而y 代表输出:

其中f 代表false,t 代表ture,而y 代表输出。

not
not 运算子用倒置单一叙述,not 运算子在叙述为false 时传回true,叙述为true 时传回false。以下为not 运算子的真值表,其中f 代表false,t 代表ture,而y 代表输出:


if...then 叙述
if...then 叙述可以依条件式的检查结果决定程序代码的执行。if...then 的结构有三种,分别为
if...then、if...then...else 以及if...then...elseif 这三种。

if...then 叙述
我们利用if...then 叙述来决定程序是否要或是不要执行某段程序代码,其语法如下所示:

if 条件判断then 叙述

if 条件判断then
叙述一
叙述二
叙述n...
end if


if 判断句会检查条件判断式的测试结果。其结果若传回true 或是非零的数值,则表示条件成立,便执行then 后面的叙述。倘若测试结果传回false,则检查结果不成立,那们就不会执行then后面的程序叙述。如果叙述只有一行,则可以接在then 后面撰写程序叙述:

if shtcpuspeed < 500 then response.write("你的计算机速度太慢了!")

?

<html>
<%
dim intincome as integer
intincome=cint(request("income"))
if intincome>990000 then
response.write("您的年输入超过99 万, 您应该缴的税为:")
response.write(format((intincome*0.21)-105100,"$##,###,###.00"))
end if
%>
</html>


note
上列程序我们将if 和end if 之间的程序代码往内缩两个字符,这个程序代码的编排方式称做缩排。对于有结构的程序代码叙述,在撰写时将程序代码缩排可以让程序代码更容阅读。

if...then...else 叙述
我们利用if...then...else 叙述来决定程序要执行的程序代码区块,其语法如下所示:if 条件判断then

if 条件判断then
程序区块一
else
程序区块二
end if


if...then...else 结构在条件判断式的测试结果为true 成立时,执行then 以及else 之间的程序,执行完毕后则直接跳出if 判断结构继续执行程序;倘若条件判断式的结果为false 不成立,则执行else 以及end if 之间的程序代码,执行完毕后一样直接跳出if 判断结构继续执行程序。

<html>
<%
dim intincome as integer
intincome=cint(request("income"))
if intincome>990000 then
response.write("您的年收入超过99 万, 您应该缴的税为:")
response.write(format((intincome*0.21)-105100,"$##,###,###.00"))
else
response.write("您的年收入没超过99 万, 您应该缴的税为:")
response.write(format((intincome*0.13)-25900,"$##,###,###.00"))
end if
%>
</html>

我们在呼叫上述aspx 网页时如果将income 参数以1000000 传入,则if 后面的条件判断式传回true 代表成立,所以then 至else 之间的程序代码将被执行,执行完毕后即略过else 后面的程序代码并直接跳出if 判断结构继续执行程序;如果将income 参数以990000 传入,则if 后面的条件判断式传回false 代表不成立,所以then 至else 之间的程序代码将被略过不被执行,直接无条件执行else 至end if 之间的程序区块。

if...then...elseif 叙述
我们利用if...then...elseif 叙述来执行多个条件式的判断,其语法如下所示:

if 条件判断一then
程序区块一
elseif 条件判断二
程序区块二
[else
程序区块三]
end if


if...then...elseif 结构在条件判断式一的测试结果为true 成立时,执行程序区块一的程序,执行完毕后不再做其它的条件判断,直接跳出if 判断结构继续执行程序;倘若条件判断式一的结果为false 不成立,则执行elseif 叙述的条件判断式二。倘若测试结果为true 成立时,则执行程序区块二;倘若条件表达式二的检查结果依然为false 不成立,则无条件执行else 及end if 之间的程序区块三,执行完毕后一样跳出if 结构继续执行程序;倘若没有else 叙述,则不执行任何动作。

<html>
<%
dim shtgrade as short=cshort(request("grade"))
if shtgrade>=80 then
response.write("您的等级为a")
elseif shtgrade>=70 then
response.write("您的等级为b")
elseif shtgrade>=60 then
response.write("您的等级为c")
else
response.write("您的等级为d")
end if
%>
</html>

上述程序代码为将学生的成绩转换成a、b、c、d 的等级。这里的程序代码我们不再多做说明,唯一要注意的是下面这行用法:

dim intgrade as integer=cint(request("grade"))

上列叙述用resquest 对象从暂存区将参数grade 取出后,为变量intgrade 的初始值,这样一\来就可以取代原来的两行叙述:

dim intgrade as integer
intgrade=cint(request("grade"))

巢状结构
如果if 条件判断式所要执行的程序区块里还有if 条件判断式,这种样式的循环我们称为巢状结构,如下所示:

if 条件判断then
if 条件判断then
程序区块
else
程序区块
end if
else
程序区块
end if

透过巢状结构的运用,程序的撰写就可以更灵活更有弹性。例如我们将上述程序多加个巢状if判断,六十分以下除印出等级为d 外,倘若不低于五十分则印出可以补考,低于五十分则印出不能补考。

<html>
<%
dim shtgrade as short=cshort(request("grade"))
if shtgrade>=80 then
response.write("您的等级为a")
elseif shtgrade>=70 then
response.write("您的等级为b")
elseif shtgrade>=60 then
response.write("您的等级为c")
else
response.write("您的等级为d")
if shtgrade>=50 then
response.write("可以补考")
else
response.write("不能补考")
end if
end if
%>
</html>

条件判断式和逻辑运算子的配合
上述所做的范例都是使用比较运算子进行比较运算,而本部分我们要利用逻辑运算子和条件判断式搭配使用。在条件判断式中,最主要是检查最后的结果来决定程序的执行。只要我们所使用的条件判断式最后传回true 或是false,就可以决定程序如何执行。在条件判断式中使用逻辑运算子,可以让我们做多个条件的判断,让我们撰写程序时更具弹性。

and
and 运算子用于我们想要多个同时条件都成立时,才执行某段程序代码时使用。例如下列程序为检查使用者的名称及密码:

<html>
<%
dim strid as string=cstr(request("id"))
dim strpwd as string=cstr(request("pwd"))
if strid="charles" and strpwd="1234" then
response.write("使用者名称及密码正确!")
else
response.write("使用者名称及密码错误!")
end if
%>
</html>

if 陈述最主要是检查if 和then 间条件判断式的结果,在上述程序中条件判断式为:

strid="charles" and strpwd="1234"

 


vb.net 执行这行条件判断式时,先检查左边的比较运算;如strid="charles" 的比较结果为true,则再进行右边strpwd="1234" 的比较运算;倘若右边比较结果为true,最后才进行and运算。由于是执行and 运算,and 运算子左右两边的运算结果为true 时,and 运算才传回true。所以只要执行时,and 运算子左右两边的运算结果只要传回false,vb.net 即不继续执行下一步的检查并传回false。

快捷方式回路short-curuited
上述表达式若是在之前的vb 版本,则不管and 运算子左右两边表达式的运算结果,一定先依序将两个表达式运算完毕后再执行and 运算;而vb.net 对于一些表达式可先行判断,并不见得会执行全部的运算。例如vb.net 在执行or 运算时,只要运算到true 值后即停止后续的运算,并直接传回true。这是因为目前的条件传回true 已经成事实,后面的结果并不会影响整个结果。这样一来就可以少执行一些运算,所以能有效提升执行的效率;这个新的功能我们称为快捷方式回路(short-curuited)。

or
or 运算子则是用在多个条件中,只要有一个条件成立时,就执行某段程序代码时使用。例如下列程序只要使用者小于6 岁或是大于60 岁,就将门票售价打五折;其余年龄则打八折:

<html>
<%
dim shtage as short=cshort(request("age"))
dim sngdiscount as single
const cnticketprice=200
if shtage<6 or shtage>60 then
sngdiscount=0.5
else
sngdiscount=0.8
end if
response.write("您的票价为:" & cstr(cnticketprice * sngdiscount) & "
元")
%>
</html>

not
not 值可以将布尔值做倒置,也就是将false 变成true,将true 变成false。例如下列程序只
要使用者的年龄不小于18,即印出欢迎语:

<html>
<%
dim shtage as short=cshort(request("age"))
if not shtage<18 then
response.write("欢迎您的浏览")
else
response.write("本站不接受未成年之青少年浏览, 请离开")
end if
%>
</html>

select case 叙述
select case 和if...then...elseif 的结构很相似,都是让程序检查叙述值后,再决定所要执行的程序代码。不过select case 执行起来比if...then...elseif 更有效率,这是因为select casse 只需将要做比较的变量取出一次。我们来看看select case 的语法:

select case 测试叙述
case 条件叙述一
程序区块一
case 条件叙述二
程序区块二
case 条件叙述n
程序区块n
[case else]
end select


其中测试叙述可以是任何变量、数值或字符串,vb.net 将叙述直接取出或运算后,再将结果和case 后面的条件叙述所执行完的结果做比较。和if...then...elseif 一样,倘若测试叙述的结果和条件叙述的结果相等,则执行相对应的程序区块,执行完毕后即跳出架构外继续程序的执行,其中case else 也可以省略。我们来看看下列这个范例:

<html>
<%
dim strusername as string=cstr(request("username"))
dim strmsg as string
select case strusername
case "administrator"
strmsg="hello, administrator."
case "user"
strmsg="hello, user."
case else
strmsg="hello, guest."
end select
response.write(strmsg)
%>
</html>

如果上述程序以if...then...elseif 来写也可以,但是select case 的结构比较易于阅读,执行起来效率也好多了。

测试数值的范围
select case 的架构用于范围的测试非常理想,例如下列范例:


<html>
<%
dim shtans as short=cshort(request("ans"))
dim shtgrade as short
select case shtans
case 1 '等于1
shtgrad=1
case 2 to 4 '2 到4(包含)
shtgrad=2
case 5,6 '5 以及6
shtgrad=3
case is >= 7 '大于等于七
shtgrad=4
end select
response.write("您得到的积分为:" & cstr(shtgrad))
%>
</html>

 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:循环
· 下一篇:资料的修饰
· 用Visual C#动态生成组件,请看!(二)
· 从ASP迁移至ASP+ --处理会话变量(Session Variables) 
· ASP.NET 入门的五个步骤
· 数据系结属性--基本数据系结
· ASP.NET强大的性能(二)


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077