C#从入门到精通(第4版)
上QQ阅读APP看书,第一时间看更新

6.1 条件判断语句

条件判断语句用于根据某个表达式的值从若干条给定语句中选择一个来执行。条件判断语句包括if语句和switch语句两种,下面对这两种条件判断语句进行详细讲解。

条件判断语句执行过程就好像在商场买东西时,是拿现金还是刷卡。如果刷卡,是用信用卡,还是银行卡,它是对事物的一个选择过程。

6.1.1 if语句

视频讲解:光盘\TM\lx\6\01 if语句.mp4

使用if条件语句,可选择是否要执行紧跟在条件之后的那个语句。关键字if之后是作为条件的“布尔表达式”,如果该表达式返回的结果为true,则执行其后的语句;若为false,则不执行if条件之后的语句。if条件语句可分为简单的if条件语句、if…else语句和if…else if多分支语句。

1.简单的if条件语句

语法如下:

        if(布尔表达式)
        {
            语句序列
        }

布尔表达式:必要参数,表示它最后返回的结果必须是一个布尔值。它可以是一个单纯的布尔变量或常量,也可以是使用关系或布尔运算符的表达式。

语句序列:可选参数。可以是一条或多条语句,当表达式的值为true时执行这些语句。若语句块中仅有一条语句,则可以省略条件语句中的“{ }”。

【例6.1】使用if语句判断变量i是否大于927,如果返回值为true,则输出字符串,代码如下。

        int i=928;                                         //声明一个int类型变量i
        if (i>927)                                         //调用if语句判断i是否大于927
        {
            Console.WriteLine("i大于927");
        }

说明 虽然if后面的复合语句块只有一条语句,省略“{ }”并无语法错误,但为了增强程序的可读性最好不要省略。

简单的if条件语句的执行过程如图6.1所示。

2.if...else语句

if...else语句是条件语句中最常用的一种形式,它会针对某种条件有选择地作出处理。通常表现为“如果满足某种条件,就进行某种处理,否则就进行另一种处理”。

语法如下:

        if(布尔表达式)
        {
            语句序列
        }
        else
        {
            语句序列
        }

if后面()内的表达式的值必须是bool型的。如果表达式的值为true,则执行紧跟if语句的复合语句;如果表达式的值为false,则执行else后面的复合语句。if...else语句的执行过程如图6.2所示。

图6.1 if条件语句的执行过程

图6.2 if...else语句的执行过程

技巧 对于if…else语句可以使用三元条件运算符对语句进行简化,如下面的代码:

              if(a > 0)
                b = a;
              else
                b = -a;

可以简写成:

              b = a > 0? a:-a;

上段代码为求绝对值的语句,如果a > 0,就把a的值赋值给变量b,否则将-a赋值给变量b。也就是问号“? ”前面的表达式为真,则将问号与冒号之间的表达式的计算结果赋值给变量b,否则将冒号后面的表达式的计算结果赋值给变量b。使用三元运算符的好处是可以使代码简洁,并且有一个返回值。

【例6.2】创建一个控制台应用程序,声明一个int类型的变量i,将其初始化为927。然后通过if…else语句判断这个i值是否大于927,如果大于则输出“i大于927”,否则执行else子句,输出“i不大于927”,代码如下。(实例位置:光盘\TM\sl\6\1)

        static void Main(string[] args)
        {
            int i=927;                                         //声明一个int类型变量i
            if (i>927)                                         //调用if语句判断i是否大于927
            {
              Console.WriteLine("i大于927");                    //如果大于927则输出“i大于927”
            }
            eIse                                               //否则
            {
              Console.WriteLine("i不大于927");                  //输出“i不大于927”
            }
            Console.ReadLine();
        }

程序的运行结果为“i不大于927”。

闯关训练:使用if...else语句实现一个报销业务花销的程序,具体实现时,判断支出是否为业务花销,如果是业务花销,则输出“正常报销!”;否则,如果不是业务花销,则输出“不符合规定报销”。

3.if...else if多分支语句

if...else if多分支语句用于针对某一事件的多种情况进行处理。通常表现为“如果满足某种条件,就进行某种处理,否则如果满足另一种条件则执行另一种处理”。

语法如下:

        if(条件表达式1){
        语句序列1
        }
        else if(条件表达式2){
          语句序列2
        }
        …
        else if(条件表达式n){
            语句序列n
        }

条件表达式1~条件表达式n:必要参数。可以由多个表达式组成,但最后返回的结果一定要为bool类型。

语句序列:可以是一条或多条语句,当条件表达式1的值为true时,执行语句序列1;当条件表达式2的值为true时,执行语句序列2,依此类推。当省略任意一组语句序列时,可以保留其外面的“{ }”,也可以将“{ }”替换为“; ”。

if...else if多分支语句的执行过程如图6.3所示。

图6.3 if...else if多分支语句执行过程

【例6.3】创建一个控制台应用程序,使用if...else if多分支语句实现根据用户输入的年龄,输出相应的字符串,代码如下。(实例位置:光盘\TM\sl\6\2)

        static void Main(string[] args)
        {
            const int i=18;                         //声明一个int类型的常量i,值为18
            const int j=30;                         //声明一个int类型的常量j,值为30
            const int k=50;                         //声明一个int类型的常量k,值为50
            int YouAge=0;                           //声明一个int类型的变量YouAge,值为0
            Console.WriteLine("请输入您的年龄:");
            YouAge=int.Parse(Console.ReadLine());   //获取用户输入的数据
            if (YouAge<=i)                          //调用if语句判断输入的数据是否小于等于18
            {
              //如果小于等于18则输出提示信息
              Console.WriteLine("您的年龄还小,要努力奋斗哦!");
            }
            else if (YouAge>i&&YouAge<=j)           //判断是否大于18岁小于30岁
            {
              //如果输入的年龄大于18岁并且小于30岁则输出提示信息
              Console.WriteLine("您现在的阶段正是努力奋斗的黄金阶段!");
            }
            else if (YouAge>j&&YouAge<=k)          //判断输入的年龄是否大于30岁小于等于50岁
            {
              //如果输入的年龄大于30岁而小于等于50岁则输出提示信息
              Console.WriteLine("您现在的阶段正是人生的黄金阶段!");
            }
            else
            {
              Console.WriteLine("最美不过夕阳红!");
            }
            Console.ReadLine();
        }

程序的运行结果如图6.4所示。

图6.4 if...else if多分支语句的使用

说明 在if语句中可以使用return语句,用于退出if语句所在的类的方法。

6.1.2 switch多分支语句

视频讲解:光盘\TM\lx\6\02 switch多分支语句.mp4

switch语句是多分支条件判断语句,它根据表达式的值使程序从多个分支中选择一个用于执行的分支。switch语句的基本格式如下。

        switch(【表达式】)
        {
            case  【常量表达式】:【语句块】
            break;
            case  【常量表达式】:【语句块】
            break;
            …
            case  【常量表达式】:【语句块】
            default:【语句块】
            break;
        }

switch关键字后面的括号()中是条件表达式,大括号{ }中的程序代码是由多个case子句组成的。每个case关键字后面都有语句块,这些语句块都是switch语句可能执行的语句块。如果符合条件值,则case下的语句块就会被执行,语句块执行完毕后,紧接着会执行break语句,使程序跳出switch语句。在switch语句中,【表达式】的类型必须是sbyte、byte、short、ushort、int、uint、long、ulong、char、string或者枚举类型中的一种。【常量表达式】的值必须是与【表达式】的类型兼容的常量,并且在一个switch语句中,不同case关键字后面的【常量表达式】必须不同。如果指定了相同的【常量表达式】,会导致编译时出错。一个switch语句中只能有一个default标签。在switch语句中,在case子句的语句块后经常使用break语句,其主要作用是跳出switch语句。下面通过实例演示如何使用break语句跳出switch语句。

说明 switch语句可以包括任意数目的case子句,但是任何两个case语句都不能具有相同的值。

switch语句的执行过程如图6.5所示。

图6.5 switch语句的执行过程

【例6.4】创建一个控制台应用程序,声明一个string类型变量MyStr,并初始化为“用一生下载你”,然后switch语句根据这个变量选择要执行的语句,最后使用break语句跳出switch语句,代码如下。(实例位置:光盘\TM\sl\6\3)

        static void Main(string[] args)
        {
            string MyStr="用一生下载你";              //声明一个字符串变量MyStr并初始化
            switch(MyStr)                           //调用switch语句
                    {
                        //如果MyStr的值是“用一生下载你”,执行分支1
                        case"用一生下载你": Console.WriteLine("用一生下载你"); break;
                        //如果MyStr的值是“一生所爱”,执行分支2
                        case"一生所爱": Console.WriteLine("一生所爱"); break;
                        //如果MyStr的值是“芸烨湘枫”,执行分支3
                        case"芸烨湘枫": Console.WriteLine("芸烨湘枫"); break;
                        //如果MyStr的值都不符合以上分支的内容,则执行default语句
                        defauIt: Console.WriteLine("无字符"); break;
            }
            Console.ReadLine();
        }

程序的运行结果为“用一生下载你”。

注意 在switch语句中,case语句后常量表达式的值可以为整数,但绝不可以是其他实数。例如,下面的代码就是不合法的:

              case 1.1;

在许多情况下,switch语句可以简化if…else语句,而且执行效率更高。

【例6.5】创建一个控制台应用程序,如果使用if…else语句判断用户输入的月份所在的季节,是非常繁琐的。而使用switch语句进行判断,相对就变得非常简单明了,代码如下。(实例位置:光盘\TM\sl\6\4)

        static void Main(string[] args)
        {
            Console.WriteLine("请您输入一个月份:");             //输出提示信息
            int MyMouth=int.Parse(Console.ReadLine());        //声明一个int类型变量用于获取用户输入的数据
            string MySeason;                                  //声明一个字符串变量
            switch(MyMouth)                                   //调用switch语句
            {
              case12:
              case1:
              case2:
                  MySeason="您输入的月份属于冬季!";              //如果输入的数据是1、2或者12则执行此分支
                  break;                                      //跳出switch语句
              case3:
              case4:
              case5:
                  MySeason="您输入的月份属于春季!";              //如果输入的数据是3、4或5则执行此分支
                  break;                                      //跳出switch语句
              case6:
              case7:
              case8:
                  MySeason="您输入的月份属于夏季!";              //如果输入的数据是6、7或8则执行此分支
                  break;                                      //跳出switch语句
              case9:
              case10:
              case11:
                  MySeason="您输入的月份属于秋季!";              //如果输入的数据是9、10或11则执行此分支
                  break;                                      //跳出switch语句
              //如果输入的数据不满足以上4个分支的内容则执行default语句
              defauIt:
                  MySeason = "月份输入错误!";
                  break;                                      //跳出switch语句
            }
            Console.WriteLine(MySeason);                      //输出字符串MySeason
            Console.ReadLine();
        }

程序的运行结果如图6.6所示。

图6.6 根据输入的月份输出相应的季节

互动练习:尝试使用C#制作判断用户登录身份的程序,用户的登录身份包括管理员、员工、普通用户3种,如果用户名为admin,则为管理员;如果用户名为mr,则为员工,如果用户名不是admin或者mr,则为普通用户。