![Visual C#(学习笔记)](https://wfqqreader-1252317822.image.myqcloud.com/cover/358/654358/b_654358.jpg)
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=1739626111-UmXUguFzl23ezIdB7oflgqmAJ6PrWEkO-0-732e716702493dbff39a457833a141f9)
或者:
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0043_0002.jpg?sign=1739626111-rl1Zi8mbWYv59xgCZUnnbilqSppnJ4hw-0-85982f6474ef00d3226527e5aebcc719)
注意
在C#中,表达式的计算结果必须是布尔型。C#编译器能识别出这一类的错误。
示例1:
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0043_0003.jpg?sign=1739626111-TyjGkOyeLnuZKxcQ6B76ze8RhLbCyUij-0-f73027cc400a8a98e67bcfbd9c663548)
示例2:
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0043_0004.jpg?sign=1739626111-p7IX8AEhrEHmEmf93j70EKPKFesD64mM-0-8cfdaea24b83b5b56d555fa026d9e186)
如果程序中逻辑判断比较复杂,可以使用条件判断嵌套语句。格式如下:
if (条件表达式) { if(条件表达式) { 语句块; } else { 语句块; } ……; } else { if(条件表达式) { 语句块; } else { 语句块; } ……; }
注意 在嵌套的if语句中,else子句属于最后一个没有对应的else的if。
例如:
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0044_0002.jpg?sign=1739626111-zQM4d0Fb1BKee0wX6fn1VksYpPKTiTBL-0-35b22ccf34963de6f5e77b765c8ababe)
如果希望使语句2和条件if(i>5)关联,则可使用大括号,如下所示:
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0045_0001.jpg?sign=1739626111-9HCjsd4fLcpgSvDs0WyjTVEcGHo67Y4X-0-cf007a872c4004a57514d7d195536985)
2. switch...case语句
if语句每个判断只能实现两条分支,若要实现多个选择分支的功能,可以使用switch语句。
switch语句可以用来代替多重if语句。switch语句根据控制表达式的值选择一个分支语句并执行,格式如下:
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0045_0002.jpg?sign=1739626111-N95qdGRjkS68zLvGMoqn6qETg7iyFfdH-0-9f8882ac99d04805536f6843c66f300c)
注意
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=1739626111-3iGalRnpuPsSndqgCwGBtdVST8AN5AlR-0-8aeb0c802b6dd678d18391b55c67bf20)
注意
while循环中的变量i用于控制循环的次数,所有while循环都应该在某个时候终止。
while循环中可以使用continue语句跳过当前循环并开始下一个循环,也可以使用break语句来结束循环。
示例:以下while循环中使用break语句来实现从1到10的累加和的计算。
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0046_0002.jpg?sign=1739626111-1Pd08PhPIuqWExJcCSxIpXRJL9Geuzct-0-d720241ceeccc78b5b3059796a6c8416)
示例:以下while循环中使用continue语句来实现计算1到100中奇数的和。
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0047_0002.jpg?sign=1739626111-HhpRNVhLMheCOZVKRhsjB9agFv4jGOCb-0-c9c4bed1e67e51abb8d2ef4602bb3d2f)
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=1739626111-ebwbwhIFSp6nfw3UGsNk4YRizKLC3NmN-0-60dad22705a9d4cf756daa17e180baa0)
可根据需要在for语句中给出多个初始化语句和多个改变控制变量的语句,此时需要使用逗号来分隔不同的初始化语句和改变控制变量的语句。例如:
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0048_0002.jpg?sign=1739626111-y356rZA5VDj5NZV7z4h9p8k1PeGuW6nI-0-88755add858072d5c02da8fa8052f6df)
4. foreach循环
foreach循环是C#中新引入的语句,一般用于遍历整个数组或集合,但不会改变数组或集合中的内容。foreach循环的格式如下:
foreach(类型 元素(变量名称)in 数组或集合) { 语句(或语句块); }
循环体为数组或集合中的每个元素执行一次。
示例:以下foreach循环实现向控制台写入数组中的内容的功能。
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0048_0003.jpg?sign=1739626111-VLbBKFIq30U14ng6GypTfh5gNRXbRb99-0-8818eb47816d5a15e57ecbf52acc8df6)
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=1739626111-XqOz7cWQoh1jFGC9wMBP0N4Ax9FtGT8V-0-188f9fc3d8350555d4da7c982e61295e)
下面的代码演示了使用goto跳出嵌套循环的过程。
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0051_0001.jpg?sign=1739626111-ve8fnyL73j9mKwaUDND2V3lNcKFRuNbv-0-d9f6f50425f531f6877483b3a1629c5e)
2. return语句
return语句终止它出现在其中的方法的执行并将控制返回给调用方法。它还可以返回一个可选值,如果方法为void类型,则可以省略return语句。
示例:在计算圆周长的方法CalZc()中以double的形式返回变量zc。
![](https://epubservercos.yuewen.com/0A1A90/3590270004424001/epubprivate/OEBPS/Images/figure_0052_0001.jpg?sign=1739626111-MU2khsf0O8wRe3oDzmeAji9rK0xM0Hti-0-b6240499400dae0807c0c9acf8537ea9)
3. throw语句
throw语句用于发出在程序执行期间出现反常情况(异常)的信号,通常与try...catch或try...finally语句一起使用。当引发异常时,程序查找处理此异常的catch语句,也可以用throw语句重新引发已捕获的异常。有关throw语句的详细讲述参见第7章。