Golang基础-流程控制

1.顺序控制

package main

import "fmt"

func main() {
	var days int = 97
	var week int = days / 7
	var day int = days % 7
	fmt.Printf("%d个星期零%d天\n", week, day)
}

2.分支控制

1.单分支控制

package main

import "fmt"

//单分支控制
func main() {

	var age int
	fmt.Println("请输入年龄:")
	fmt.Scanln(&age)

	if age > 18 {
		fmt.Println("你已经成年")
	}
}

2.双分支控制

package main

import "fmt"

func main() {
	var year int = 2020
	if (year%4 == 0 && year%100 != 0) || year%400 == 0 {
		fmt.Println(year, "是闰年")
	}
}    

3.多分支控制

package main

import "fmt"

/*	多分支控制
多分支只能有一个执行入口
案例:
小明参加考试 得100分获得BMW (80,99)获得iPhone11 (60,80]得iPad 其他什么也没有
*/

func main() {
	var score int
	fmt.Println("请输入考试成绩:")
	fmt.Scanln(&score)

	//多分支判断
	if score == 100 {
		fmt.Println("奖励BMW")
	} else if score > 80 && score <= 99 {
		fmt.Println("奖励iPhone11")
	} else if score >= 60 && score <= 80 {
		fmt.Println("奖励ipad")
	} else {
		fmt.Println("没有奖励")
	}
}    

4.嵌套分支

package main

import "fmt"

/*
//案例一:参加运动会,如果8秒以内进决赛,否则淘汰。并根据性别进入男子组或女子组。
func main() {
	var second float64
	fmt.Println("输入比赛成绩:")
	fmt.Scanln(&second)

	if second <= 8 {
		//进入决赛
		var gender string
		fmt.Println("输入性别:")
		fmt.Scanln(&gender)

		if gender == "男" {
			fmt.Println("进入男子决赛")
		} else {
			fmt.Println("进入女子决赛")
		}
	} else {
		fmt.Println("out...")
	}

}
*/

//案例二:四到十月份 成人(18,60)票价60元 儿童半价 老人三分之一 其他月份 成人40 其他20
func main() {
	var mouth byte
	var age byte
	var price float64 = 60
	fmt.Println("输入月份:")
	fmt.Scanln(&mouth)
	fmt.Println("输入年龄:")
	fmt.Scanln(&age)

	if mouth >= 4 && mouth <= 10 {
		if age > 60 {
			fmt.Println("%v月 票价 %v 年龄 %v ", mouth, price/3, age)
		} else if age >= 18 {
			fmt.Println("%v月 票价 %v 年龄 %v ", mouth, price, age)
		} else {
			fmt.Println("%v月 票价 %v 年龄 %v ", mouth, price/2, age)
		}
	} else {
		if age >= 18 && age < 60 {
			fmt.Println("淡季成人票价40")
		} else {
			fmt.Println("淡季折扣票价20")
		}
	}
}    

3.switch分支控制

package main

import "fmt"

func main() {
	//接收一个字符,比如a,b,c,d,e,f,g a表示星期一,b表示星期二。。。
	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("周四")
	default:
		fmt.Println("输入有错")
	}
}

注意事项:
1.case/switch后面是一个表达式(常量值,变量,一个有返回值的函数等)
2.case后的表达式的值的数据类型,必须和switch的表达式数据类型一致
3.case后面可以带多个表达式,使用逗号间隔。
4.case后面的表达式如果是常量值,要求不可以重复
5.case后面不需要带break,default不是必须的
6.switch后面可以不带表达式,类似if else分支
案例:

var age int =10
switch{
	case age== 10:
		fmt.Println("age==10")
	case age== 20:
		fmt.Println("age==20")
	default:
		fmt.Println("输入有错")
}

//	7.switch后面可以直接声明一个变量,以分号结束,但是不推荐使用。
//	8.switch穿透-fallthrough,如果在case语句块后面增加一个fallthrough,则会继续执行下一个case,也叫switch穿透。
//	9.Type Switch:switch语句还用于type-switch来判断interface变量中实际指向的变量类型。

4.for循环控制

基础用法

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        fmt.Println("你好")
    }
}
/*

语法格式

for 循环变量初始化; 循环条件; 循环变量迭代 {
        循环操作语句
        }
*/

用法二

package main

import "fmt"

func main() {
    j := 1
    for j <= 10 {
        fmt.Println("你好")
        j++
    }
}

用法三

package main

import "fmt"

func main() {
    j := 1
    for {
        if j <= 10 {
            fmt.Println("你好")
        } else {
            break
        }
        j++
    }
}

用法四-字符串遍历

package main

import "fmt"

func main() {

    /*
        //字符串遍历方式一:传统方式

        var str string = "hello"
        for i := 0; i < len(str); i++ {
            fmt.Printf("%c \n", str[i])
        }
    */
    //字符串遍历方式二:for-range

    fmt.Println()
    var str string
    str = "hello,孙"//传统方式字符串不可以含有中文
    for index, val := range str {
        fmt.Printf("index=%d,val=%c \n", index, val)
    }
}

5.while和do while的实现

package main

import "fmt"

func main() {
    //GO语言没有while 和 do while 语句 可以用for实现
    var i = 1
    for {
        if i > 10 { //循环条件
            break
        }
        fmt.Println("hello yang", i)
        i++
    }
    fmt.Println("i=", i)
}

6.多重循环控制(重点)

示例代码:

package main

import "fmt"

func main() {
    //案例:统计三个班的成绩,每个班级有五人,求出各个班平均分和所有人平均分(学生成绩由键盘输入)
    var classnum int = 3
    var studentnum int = 5
    var totalsum float64 = 0.0
    for j := 1; j <= classnum; j++ {
        sum := 0.0
        for i := 1; i <= studentnum; i++ {
            var score float64
            fmt.Printf("请输入第%d班 第%d位学生成绩 \n", j, i)
            fmt.Scanln(&score)
            //总分
            sum = sum + score
        }
        fmt.Printf("第%d班的平均成绩为%v \n", j, sum/float64(studentnum))
        totalsum = sum + totalsum
    }

    fmt.Printf("各个班总成绩为%v 所有班的平均分为%v \n", totalsum, totalsum/float64(studentnum*classnum))

}

7.跳转控制语句-break

1.break用于终止某个语句块的执行,用于中断for循环或者跳出switch语句
2.break出现在多层嵌套的语句块时,可以通过标签指明要终止哪一层语句
3.break默认会跳出最近的for循环,后面指定标签则跳出标签对应的for循环
示例代码:

package main

import "fmt"

func main() {
lable2:
    for i := 0; i < 4; i++ {
        //lable1: //设置一个标签
        for j := 0; j < 10; j++ {
            if j == 2 {
                break lable2
            }
            fmt.Println("j=", j)
        }
    }
}

8.跳转控制语句-continue

continue用于结束本次循环,继续执行下一次循环,也可以像break使用标签
示例代码:

package main

import "fmt"

func main() {

    //lable2:
    for i := 1; i < 4; i++ {
        //lable1:
        for j := 0; j < 10; j++ {
            if j == 2 {
                continue
            }
            fmt.Println("j=", j)
        }
    }
}

9.跳转控制语句-goto

goto可以无条件地转移到程序中指定的行。

goto通常和条件语句配合使用,用来实现条件转移,跳出循环体等功能。程序设计中一般不提倡使用,会造成流程混乱。

示例代码:

package main

import "fmt"

func main() {
    var n int
    n = 30
    fmt.Println("ok1")
    if n > 20 {
        goto label1
    }
    fmt.Println("ok2")
    fmt.Println("ok3")
    fmt.Println("ok4")
label1:
    fmt.Println("ok5")
}

10.跳转控制语句-return

return使用在方法或者函数中,表示跳出所在的方法或者函数。

示例代码:

package main

import "fmt"

func main() {
    //return使用在方法或者函数中,表示跳出所在的方法或者函数
    for i := 0; i <= 10; i++ {
        if i == 3 {
            return
        }
        fmt.Println("nihao", i)
    }
    fmt.Println("hello")
}

如果return是在普通函数中,则跳出该函数,即不再执行函数return后的代码。

如果return是在main函数中,表示终止main函数,即终止程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值