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("月份輸入錯誤!!")
}