码迷,mamicode.com
首页 > 其他好文 > 详细

控制语句

时间:2015-01-21 10:12:46      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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:00 50 40 40 30 30 20
08:00-18:00 100 80 80 60 60 40
18:00-24:00 120 100 100 80 80 60

 

 

 

 

 

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

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);
}

最终运行效果如下

技术分享

控制语句

标签:

原文地址:http://www.cnblogs.com/rammderek/p/4238094.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!