Golang基础-流程控制

    科技2022-07-20  104

    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函数,即终止程序。

    Processed: 0.011, SQL: 8