go語言學習筆記6------流程控制②

1.4if-else if 結構

基本語法如下:
if 條件判斷{
要執行的代碼段
}else if 條件判斷{
要執行的代碼段
}else if 條件判斷{
要執行的代碼段
}else if條件判斷{
要執行的代碼段
}…………………………….else{
}
通過以上的語法格式我們發現,可以寫很多的else if結構。

具體的執行過程:程序首先判斷第一個if所帶的小括號中的判斷條件,如果條件成立,也就是返回一個true,
則執行該if所帶的大括號中的代碼,執行完成後,立即跳出if else-if結構。
如果第一個if所帶的判斷條件不成立,也就是返回一個false,則繼續向下進行判斷,依次的判斷每一個if所帶
的判斷條件,如果成立,就執行該if所帶的大括號中的代碼,如果不成立,則繼續向下判斷,
如果每個if所帶的判斷條件都不成立,就看當前這個if else-if結構中是否存在else。
如果有else的話,則執行else中所帶的代碼,如果沒有else,則整個 if-else if什麼都不做。
else可以省略。

案例演示如下:
考試成績達90分以上(含90分),評級爲A
考試成績達80分以上(含80分),評級爲B
考試成績達70分以上(含70分),評級爲C
考試成績達60分以上(含60分),評級爲D
其餘情況,評級爲E

func main(){
fmt.Println("請輸入考試成績")
var score int
fmt.Scanf("%d",&score)
if score>=90{
fmt.Println("A")
}else if score>=80{
fmt.Println("B")
}else if score>=70{
fmt.Println("C")
}else if score>=60{
fmt.Println("D")
}else{
fmt.Println("E")
}

通過以上代碼,我們發現if-else if 結構在進行多條件判斷時確實比if, if-else(嵌套)要方便很多,並且結構清晰,閱讀性比較強。

總結:我們通過前面的案例講解,大家應該能夠總結出if結構,if-else結構和if-else if結構應用的場景.
if結構適合:一種的判斷
if-else結構適合:兩種情況的判斷
if-else if 結構適合: 多種情況判斷,並且判斷都是對區間中的數據進行判斷

1.5switch結構

switch-case結構語法如下:
switch 變量或者表達式的值{
case 值1:
要執行的代碼
case 值2:
要執行的代碼
case 值3:
要執行的代碼
………………………………..
default:
要執行的代碼
}
switch-case結構的執行流程:
程序執行到switch處,首先將變量或者表達式的值計算出來,然後拿着這個值依次跟每個case後面所帶的值進行匹配,一旦匹配成功,則執行該case所帶的代碼,執行完成後,跳出switch-case結構。如果,跟每個case所帶的值都不匹配。就看當前這個switch-case結構中是否存在default,如果有default,則執行default中的語句,如果沒有default,則該switch-case結構什麼都不做。

基本案例演示如下:

func main(){
var score int=30
switch score{
case 90:
fmt.Println("優秀")
case 80:
fmt.Println("良好")
case 70:
fmt.Println("一般")
case 60:
fmt.Println("及格")
default:
fmt.Println("不及格")
}
}

GO語言中switch-case結構中,case後面默認自帶break(終止程序執行),這是與其它語言不同的地方。

注意:某個case 後面跟着的代碼執行完畢後,不會再執行後面的case,而是跳出整個switch結構, 相當於每個case後面都跟着break(終止),但是如果我們想執行完成某個case後,強制執行後面的case,可以使用fallthrough。

1.6if-else if與switch的比較

其實通過上面的案例,我們發現switch能夠實現的,我們用if-else if也可以實現,那麼反過來呢,if-else if能實現的,我們使用switch能否實現呢?接下來將我們前面用if-else if實現的“考試成績評定”這道題用switch來實現。

func main(){
fmt.Println("請輸入考試成績")
var score int
fmt.Scanf(%d,&score)
switch {
case score>=90:
fmt.Println("A")
case score>=80:
fmt.Println("B")
case score>=70:
fmt.Println("C")
case score>=60:
fmt.Println("D")
default:
fmt.Println("E")
}
}

總結:
相同點:都可以實現多分支結構
不同點(根據個人習慣進行選擇):
if-else if:可以處理範圍
switch:一般用於等值比較

案例:請用戶輸年份,再輸入月份,輸出該月的天數。

funcmain(){
    //請用戶輸年份,再輸入月份,輸出該月的天數.
    var year int//表示年份
    var month int//表示月份
    var day int
    fmt.Println("請輸入年份")
    fmt.Scanf("%d\n",&year)
    fmt.Println("請輸入月份")
    fmt.Scanf("%d",&month)
    //判斷月份的取值範圍
    if month>=1&&month<=12{
        switch month{
        case 1:
            fallthrough
        case 3:
            fallthrough
        case 5:
            fallthrough
        case 7:
            fallthrough
        case 8:
            fallthrough
        case 10:
            fallthrough
        case 12:
            day=31
        case 2://需要判斷是否爲閏年
   if(year%400==0)||(year%4==0&&year%100!=0){
                day=29
            }else{
                day=28
            }
        default:
            day=30
        }
   fmt.Printf("%d年%d月共%d天",year,month,day)
    }else{
        fmt.Println("月份輸入錯誤!!")
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章