3.5 C#程序控制结构

C#语言与其他语言一样,其控制结构有顺序结构、选择结构和循环结构三种。顺序结构是由从上到下的语句逐条执行;选择结构则类似路上的行人走在三岔路口,需要做出选择的程序结构;而循环结构则在满足条件的情况下周而复始地循环执行某段语句。

3.5.1 顺序结构

顺序结构是程序中使用最多的结构方式,也是程序中大量代码存在的主要形式。

在顺序结构中程序始终按照语句排列顺序依次逐条地执行。顺序结构的代码示例如表3-19所示。

表3-19 顺序结构实例

3.5.2 选择结构

所谓选择结构,是指在程序运行时,根据不同的条件转向不同的语句执行,使得程序可以跳过某些语句不执行、转而执行某些特定的语句。

选择结构主要有if与switch两种。其中,if主要用于简单选择判断,共有四种形式;switch则主要用于多分支选择判断。

1.if语句

if语句是选择结构中使用频率最高的语句,其表现形式共有四种。

(1)格式1

执行时先判断“条件表达式”的值,如果为true,则执行“语句”,否则什么也不做。“语句”部分既可以是单独的一条语句,也可以是用{}括起来的多条语句组成的复合语句。

(2)格式2

执行时先判断“条件表达式”的值,如果为true,则执行语句1,否则执行语句2。语句1和语句2即可以是一条语句,也可以是多条语句组成的复合语句。

(3)格式3

执行时先判断条件表达式1的值,如果是true,则执行语句1;否则就判断表达式2的值,如果是true,就执行语句2;否则就判断条件表达式3……以此类推,继续执行,直到最后一个else为止,如果前面的条件都不满足,就执行语句n。语句既可以是一条语句,也可以是多条语句组成的复合语句。

(4)格式4(多层嵌套if语句)

执行时先判断条件表达式1的值,如果是true,则接着判断条件表达式2的值,如果是true,就执行语句2,否则就执行语句3;如果条件表达式1的值是false,就执行语句n。

在多层嵌套语句的编写过程要特别注意大括号的一一对应,有几个“{”就要有几个“}”,每个else都和距它最近的if相匹配。

【操作实例3-8】 编写一个简单的登录程序。

新建网站文件,在设计视图中输入三行文字,分别是用户登录、用户名、密码,在用户名和密码后面分别添加一个文本框,名称是Text1Box1、Text1Box2,继续添加两个按钮,并将其Text属性分别改为“确定”“取消”,双击“确定”按钮后添加如表3-20所示代码。

表3-20 if结构实例

程序运行结果如图3-6所示。

图3-6 if结构实例运行结果

2.switch

C#中switch语句多用于多路分支选择控制结构。当需要从多个备选项中选择一个的时候,使用该语句。该语句格式如下。

switch语句在执行时首先计算表达式的值,然后与case语句中的各个常量表达式的值进行比较,如果相同,则执行该case后面的语句,直到执行break语句来结束switch语句。如果表达式的值与所有常量表达式的值均不匹配,则执行default语句块。其中default部分是可选的。break语句的作用是在执行完一个case分支后,使程序跳出switch语句,并继续执行switch后面的语句。C#规定:每个分支必须以break、return、goto或throw语句来结束,而且语句中的任何代码不得改变表达式的值,否则编译无法通过。

表达式的类型可以是整数类型(包括枚举类型和字符类型)和字符串类型常量,而常量表达式类型必须与表达式类型相同,或者能隐式地转换为表达式类型。表达式n的值必须是常量,且各case子句中的值应是不同的。如果多个case语句都执行同一个分支,则可以把多个case语句的表达式合并。例如:

一般情况下,switch语句总是可以和if语句互换。如果条件过多或者离散分布,建议使用switch语句,switch语句可以很清晰地把逻辑关系表达清楚。如果标签数量较少,使用if语句会使程序比较简洁。表3-20中if语句代码就可以改写为下面的switch语句代码,如表3-21所示。

表3-21 switch结构实例

3.5.3 循环结构

循环结构的作用是反复执行一段代码,直到满足条件跳出循环为止。它共有以下四种格式。

1.格式1

语句既可以是一条语句,也可以是什么也没有的空语句或由多条语句组成的复合语句,条件表达式作为循环的控制条件。执行过程是:首先判断条件表达式,如果条件表达式的值为true,那么就执行语句;再次判断条件表达式,直到条件表达式的值为false,则退出循环。因为该循环要先进行判断,所以while循环的执行次数将会是0次或者多次。注意,在语句中要写明循环的终止条件,以免造成死循环。

2.格式2

执行过程是:首先执行语句,然后判断条件表达式,如果条件表达式的值为true,那么就再次执行语句;再次判断条件表达式,直到条件表达式的值为false,则退出循环。与while语句不同的是,do…while语句先执行后判断,所以do…while语句至少执行1次。

3.格式3

执行时先执行初始化表达式1,然后判断条件表达式2,如果条件表达式2的值为true,那么就执行语句;接着执行迭代表达式3,并返回重新判断条件表达式2,如果为true,再次执行语句,并执行迭代表达式3,重复执行,直至条件表达式2的值是false,结束for语句的执行。

以上三个表达式都是可选的,并且各个表达式可以有一个或多个。当省略某个表达式时,表达式后面的分号不能省略。for的使用示例如下。

4.格式4

该语句用于遍历集合中的各个元素,并让集合中的每一个元素都执行循环语句。其中,变量会依次代表“集合”中的每一个元素。如果不知道一个集合中每个项目的类型是什么,完全可以定义一个object类型的临时变量来表示。in关键字后面指明需要操作的集合,且集合必须是可枚举的,不能为空。语句的内容不能改变集合中的元素。

【操作实例3-9】 计算1~100的和,程序代码如表3-22所示。

表3-22 用While计算1~100的和

程序运行结果如图3-7所示。

该程序利用while循环计算1~100的和,并在屏幕输出结果。

图3-7 while循环实例运行效果