![ASP.NET程序设计教程(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/755/33643755/b_33643755.jpg)
3.5 C#程序控制结构
C#语言与其他语言一样,其控制结构有顺序结构、选择结构和循环结构三种。顺序结构是由从上到下的语句逐条执行;选择结构则类似路上的行人走在三岔路口,需要做出选择的程序结构;而循环结构则在满足条件的情况下周而复始地循环执行某段语句。
3.5.1 顺序结构
顺序结构是程序中使用最多的结构方式,也是程序中大量代码存在的主要形式。
在顺序结构中程序始终按照语句排列顺序依次逐条地执行。顺序结构的代码示例如表3-19所示。
表3-19 顺序结构实例
![](https://epubservercos.yuewen.com/922581/17977546408668006/epubprivate/OEBPS/Images/47_05.jpg?sign=1738927670-gRzODe1dfTy9mp8uzHzIU029hvphbHxz-0-d69cd39eb191786da2db54f819e64ce5)
3.5.2 选择结构
所谓选择结构,是指在程序运行时,根据不同的条件转向不同的语句执行,使得程序可以跳过某些语句不执行、转而执行某些特定的语句。
选择结构主要有if与switch两种。其中,if主要用于简单选择判断,共有四种形式;switch则主要用于多分支选择判断。
1.if语句
if语句是选择结构中使用频率最高的语句,其表现形式共有四种。
(1)格式1
![](https://epubservercos.yuewen.com/922581/17977546408668006/epubprivate/OEBPS/Images/48_01.jpg?sign=1738927670-jbaVKC9PONq9p6rKLlKYfGa2w0R6Itrz-0-bdb119ba9c8c77631f4595ab30a0b7b8)
执行时先判断“条件表达式”的值,如果为true,则执行“语句”,否则什么也不做。“语句”部分既可以是单独的一条语句,也可以是用{}括起来的多条语句组成的复合语句。
(2)格式2
![](https://epubservercos.yuewen.com/922581/17977546408668006/epubprivate/OEBPS/Images/48_02.jpg?sign=1738927670-vnVtIMqfwqkkh0mo3XMGg2UqWyJQo5ht-0-13347db96fb3a3ace0870fc122e6aa0f)
执行时先判断“条件表达式”的值,如果为true,则执行语句1,否则执行语句2。语句1和语句2即可以是一条语句,也可以是多条语句组成的复合语句。
(3)格式3
![](https://epubservercos.yuewen.com/922581/17977546408668006/epubprivate/OEBPS/Images/48_03.jpg?sign=1738927670-riEk3OT23yIlFP5hRt0K1p7QohP3WoLI-0-9f0a1b0c00043a3c5ae44771667e9f1d)
执行时先判断条件表达式1的值,如果是true,则执行语句1;否则就判断表达式2的值,如果是true,就执行语句2;否则就判断条件表达式3……以此类推,继续执行,直到最后一个else为止,如果前面的条件都不满足,就执行语句n。语句既可以是一条语句,也可以是多条语句组成的复合语句。
(4)格式4(多层嵌套if语句)
![](https://epubservercos.yuewen.com/922581/17977546408668006/epubprivate/OEBPS/Images/48_04.jpg?sign=1738927670-xCXF29YyyjAsZsJR6NL7u0m50hSrjn84-0-6af719838647877b3b0b1a8a91e4807a)
执行时先判断条件表达式1的值,如果是true,则接着判断条件表达式2的值,如果是true,就执行语句2,否则就执行语句3;如果条件表达式1的值是false,就执行语句n。
在多层嵌套语句的编写过程要特别注意大括号的一一对应,有几个“{”就要有几个“}”,每个else都和距它最近的if相匹配。
【操作实例3-8】 编写一个简单的登录程序。
新建网站文件,在设计视图中输入三行文字,分别是用户登录、用户名、密码,在用户名和密码后面分别添加一个文本框,名称是Text1Box1、Text1Box2,继续添加两个按钮,并将其Text属性分别改为“确定”“取消”,双击“确定”按钮后添加如表3-20所示代码。
表3-20 if结构实例
![](https://epubservercos.yuewen.com/922581/17977546408668006/epubprivate/OEBPS/Images/49_01.jpg?sign=1738927670-il2RNGkv43sFmXLBBjiQZGAQwf1Xlj7s-0-83a5ab64588b31ae8a15c4e3d7561af5)
程序运行结果如图3-6所示。
![](https://epubservercos.yuewen.com/922581/17977546408668006/epubprivate/OEBPS/Images/49_02.jpg?sign=1738927670-8sNBO14miA8ArA3GyqUbJxHKUqfwt9cP-0-d2f529b5af2c8b689bc0e565c60faa42)
图3-6 if结构实例运行结果
2.switch
C#中switch语句多用于多路分支选择控制结构。当需要从多个备选项中选择一个的时候,使用该语句。该语句格式如下。
![](https://epubservercos.yuewen.com/922581/17977546408668006/epubprivate/OEBPS/Images/49_03.jpg?sign=1738927670-D32O5w5kMoVc7Zw7mygVlLVJUvWL5WNr-0-b0914d4357fb813954a4789ed6511041)
switch语句在执行时首先计算表达式的值,然后与case语句中的各个常量表达式的值进行比较,如果相同,则执行该case后面的语句,直到执行break语句来结束switch语句。如果表达式的值与所有常量表达式的值均不匹配,则执行default语句块。其中default部分是可选的。break语句的作用是在执行完一个case分支后,使程序跳出switch语句,并继续执行switch后面的语句。C#规定:每个分支必须以break、return、goto或throw语句来结束,而且语句中的任何代码不得改变表达式的值,否则编译无法通过。
表达式的类型可以是整数类型(包括枚举类型和字符类型)和字符串类型常量,而常量表达式类型必须与表达式类型相同,或者能隐式地转换为表达式类型。表达式n的值必须是常量,且各case子句中的值应是不同的。如果多个case语句都执行同一个分支,则可以把多个case语句的表达式合并。例如:
![](https://epubservercos.yuewen.com/922581/17977546408668006/epubprivate/OEBPS/Images/50_01.jpg?sign=1738927670-bdS6N8MNEOIFLvh9bPjkmL3KfmDQSMcK-0-0cda9c8f8575f5f896fb01733e1def74)
一般情况下,switch语句总是可以和if语句互换。如果条件过多或者离散分布,建议使用switch语句,switch语句可以很清晰地把逻辑关系表达清楚。如果标签数量较少,使用if语句会使程序比较简洁。表3-20中if语句代码就可以改写为下面的switch语句代码,如表3-21所示。
表3-21 switch结构实例
![](https://epubservercos.yuewen.com/922581/17977546408668006/epubprivate/OEBPS/Images/50_02.jpg?sign=1738927670-WzqIE6seXQ9HSG0hYQhE7bUXnjYtrcEo-0-d135d4bbe3699891d167be685ce73e1a)
3.5.3 循环结构
循环结构的作用是反复执行一段代码,直到满足条件跳出循环为止。它共有以下四种格式。
1.格式1
![](https://epubservercos.yuewen.com/922581/17977546408668006/epubprivate/OEBPS/Images/50_03.jpg?sign=1738927670-CNOV4a4xKwYk0D4ktLQj884jSyMbmP9p-0-7d33f835d0255d4a46b2a959cb02b683)
语句既可以是一条语句,也可以是什么也没有的空语句或由多条语句组成的复合语句,条件表达式作为循环的控制条件。执行过程是:首先判断条件表达式,如果条件表达式的值为true,那么就执行语句;再次判断条件表达式,直到条件表达式的值为false,则退出循环。因为该循环要先进行判断,所以while循环的执行次数将会是0次或者多次。注意,在语句中要写明循环的终止条件,以免造成死循环。
2.格式2
![](https://epubservercos.yuewen.com/922581/17977546408668006/epubprivate/OEBPS/Images/51_01.jpg?sign=1738927670-sElcz4tIF12BuaRmKOeKyhva4S0KKypd-0-a7bc454e831a870f95a3249cfdbf7bc9)
执行过程是:首先执行语句,然后判断条件表达式,如果条件表达式的值为true,那么就再次执行语句;再次判断条件表达式,直到条件表达式的值为false,则退出循环。与while语句不同的是,do…while语句先执行后判断,所以do…while语句至少执行1次。
3.格式3
![](https://epubservercos.yuewen.com/922581/17977546408668006/epubprivate/OEBPS/Images/51_02.jpg?sign=1738927670-srPvuWXrVqF9RWbE809WRYWgqnGE7CYM-0-653679c618837b67af75bac72cfd1d37)
执行时先执行初始化表达式1,然后判断条件表达式2,如果条件表达式2的值为true,那么就执行语句;接着执行迭代表达式3,并返回重新判断条件表达式2,如果为true,再次执行语句,并执行迭代表达式3,重复执行,直至条件表达式2的值是false,结束for语句的执行。
以上三个表达式都是可选的,并且各个表达式可以有一个或多个。当省略某个表达式时,表达式后面的分号不能省略。for的使用示例如下。
![](https://epubservercos.yuewen.com/922581/17977546408668006/epubprivate/OEBPS/Images/51_03.jpg?sign=1738927670-SXu2Fccra4c4i9g08v70EsP1z80Aq4GF-0-88bcd5e7016e26761bfc345e10974531)
4.格式4
![](https://epubservercos.yuewen.com/922581/17977546408668006/epubprivate/OEBPS/Images/51_04.jpg?sign=1738927670-sOHOD6nHY35QIq3Nb6FZ64CuNUiwkBAB-0-cbe41210625ddd200c7b67594e1953a7)
该语句用于遍历集合中的各个元素,并让集合中的每一个元素都执行循环语句。其中,变量会依次代表“集合”中的每一个元素。如果不知道一个集合中每个项目的类型是什么,完全可以定义一个object类型的临时变量来表示。in关键字后面指明需要操作的集合,且集合必须是可枚举的,不能为空。语句的内容不能改变集合中的元素。
【操作实例3-9】 计算1~100的和,程序代码如表3-22所示。
表3-22 用While计算1~100的和
![](https://epubservercos.yuewen.com/922581/17977546408668006/epubprivate/OEBPS/Images/51_05.jpg?sign=1738927670-cItmmxyfOZBBmHVHohupsyplPDxqRqVz-0-3b2df6fd23547ecbeac1356288acd4a4)
程序运行结果如图3-7所示。
该程序利用while循环计算1~100的和,并在屏幕输出结果。
![](https://epubservercos.yuewen.com/922581/17977546408668006/epubprivate/OEBPS/Images/52_01.jpg?sign=1738927670-X4beYTlu9wdfg7pZXmoCt75wpTegDM1s-0-b5d2109de74fc6fc5c231c87c5065003)
图3-7 while循环实例运行效果