zoukankan      html  css  js  c++  java
  • 程序流程控制2

    switch分支结构:

    1)switch语句用于基本不同条件执行不同动作,每一个 case分支都是唯一的,从上到下逐一测试,直到匹配为止。
    2)匹配项后面也不需要在加break

    基本语法:

    swith 表达式 {

    case 表达式1,表达式2,...:
      语句块1

    case 表达式3,表达式4,... :
      语句块2

    //这里可以有多个case语句

    default:
      语句块
    }

    对上图的说明和总结

    1)switch的执行流程是,先执行表达式,得到值,然后和case的表达式进行比较,如果相等,就匹配到,然后执行对应的case的语句块然后退出switch控制。
    2)如果switch 的表达式的值没有和任何的case的表达式匹配成功,则执行default的语句块。执行后退出switch控制。
    3)在golang中case 后的表达式可有多个,使用 逗号 间隔。
    4)在golang中不需要写break,因为默认会有 break。在默认情况下,当程序执行完一个case语句块后就直接退出该switch控制。


    案例;

    请编写一个程序,改程序可以接受一个字符,比如:a,b,c,d,e,f,g
    a表示星期一,b表示星期二 ... 根据用户输入的显示相应的的信息。

    要求使用switch 语句完成


    代码编写:

    func main() {

      //1.定义一个变量接收字符
      //2.使用switch完成

      var key byte
      fmt.Println("请输入一个字符 a,b,c,d,e,f,g")
      fmt.Scanf("%c", &key)

      switch key {
        case 'a' :
          fmt.Println("周一, 猴子穿新衣")

        case 'b' :
          fmt.Println("周二, 猴子当小二")

        case 'c' :
          fmt.Println("周三,猴子去爬山")

        case 'd' :
          fmt.Println("周四,猴子去考试")

        case 'e' :
          fmt.Println("周五,猴子去跳舞")

        case 'f' :
          fmt.Println("周六,猴子去溜溜")

        case 'g' :
          fmt.Println("周日,猴子过生日 ")

        default:
          fmt.Println("输入错误...")
      }

    }

    switch细节讨论:

    1)case后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以,甚至还可以运算)

    2)case后的各个表达式的值的数据类型,必须和switch 的表达式数据类型一致

    func main() {
      var n1 int32 = 20
      var n2 int64 = 20
      switch n1 {
        case n2 :   //错误,原因是 n2的数据类型和n1不一致
          fmt.Println("ok1")
        default :
          fmt.Println("没有匹配到")
      }
    }

    3)case后面可以带多个表达式,使用逗号间隔。比如case表达式1,表达式2...

    func main() {
      var n1 int32 = 5
      var n2 int32 = 20
      switch n1 {
        case n2, 10, 5 :    // case 后面可以有多个表达式,n1会跟n2, 10, 5都匹配一遍。
          fmt.Println("ok1")
        default :
          fmt.Println("没有匹配到")
      }
    }

    4)case后面的表达式如果是常量值(字面量),则要求不能重复

    5) case后面不需要带break,程序匹配到一个case后就会执行对应的代码块,然后退出switch,如果一个都匹配不到,则执行default

    6)default 语句不是必须的。

    7)switch 后也可以不带表达式,类似多个if--else分支来使用。

    func main() {
      var age int = 10
      switch {
        case age == 10 :
          fmt.Println("age == 10")
        case age == 20 :
          fmt.Println("age == 20")
        default :
          fmt.Println("没有匹配到")
      }
    }

    8)switch 后也可以直接声明/定义一个变量,分号结束,不推荐。

    9)switch 穿透-fallthrough,如果在case语句块后增加fallthrough,则会继续执行下一个case,也叫switch穿透。


    func main() {
      //switch 的穿透 fallthrough
      var num int = 10
      switch num {
        case 10 :
          fmt.Println("ok1")
          fallthrough //默认只能穿透一层
        case 20 :
          fmt.Println("ok2")
        case 30 :
          fmt.Println("ok3")
        default :
          fmt.Println("没有匹配到")
      }
    }

    10)Type Switch:switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际指向的变量类型 【还没有学interface,先体验一把】

    func main() {

      var x interface{}

      var y = 10.0

      x = y

      switch i := x.(type) {

        case nil:

          fmt.Printf(" x 的类型~ :%T",i)

        case int:

          fmt.Printf(" x 是 int 型")

        case float64:

          fmt.Printf(" x 是 float64 型")

        case func(int) float64:

          fmt.Printf(" x 是 func(int) 型")

        case bool, string:

          fmt.Printf(" x 是 bool 或 string 型")

        default:

          fmt.Printf("未知型")

      }

    }

    练习:

    1、使用switch把小写类型的 char型转为大写(键盘输入)。只转换a,b,c,d,e 其它的输出“other”。

    func main() {

      var char byte
      fmt.Println("请输入一个字符:")
      fmt.Scanf("%c", &char)

      switch char {
        case 'a' :
          fmt.Println("A")
        case 'b' :
          fmt.Println("B")
        case 'c' :
          fmt.Println("C")
        case 'd' :
          fmt.Println("D")
        case 'e' :
          fmt.Println("E")
        default :
          fmt.Println("other")
      }
    }

    2、对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。(注:输入的成绩不能大于100)

    func main() {
      var score int
      fmt.Println("请输入成绩:")
      fmt.Scanln(&score)
      switch {
        case score >= 60 && score <= 100 :
          fmt.Println("及格")
        case score >= 0 && score < 60 :
          fmt.Println("不及格")
        default :
          fmt.Println("输入有误...")
      }
    }

    3、根据用户指定月份,打印该月份所属的季节。3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12,1,2 冬季

    func main() {
      var month byte
      fmt.Println("请输入月份")
      fmt.Scanln(&month)
      switch month {
        case 3, 4, 5 :
          fmt.Println("春季")
        case 6, 7, 8 :
          fmt.Println("夏季")
        case 9, 10, 11 :
          fmt.Println("秋季")
        case 12, 1, 2 :
          fmt.Println("冬季")
        default :
          fmt.Println("你输入错误")
      }
    }

    4、根据用户输入显示对应的星期时间(string),如果“星期一”,显示“干煸豆角” ,如果“星期二”,显示“醋溜土豆”,如果“星期三”,显示“红烧狮子头”,如果“星期四”,显示“油炸花生米”,如果“星期五”,显示“蒜蓉扇贝”,如果“星期六”,显示“东北乱炖”,如果“星期日”,显示“大盘鸡”。

    func main() {

      var week string
      fmt.Println("请输入星期几:")
      fmt.Scanln(&week)

      switch week {
        case "星期一" :
          fmt.Println("干煸豆角")
        case "星期二" :
          fmt.Println("醋溜土豆")
        case "星期三" :
          fmt.Println("红烧狮子头")
        case "星期四" :
          fmt.Println("油炸花生米")
        case "星期五" :
          fmt.Println("蒜蓉扇贝")
        case "星期六" :
          fmt.Println("东北乱炖")
        case "星期日" :
          fmt.Println("大盘鸡")
        default :
          fmt.Println("您输入错误")
      }
    }


    switch 和 if 的比较:

    1)如果判断的具体数值不多,而且符合整数、浮点数、字符、字符串这几种类型。建议使用switch语句,简洁高效。
    2)其他情况,对区间判断和结果为bool类型的判断,使用if,if的使用范围更广。

  • 相关阅读:
    使用python写天气预告
    beef配合ettercap批量劫持内网的浏览器
    html布局
    python 使用paramiko模块上传本地文件到ssh
    mysql一些函数的记录
    python与ssh交互
    html笔记4
    html笔记3
    html笔记2
    html笔记1
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11343164.html
Copyright © 2011-2022 走看看