单行条件语句在使用时如果遇到Then或者Else子句中需要执行较多语句,就会很不方便。因为把多条语句书写在一行内,就会给书写带来极大的不便,并且程序的易读性也降低了。为此,Visual Basic提供了块结构If语句。
1.简单块结构
块结构If语句的语法格式:
说明:
1)在块If结构中,“If<条件>Then”必须在同一行中,且后面不能有任何语句,否则它就会变成单行条件语句,和后面的Else独立开来。所以,要求[语句块1]另起一行书写,有多条语句时可以在多行中分别书写。
2)有Else子句时,[语句块2]应在关键字Else的下一行开始书写。同样,如果有条件语句,可以在多行中分别书写。[语句块2]如果与Else同行,要用复合语句符“:”分开,例如:
这样书写不如下面的代码清楚:
图4-24 缺少End If
所以,建议不要把[语句块2]与Else关键字同行。
块结构If必须以End If语句结尾,书写在最后一行。如果漏写End If语句,则系统认为出现语法错误,如图4-24所示。
程序运行时,先对<条件>进行判断,如果条件成立,则结果为真(True),执行Then后面的[语句块1],然后跳过Else块中的[语句块2],直接到达End If语句,并继续向后执行。如果条件不成立,则结果为假(False),跳过Then块中的[语句块1],直接到达Else,执行[语句块2],直到End If语句为止,并继续向后执行。
如果没有Else子句,则当条件成立时就执行[语句块1],直到End If语句,并继续向后执行;当条件不成立时,则直接到达End If语句,并继续向后执行。
单行条件语句是一种简单的选择语句,用于一些比较简单的判断和操作。而块结构条件语句则可以实现比较复杂的判断和操作。在使用块结构书写时,为了提高程序的易读性,建议养成一个好的习惯,就是每部分的语句块都向右缩进一部分,一般用键盘上的Tab键即可。这样,同一条语句的If、Else、End If关键字在同一垂直线上,当有If语句嵌套时,就很容易区分哪些是独立的If语句。书写格式对比如图4-25所示。
图4-25 书写格式对比
【例4-8】用块结构实现:输入x的值,输出其绝对值。
“三步法”分析过程请参考【例4-6】,完整代码如下。
2.嵌套块结构
当判断的条件比较复杂,有多种情况需要进行判断时,可以使用嵌套的If语句结构。If语句的嵌套是指在If或Else语句后面的语句块中又包含另外一个If语句。其语法格式有两种。
(1)第一种格式(见图4-26)
说明:
1)第2层分别是完整的If语句,它们必须完全嵌套在第1层的某个分支中,不能一部分在第1层的Then分支中,另一部分在第1层的Else分支中。
2)第2层中还可以嵌套第3层,每个分支的嵌套层数可以不同。
3)每1层的If语句都是完整语句,可以没有Else分支,但每个的End If关键字都不能省略。
(2)第2种格式(见图4-27)
图4-26 If嵌套第一种格式
图4-27 If嵌套第二种格式
说明:
1)可以有多个ElseIf子句,但是都必须在Else子句之前出现。
2)当程序运行到嵌套的If块时,先判断<条件1>,若判断结果为True,则执行Then后面的[语句块1]。如果判断的条件为False,则依次判断下面的ElseIf条件,当找到某个条件为True时,则执行该条件的Then语句块,执行完该语句块后,直接转到最后的End If语句,然后向下执行;如果没有一个ElseIf条件为True,则执行Else后面的语句块,然后从End If的后续指令继续执行。
无论哪种形式,嵌套都可以是多层的,但内层条件语句必须完全包含在外层条件语句中。对块结构条件语句,关键字If和End If要成对出现。
书写格式虽然不会影响程序的运行,但是好的书写格式可以增加易读性,帮助纠错。(www.xing528.com)
【例4-9】用块结构实现。有以下函数:
要求输入x的值,并求出y的值。
“三步法”分析过程请参考例4-7,完整代码如下。
第一种格式书写:
第二种格式书写:
【例4-10】输入一个成绩,判断其等级并输出:
按“三步法”原则分析如下。
做什么
1)用户输入成绩,所以需要一个文本框。
2)一个“评判”按钮。
3)一个用于说明文本框的标签。
怎么做
步骤描述如下:
1)读取用户输入的数据,保存到变量x中。
2)如果x小于0,则把字符串“不合理的成绩!”赋值给s,然后执行第9)步,否则向下执行。
3)如果x小于60,则把字符串“成绩等级:E”赋值给s,然后执行第9)步,否则向下执行。
4)如果x小于70,则把字符串“成绩等级:D”赋值给s,然后执行第9)步,否则向下执行。
5)如果x小于80,则把字符串“成绩等级:C”赋值给s,然后执行第9)步,否则向下执行。
6)如果x小于90,则把字符串“成绩等级:B”赋值给s,然后执行第9)步,否则向下执行。
7)如果x小于或等于100,则把字符串“成绩等级:A”赋值给s,然后执行第9)步,否则向下执行。
8)只要到达此步,x肯定是大于100了,则把字符串“不合理的成绩!”赋值给s,继续向下执行。
9)输出s。
实现
本例用第一种If嵌套块结构格式。
从上述步骤描述中可以看出它们之间的逻辑关系,在第2)步中,如果条件成立,则直接执行第9)步,然后输出等级信息。第3)~8)步都是第2)步中条件不成立的情况,那么如何控制不让计算机执行第3)~8)步的判断呢?那就需要把第3)~8)步完全放入第2)步的Else分支中。在书写时,可以先写出对第2)步进行判断的If语句,然后再向相应的块中添加代码,如下:
在上述If语句的Else分支中写入对第3)~8)步的判断。在第3)步中,如果第3)步条件成立,则直接执行第9)步,然后输出等级信息。第4)~8)步都是第3)步中条件不成立的情况,那么如何控制不让计算机执行第4)~8)步的判断呢?方法是把第4)~8)步完全放入第3)步的Else分支中。书写时,在第3)步的Else分支中完成,写法同上,如下。
其余类推,完整代码如下。
使用这种写法一定要注意缩进格式,一定要把每个语句块都向右缩进一个单位,这样可以清楚地判断出哪些If、Else、End If是对应的。下面的格式是不可取的。
使用这种块结构导致End If非常多,下面改用第二种格式:
这种块结构只需要一个End If。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。