首页 > 代码库 > 控制语句

控制语句

编码中最常用的控制语句分为三种:顺序结构、选择结构和循环结构。

其中顺序结构的控制语句是计算机执行的一系列有序指令的集合,顺序是自上而下逐语句执行。如

void Main(){    Console.WriteLine ("欢迎进入我的计算器程序");        Console.WriteLine ("请输入第一个数字");    var numA = Convert.ToInt32(Console.ReadLine());        Console.WriteLine ("请输入第二个数字");    var numB = Convert.ToInt32(Console.ReadLine());        Console.WriteLine ("{0} + {1} = {2}", numA, numB, numA + numB);}

运行后结果显示(使用LINQ Pad执行)

技术分享

选择结构是用于进行条件判断,不同的结果将导致计算机执行不同的代码块。

最简单的选择结构是if,用于判断是否需要执行某个代码段的(条件成立时执行,条件不成立时则跳过),如

void Main(){    Console.WriteLine ("请输入考试成绩:");        var score = Convert.ToInt32(Console.ReadLine());        if (score>=60)    {        Console.WriteLine ("你的考试成绩是:{0},恭喜通过考试!", score);            }        Console.WriteLine ("程序结束");}

只有考试成绩>=60的情况下,控制台次才会输出恭喜通过的信息,

但是无论通过与否,都会执行最终程序结束的语句,因为最后一行并没有被包含在if代码块的大括号中{}。

另外,控制语句if页经常用于做输入参数的判断(防御式编码),来保证输入参数的有效性与合法性,如

void Main(){    Console.WriteLine ("请输入考试成绩:");            int score = 0;     if(int.TryParse(Console.ReadLine(),out score))    {        if (score>=60)        {            Console.WriteLine ("你的考试成绩是:{0},恭喜通过考试!", score);                }    }        Console.WriteLine ("程序结束");}

在这段代码中,int.TryParse(Console.ReadLine(),out score)用于尝试将用户输入的文本转换成整型。

如果转换成功,条件成立,返回True;否则条件不成立,返回False

这种情况下,可以防止用户输入非法的数字文本。

 

另一种选择结构是if-else,除了可以执行条件成立时的代码块,也定义了当条件不成立时需要执行的代码块。

将刚才的代码改造一下,就可以在控制台中,显示更为详细的提示,从而提高用户的体验,如

void Main(){    Console.WriteLine ("请输入考试成绩:");        var input = Console.ReadLine();    int score = 0;     if(int.TryParse(input, out score))    {        if (score>=60)        {            Console.WriteLine ("你的考试成绩是:{0},恭喜通过考试!", score);                }else        {            Console.WriteLine ("你的考试成绩是:{0},请再接再厉!", score);                }    }else    {        Console.WriteLine ("{0} 的格式不正确,请输入合法的整数!",input);    }        Console.WriteLine ("程序结束");}

这种情况下,如果用户输入的文本不是一个有效的整数,那么显示的结果为

技术分享

如果用户输入的成绩<60,输出的结果是

技术分享

在出现if-else的时候,我们往往可以使用一种特殊的运算符(三元运算符 或 三目运算符)来替换,如

Console.WriteLine(score >= 60 ? "你的考试成绩是:{0},恭喜通过考试!" : "你的考试成绩是:{0},请再接再厉!", score);

其中条件成立时执行考试通过的语句,条件不成立时执行最后的语句。

然而,在现实开发中,判断条件不仅仅是简单的对错,可能会有多种情况的选择,这时,我们可能会使用if-elseif-else的多分支选择结构

static void Main(){    Console.WriteLine("请输入考试成绩:");    var input = Console.ReadLine();    int score;    if (int.TryParse(input, out score))    {        if (score >= 85)        {            Console.WriteLine("你的考试成绩是:{0},优秀!", score);        }        else if (score < 85 && score >= 60)        {            Console.WriteLine("你的考试成绩是:{0},考试通过!", score);        }        else        {            Console.WriteLine("你的考试成绩是:{0},请再接再厉!", score);        }    }    else    {        Console.WriteLine("{0} 的格式不正确,请输入合法的整数!", input);    }    Console.WriteLine("程序结束");}

如果出现等值判断时,往往会再过个条件中选择其中一个,那么,还可能使用switch语句来实现,但是一定要注意:

switch并不能替代if-else结构,他们处理的业务是不同的。

switch语句的执行效率要略高于if-else,但是switch的判断条件有一定的限制,比如只能是整数、字符串、布尔、字符或者枚举等

比如使用switch判断用户的输入来选择具体的部门

void Main(){    Console.WriteLine ("请选择部门(输入1-3的数字):");    int dep = Convert.ToInt32(Console.ReadLine());    switch (dep)    {        case 1: Console.WriteLine ("你选择了 研发部"); break;        case 2: Console.WriteLine ("你选择了 市场部"); break;        case 3: Console.WriteLine ("你选择了 财务部"); break;        default: Console.WriteLine ("输入错误!"); break;    }}

在这段代码中,计算机根据输入的数字1-3,选择不同的case分支语句执行,break用于结束switch代码块(这很重要,但不是必须的)

比如,在某些情况下,我们确实需要在多个分支语句中执行相同的代码,比如判断工作日和非工作日,代码如下

static void Main(){    var dow = DateTime.Now.DayOfWeek;    Console.WriteLine("今天是:{0}", dow);    switch (dow)    {        case DayOfWeek.Monday:        case DayOfWeek.Tuesday:        case DayOfWeek.Wednesday:        case DayOfWeek.Thursday:        case DayOfWeek.Friday:            Console.WriteLine("今天是工作日");            break;        default:            Console.WriteLine("今天是非工作日志");            break;    }}

这里,通过多个case分支,执行相同的工作日志代码,可以减少冗余。

最后,在更为复杂的业务逻辑中,我们可以使用分支语句的嵌套来实现(要求思路清楚,可以使用伪代码辅助分析)

比如,我们想计算KTV在不同时间段的计费价格,如下所示

 
 周末工作日周末工作日周末工作日
00:00-08:00504040303020
08:00-18:001008080606040
18:00-24:00120100100808060

 

 

 

 

 

编码实现:第一步,判断包间类型

void Main(){    var week = DateTime.Now.DayOfWeek;    var time = DateTime.Now.Hour;    var room = "";    int money = 0;        Console.WriteLine ("请选择包间大小(大,中,小)");    room = Console.ReadLine();        switch (room)    {        case "":            Console.WriteLine ("你选择的包间类型:大");            break;        case "":break;            Console.WriteLine ("你选择的包间类型:大");            break;        case "":break;            Console.WriteLine ("你选择的包间类型:大");            break;        default:             Console.WriteLine ("输入的包间规格不符");            break;                }}

编码实现:第二步,判断是否是工作日

void Main(){    var week = DateTime.Now.DayOfWeek;    var time = DateTime.Now.Hour;    var room = "";    int money = 0;        Console.WriteLine ("请选择包间大小(大,中,小)");    room = Console.ReadLine();        switch (room)    {        case "":            Console.WriteLine ("你选择的包间类型:大");            switch (week)            {                case DayOfWeek.Sunday:                case DayOfWeek.Saturday:                    Console.WriteLine ("今天是周末");                    break;                default:                    Console.WriteLine ("今天是工作日");                    break;            }            break;        case "":            Console.WriteLine ("你选择的包间类型:中");            switch (week)            {                case DayOfWeek.Sunday:                case DayOfWeek.Saturday:                    Console.WriteLine ("今天是周末");                    break;                default:                    Console.WriteLine ("今天是工作日");                    break;            }            break;        case "":            Console.WriteLine ("你选择的包间类型:小");            switch (week)            {                case DayOfWeek.Sunday:                case DayOfWeek.Saturday:                    Console.WriteLine ("今天是周末");                    break;                default:                    Console.WriteLine ("今天是工作日");                    break;            }            break;        default:             Console.WriteLine ("输入的包间规格不符");            break;                }}

编码实现:第三步,判断当前时间段,整合代码如下:

void Main(){    var week = DateTime.Now.DayOfWeek;    var time = DateTime.Now.Hour;    var room = "";    int money = 0;        Console.WriteLine ("请选择包间大小(大,中,小)");    room = Console.ReadLine();        switch (room)    {        case "":            switch (week)            {                case DayOfWeek.Sunday:                case DayOfWeek.Saturday:                    if (time>=0 && time<8)                    {                        money = 50;                    }else if(time>=8 && time<18){                        money = 100;                    }else{                        money = 120;                    }                    break;                default:                    if (time>=0 && time<8)                    {                        money = 40;                    }else if(time>=8 && time<18){                        money = 80;                    }else{                        money = 100;                    }                    break;            }            break;        case "":            switch (week)            {                case DayOfWeek.Sunday:                case DayOfWeek.Saturday:                    if (time>=0 && time<8)                    {                        money = 40;                    }else if(time>=8 && time<18){                        money = 80;                    }else{                        money = 100;                    }                    break;                default:                    if (time>=0 && time<8)                    {                        money = 30;                    }else if(time>=8 && time<18){                        money = 60;                    }else{                        money = 80;                    }                    break;            }            break;        case "":            switch (week)            {                case DayOfWeek.Sunday:                case DayOfWeek.Saturday:                    if (time>=0 && time<8)                    {                        money = 30;                    }else if(time>=8 && time<18){                        money = 60;                    }else{                        money = 80;                    }                    break;                default:                    if (time>=0 && time<8)                    {                        money =20;                    }else if(time>=8 && time<18){                        money = 40;                    }else{                        money = 60;                    }                    break;            }            break;        default:             Console.WriteLine ("输入的包间规格不符");            break;                }        Console.WriteLine ("今天是:{0}, 当前时间:{1}点,您选择的包间类型是:{2},收费:{3}",week,time,room,money);}

最终运行效果如下

技术分享

控制语句