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("月份输入错误!!")
}