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

猜你喜欢

转载自blog.csdn.net/weixin_42927934/article/details/81784859