- Visual C#(学习笔记)
- 缪勇 李新峰 付志涛编著
- 1937字
- 2020-08-28 18:11:36
2.4 流程控制语句
在程序中,经常需要转移或改变程序的执行顺序,为了实现这一目的,需要使用流程控制语句。C#语言中提供了下面几种语句用于流程控制。
条件语句:if...else,switch...case;
循环语句:while,do,for,foreach;
跳转语句:break,continue。
2.4.1 条件语句
条件语句用于根据条件判断选择所要执行的一组语句。条件语句也称为选择语句,C#中提供了if...else和switch...case语句执行条件分支的选择。
1. if语句
if语句是最常用的条件语句,它根据一个布尔表达式的结果选择执行两个不同的代码块。
C#中if语句的语法格式如下:
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0043_0001.jpg?sign=1739591105-tkcLBcaDUYpRmq0dXppGFtFoIDcw1476-0-7c15eba309366b98aceb6bf341f23849)
或者:
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0043_0002.jpg?sign=1739591105-8NshsA5lZBLYMCDyhCoHNYQ3DkGK5yvV-0-d10d7d3b622b7529ee3bfa75930e0520)
注意
在C#中,表达式的计算结果必须是布尔型。C#编译器能识别出这一类的错误。
示例1:
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0043_0003.jpg?sign=1739591105-UNteOa7cIMgAvFaMWWzonvyBN4cVEbyx-0-a6e3ef18d927725d7fca2895a3ae9240)
示例2:
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0043_0004.jpg?sign=1739591105-E3PYSh9RcCYqkKSIGM5DhoiBjwVPL2bw-0-0d639790d8b0d9b9dcf7ddf9102b3c47)
如果程序中逻辑判断比较复杂,可以使用条件判断嵌套语句。格式如下:
if (条件表达式) { if(条件表达式) { 语句块; } else { 语句块; } ……; } else { if(条件表达式) { 语句块; } else { 语句块; } ……; }
注意 在嵌套的if语句中,else子句属于最后一个没有对应的else的if。
例如:
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0044_0002.jpg?sign=1739591105-PxL73JIGHCeuN79xqNMNdQ18Aj87undM-0-2d8d9f05de19d1e16dc471487f242ea9)
如果希望使语句2和条件if(i>5)关联,则可使用大括号,如下所示:
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0045_0001.jpg?sign=1739591105-hMhWKq1XcUfm0GdhKSPM5YWfwfeIl0fG-0-5bdaf493a1ca3cf1cbad3c9baaacf616)
2. switch...case语句
if语句每个判断只能实现两条分支,若要实现多个选择分支的功能,可以使用switch语句。
switch语句可以用来代替多重if语句。switch语句根据控制表达式的值选择一个分支语句并执行,格式如下:
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0045_0002.jpg?sign=1739591105-scZl2jSiPTCADve6Xh70w7mf0H6bJIw5-0-c496d9b9975b2ae1b13311358492f2c7)
注意
switch 语句可以有任意多个case实例,但是任何两个case语句都不能具有相同的值。且在C#中必须为每一个case块指定一个跳转语句(如break语句或goto语句),否则会出现编译器错误。
2.4.2 循环语句
循环语句可以重复运行一个或多个语句,从而实现了程序的简化。C#中提供了以下4种循环语句:
◆ while循环
◆ do循环
◆ for循环
◆ foreach循环
1. while循环
while循环根据条件,将一个语句或语句块重复执行零遍或若干遍。while循环的格式如下:
while (条件) { 语句(或语句块); }
while循环的执行过程为:
1 判断条件是否为真;
2 当条件为真时,执行一遍语句或语句块,然后转到第一步;
3 当条件为假时,while循环结束。
示例:以下while循环用于向控制台写入从1到10的累加和。
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0046_0001.jpg?sign=1739591105-goDOqCRyE5rRqVrtf8PEzymvFaSKpbR0-0-9e86422ba323c31d0dbd2f68cdbdd91b)
注意
while循环中的变量i用于控制循环的次数,所有while循环都应该在某个时候终止。
while循环中可以使用continue语句跳过当前循环并开始下一个循环,也可以使用break语句来结束循环。
示例:以下while循环中使用break语句来实现从1到10的累加和的计算。
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0046_0002.jpg?sign=1739591105-J0iBmWXkvKTjAlORlAxlAiGjgaAxGHxf-0-e42686ab57e21f866ed17aff4c4e3545)
示例:以下while循环中使用continue语句来实现计算1到100中奇数的和。
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0047_0002.jpg?sign=1739591105-czHZ5M0eVK36TQcDp8UqJV4ApiSiqQ5n-0-491a18ba55fc7f4d16f625f441a254e6)
2. do循环
do...while循环与while循环类似,不同之处在于,do...while循环即使条件为假时也会执行一次循环体中的语句,即do...while循环根据条件,将一个语句或语句块重复执行一遍或若干遍。C#中do...while循环的格式如下:
do { 语句(或语句块); }while(条件)
3. for循环
for循环要求对特定的条件进行判断后才可以执行循环,并将语句或语句块重复执行预定的次数。因此在已知循环次数的情况下,使用for循环比较方便。for循环的格式如下:
for(初始化;条件;改变控制变量) { 语句(或语句块); }
for循环的执行过程如下:
1 执行一遍初始化,为循环控制变量赋初始值;
2 判断条件是否为真;
3 如果条件为真,则执行循环中的语句或语句块,然后改变循环控制变量的值,回到第二步;
4 如果条件为假,for循环终止。
注意
for语句的初始化、条件和改变控制变量这三个部分必须使用分号分隔。初始化只在循环开始时发生一次。条件的判断发生在循环执行之前,因此 for 语句执行零遍或若干遍。
for语句中的三个部分都是可选的。如果省略条件部分,则条件默认为真,这时for循环中的语句或语句块将永远运行。例如:
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0048_0001.jpg?sign=1739591105-z29628AGFzWQWdqhL5qsOb0AnDqhY2f9-0-b0387a94c2d5112c2ad728957d2c7f55)
可根据需要在for语句中给出多个初始化语句和多个改变控制变量的语句,此时需要使用逗号来分隔不同的初始化语句和改变控制变量的语句。例如:
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0048_0002.jpg?sign=1739591105-Ex2X7iaR7Q0rDjM8VyjEp9C95n5LSTrB-0-62db8ae4d2fdbf2a277fef17e3750d1b)
4. foreach循环
foreach循环是C#中新引入的语句,一般用于遍历整个数组或集合,但不会改变数组或集合中的内容。foreach循环的格式如下:
foreach(类型 元素(变量名称)in 数组或集合) { 语句(或语句块); }
循环体为数组或集合中的每个元素执行一次。
示例:以下foreach循环实现向控制台写入数组中的内容的功能。
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0048_0003.jpg?sign=1739591105-HY4E8Ohnx2ew4HMGXUUtunbrEHQpK13U-0-c033900eb3a3d662894b09d13f6b650c)
2.4.3 跳转语句
使用跳转语句将导致立即传递程序控制。在C#语言中跳转语句使用下列关键字:
◆ break
◆ continue
◆ goto
◆ return
◆ throw
前面已经介绍过break和continue语句,这一节主要介绍goto,return和throw语句。
1. goto语句
goto语句能将程序控制直接传递给标记语句。goto语句可以用于以下两个方面:
◆ 将控制传递给特定的switch...case标签或switch语句中的默认标签;
◆ 跳出深嵌套循环。
示例:使用goto语句将控制传递给特定的switch...case标签。
一定要认真观察下面的代码哦……
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0050_0001.jpg?sign=1739591105-B0dpXDhGwdrqm4waDveBfqwzR9v3ywyM-0-ea8725c19aac3459e9e1dfab90dc526f)
下面的代码演示了使用goto跳出嵌套循环的过程。
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0051_0001.jpg?sign=1739591105-k6QscR0CPFpKRxjdRD3mjmXLkmq6Ajmv-0-769892d5b6b43c2c42cf72e27ceb14f9)
2. return语句
return语句终止它出现在其中的方法的执行并将控制返回给调用方法。它还可以返回一个可选值,如果方法为void类型,则可以省略return语句。
示例:在计算圆周长的方法CalZc()中以double的形式返回变量zc。
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0052_0001.jpg?sign=1739591105-6eVM0ABeS9APRUSLpVPosvMNPApJFs6Z-0-2dbbd99ed774877ffe6c3220e6a60dcc)
3. throw语句
throw语句用于发出在程序执行期间出现反常情况(异常)的信号,通常与try...catch或try...finally语句一起使用。当引发异常时,程序查找处理此异常的catch语句,也可以用throw语句重新引发已捕获的异常。有关throw语句的详细讲述参见第7章。