- C# 从入门到项目实践(超值版)
- 聚慕课教育研发中心
- 2745字
- 2021-03-24 02:36:16
5.2 分支选择语句
分支选择语句可以根据条件是否满足或者根据表达式的值,来控制代码的执行流程。C#有两种控制代码分支的结构,分别是if语句和switch语句。
5.2.1 if条件语句
一个if语句的条件可以是布尔变量,也可以是表达式,但如果是表达式,则得到的结果必须是布尔值。
1. 单选择if语句
if语句的语法格式如下:
如果布尔表达式为true,则if语句内的代码块将被执行。如果布尔表达式为false,则if语句结束后的第一组代码将被执行。
【例5-2】编写程序,使用if语句,判断一个变量是否符合条件。
(1)在Visual Studio 2017中,新建名称为“Project2”的文件。
(2)在代码编辑区域输入以下代码。
【程序分析】本例演示if语句的用法。在代码中,首先定义一个int类型的变量a,并赋值为10;然后使用if语句对变量a进行判断,如果变量a大于20条件成立,就输出字符串“a大于20”;如果不成立就不输出该字符串,只输出a的值。本例的流程如图5-2所示。
在Visual Studio 2017中的运行结果如图5-3所示。
图5-2 if语句的流程图
图5-3 if语句
2. if…else语句
一个if语句后可以跟一个else语句。当布尔表达式为假,才会执行else后面的语句。
if…else的语法格式如下:
如果布尔表达式为true,则执行if块内的代码;如果布尔表达式为false,则执行else块内的代码。在前面的章节中讲解了条件运算符(?:),可以用来替代if…else语句。
它的一般形式如下:
<表达式> ? <resultIfTrue> : <resultIfFalse>
其中,计算表达式可得到一个布尔值,运算符的结果根据这个值来确定是<resultIfTrue>,还是<resultIfFalse>。
例如:
int a = 8; string b = (a < 10) "小于10" : "大于10";
该段代码表示,如果变量a小于10条件成立,就将字符串“小于10”赋予变量b,否则就将字符串“大于10”赋予变量b。这里需要注意冒号的使用和位置。
【例5-3】编写程序,使用if…else语句,判断一个变量的大小。
(1)在Visual Studio 2017中,新建名称为“Project3”的文件。
(2)在代码编辑区域输入以下代码。
【程序分析】本例演示if…else语句的使用。在代码中首先定义一个int类型的变量a,并赋值为50;然后对a进行判断,如果a<10,条件成立就输出字符串“a小于10”,否则就输出字符串“a大于10”;最后输出a的值。本例的流程如图5-4所示。
在Visual Studio 2017中的运行结果如图5-5所示。
图5-4 if…else流程图
图5-5 if…else语句
3. if…else if…else 语句
一个if语句后可跟一个可选的else if…else语句。该语句用于执行多种条件。
语法格式如下:
在使用if…else if…else语句时,需要注意以下几点。
(1)一个if后可跟零个或一个else,它必须在任何一个else if之后。
(2)一个if后可跟零个或多个else if,它们必须在else之前。
(3)if语句是自上而下执行,只要有一个条件成立就不会去判断其他任何条件。
其中,else if语句的个数不受限制,但是如果else if语句的个数较多,则应该考虑另一种分支结构:switch语句。
【例5-4】编写程序,输入一位同学的成绩,并输出相应的评价。
(1)在Visual Studio 2017中,新建名称为“Project4”的文件。
(2)在代码编辑区域输入以下代码。
【程序分析】本例演示了if…else if…else语句的使用。在代码中首先定义一个string类型的变量s;然后输入一个学生的成绩赋给该变量,并通过Parse()方法,将变量s转换成int类型的数据赋给变量a;最后对a进行判断,输出对应的评价语句。本例的流程如图5-6所示。
在Visual Studio 2017中的运行结果如图5-7所示。
图5-6 代码流程图
图5-7 if…else if…else语句
4. 嵌套if语句
在C#中,嵌套if…else语句是合法的,这意味着用户可以在一个if或else if语句内使用另一个if或else if语句。
C#中嵌套if语句的语法格式如下:
也可以嵌套else if…else语句,该方式与嵌套if语句相似。
【例5-5】编写程序,使用嵌套的if语句,计算出打折后的机票价格。
(1)在Visual Studio 2017中,新建名称为“Project5”的文件。
(2)在代码编辑区域输入以下代码。
【程序分析】本例演示了嵌套if语句的使用。在代码中,定义了三个变量money、month、type,分别用于表示机票价格、月份和飞机仓位;然后通过嵌套的if语句,计算出某个月份预订机票的打折价格。本例的流程如图5-8所示。
在Visual Studio 2017中的运行结果如图5-9所示。
图5-8 嵌套if语句流程图
图5-9 嵌套if语句
5.2.2 switch语句
一个switch语句允许测试一个变量等于多个值时的情况。每个值称为一个case,且被测试的变量会对每个case进行检查。
switch语句的语法格式如下:
在switch语句的开始,首先计算控制表达式的值,如果该值符合某个case语句中指定的“测试值”,就跳转到该case内的语句执行;当控制表达式的值没有任何匹配的“测试值”时,则执行default内的代码,执行完后退出switch语句,继续执行下面的代码。其中,测试值只能是某个整数类型或字符类型,并且各个测试值不能相同。default是可选的,没有default语句时,如果控制表达式的值不等于任何“测试值”,程序一样会退出switch而执行后面的代码。
【例5-6】编写程序,使用switch语句完成一个简单的计算器程序,用户输入两个数字,用四则运算符计算结果并显示在控制台上。
(1)在Visual Studio 2017中,新建名称为“Project6”的文件。
(2)在代码编辑区域输入以下代码。
【程序分析】本例演示了switch语句的使用。在代码中首先定义三个变量x、y、z。其中,x和y用来接收用户输入的两个数字,变量z用来接收运算类型。利用switch语句,判断用户输入的运算符号,在控制台显示相应的运算成果。其中,default用来显示如果运算符号输入有误的相关信息。本例的流程如图5-10所示。
在Visual Studio 2017中的运行结果如图5-11所示。
图5-10 switch流程图
图5-11 switch语句
用户可以把一个switch语句嵌套在另一个switch语句内。即使内部和外部switch的case常量包含共同的值,也是没有矛盾的。
例如:
【例5-7】编写程序,使用嵌套的switch语句,输出case后面的内容。
(1)在Visual Studio 2017中,新建名称为“Project7”的文件。
(2)在代码编辑区域输入以下代码。
【程序分析】本例演示了嵌套的switch语句。在代码中,首先定义两个char型的变量c1和c2,并分别赋值为'A'和'B';然后通过switch语句对c1进行判断,当遇到符合的case时,就输出字符串“这是外部switch的一部分”;接着又嵌套了一个switch语句,并对c2进行判断,当遇到符合的case时,就输出字符串“这是内部switch的一部分”;最后再输出c1和c2的值。
在Visual Studio 2017中的运行结果如图5-12所示。
图5-12 switch语句的嵌套
switch语句是非常有用的,但是在使用时必须谨慎。所写的任何switch语句都必须遵循以下规则。
(1)只能针对基本数据类型使用switch,这些类型包括int和string等。对于其他类型,则必须使用if语句。
(2)case标签必须是常量表达式,如37或者“37”。如果需要在运行时计算case标签的值,必须使用if语句。
(3)case标签必须是唯一性的表达式;也就是说,不允许两个case具有相同的值。
(4)可以连续写下一系列case标签(中间不能间插额外的语句),从而指定自己希望在多种情况下都运行相同的语句。如果像这样写,那么最后一个case标签之后的代码将适用于所有case。然而,假如一个标签关联了一条或多条语句,又没有使用break语句跳出,那么执行就不能贯穿到后续的标签,而且编译器会报告一个错误。
例如:
注意:由于C#存在不准贯穿的规则,所以需要一条跳转语句来阻止贯穿,而break语句则是最常见的方式,但是也可以用一条return语句或者一条throw语句来替代它。