前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang之旅29-流程控制

Golang之旅29-流程控制

作者头像
皮大大
发布2021-03-02 15:58:00
3440
发布2021-03-02 15:58:00
举报
文章被收录于专栏:机器学习/数据可视化

Go知识点总结2-流程控制

流程控制
分支控制
  • 单分支
  • 双分支
  • 多分支
代码语言:javascript
复制
package main
import "fmt"

func main(){
  
  //1. 单分支
	var age int
  fmt.Println("请输入年龄:")
  fmt.Scanln(&age)
  
  if age > 18{
    fmt.Println("你的年龄大于18")
  }
  
  // if age := 20; age > 18{
  //	fmt.Println("你的年龄大于18")
	//}
  
  // 2. 双分支
  var age1 int
  fmt.Println("请输入年龄:")
  fmt.Scanln(&age1)
  
  if age1 > 18 {
    fmt.Println("你的年龄大于18")
  } else {
    fmt.Println("你的年龄小于18")
  }
  
  // 案例
  i := 4
  j := 1
  if i > 4 {
    if j > 2 {
      fmt.Println(i+j)
    }
    fmt.Println("hello golang")   // 输出hello golang
  }else {
    fmt.Println(i)   //  上面的分支已经执行了,else分支不会执行
  }
}
代码语言:javascript
复制
// 练习题

package main
import "fmt"

func main(){
  var i int32 = 20
  var j int32 = 25
  if i + j > 50{
    fmt.Println("hello world")
  }
  
  var x float64 = 15.0
  var y float64 = 13.0
  if x > 10 && y < 20{
    fmt.Println(x + y)
  }
  
  // 判断闰年:1. 能够被4整除,但是不能被100整除;2.能够被400整除
  var year int32 = 2020
  if (year % 4 ==0 && year % 100 !=0) || year % 400 == 0{
    fmt.Println("闰年~")
  }
}
代码语言:javascript
复制
// 多分支

package main
import (
	"fmt"
	"math"
)

func main(){
  var score int32
  fmt.Println("请输入成绩:")
  fmt.Scanln(&score)
  
  if score == 100{
    fmt.Println("宝马")
  }else if 80 < score && score <= 99{
    fmt.Println("Iphone7")
  } else if 60 <= score && score <= 80{
    fmt.Println("Ipad")
  } else{
    fmt.Println("Nothing")
  }
  
  
  // 求二次函数的结果,判断判别式
  a := 3.0
  b := 100.0
  c := 6.0
  
  m := b*b - 4*a*c
  
  if m > 0{
    x1 := (-b + math.Sqrt(m)) / (2*a)
    x2 := (-b - math.Sqrt(m)) / (2*a)
    fmt.Println(x1, x2)
  }else if m == 0{
    x1 := (-b + math.Sqrt(m)) / (2*a) 
    fmt.Println(x1)
  }else {
    fmt.Println("Nothing")
  } 
  
  // 判断男方标准
  var height int32
  var money float32
  var handsome bool
  
  fmt.Println("请输入身高:")
  fmt.Scanln(&height)
  fmt.Println("请输入财富:")
  fmt.Scanln(&money)
  fmt.Println("是否帅")
  fmt.Scanln(&handsome)
  
  if height > 180  && money > 1 && handsome {
    fmt.Println("今天就嫁给他!")
  }else if height > 180  || money > 1 || handsome{
    fmt.Println("过段时间嫁给他!")
  }else {
    fmt.Println("gun")
  }
}
嵌套分支

在一个分支结构中又嵌套了一个完整的分支结构,里面的叫做内层分支结构,外层的叫做外层分支。嵌套分支最多3层

代码语言:javascript
复制
package main
import "fmt"

func main(){
	var second float64
	fmt.Println("请输入时间秒数:")
	fmt.Scanln(&second)  
  
  if second <= 8{
    // 进入决赛
    var sex string
    fmt.Println("请输入性别:")
		fmt.Scanln(&sex)  
    
    if sex == "男":{
      fmt.Println("进入决赛的男子组")
    }else {
      fmt.Println("进入决赛的女子组")
    }
  } else{
    fmt.Println("out")
  } 
}
switch
  • case后面可以是个表达式:变量、常量、有返回值的函数
  • caseswitch的表达式必须相同
  • case后面可以有多个表达式
  • case后面表达式中的常量不能重复,但是变量可以重复
  • case后面不需要breakdefault不是必须
代码语言:javascript
复制
package main
import "fmt"

func main(){
  var key byte
  fmt.Println("请输入一个字符:a b c d")
  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("输入有误")
  }
  
  // switch后面不接表达式
  var score int = 90
  switch {
    case score > 90:
    		fmt.Println("优秀")
    case score >= 70:
    		fmt.Println("良好")
    case score > 60:
    		fmt.Println("及格")
    default:
    		fmt.Println("不及格")
  }
  
  var month byte
  fmt.Println("请输入月份")
  fmt.Scanln(&month)
  switch month{
    case 3,4,5:
    		fmt.Println("spring")
    case 6,7,8:
    		fmt.Println("summer")
    case 9,10,11:
    		fmt.Println("autumn")
    case 12,1,2:
    		fmt.Println("winter")
    default:
    		fmt.Println("输入有误")
  }
  
  // fallthrogh:只能穿透一层
  var num int = 10
  switch num{
    case 10:
    		fmt.Println("ok1")  // ok1
    		fallthrough // 穿透一层。
    case 20:
    		fmt.Println("ok2")   // ok2
    case 30:
    		fmt.Println("ok3")
    default 
    		fmt.Println("没有匹配到")
  }
}
for
  • for基本遍历方法
代码语言:javascript
复制
package main
import "fmt"

func main(){
  // 写法1:常规写法
  for i := 1;i <= 10;i++{
    fmt.Println("hello golang")
  }
  
  // 写法2
  i := 1  // 循环变量的初始化
  for i <= 10{  // 循环条件
    fmt.Println("hello golang")
    i++ // 循环变量迭代
  }
  
  // 写法3
  k := 1
  for ;;{
    if k <= 10:{
      fmt.Println("ok", k)
    } else {
      break   // 跳出循环
    }
    k++
  }
}
代码语言:javascript
复制
package main
import "fmt"

// 1-100 之间9的倍数的个数及所有数的总和
func main(){
  count := 0
  sum := 0
  for i:= 1;i <= 100; i++{
    if i % 9 == 0{
      sum += i
      count++
    }
  }
  fmt.Println(count,sum)
  
  
  // 按照格式输出
  var n int = 6
  for i := 0;i <= n;i++{
    fmt.Println("%v + %v = %v \n", i, n-i, n)
  }
}
while

go语言中没有while语法。

代码语言:javascript
复制
// 输出10句`hello world`

package main
import "fmt"

func main(){
  // 方式1
  var i int = 1
  for {
    if i > 10{  // 大于10跳出循环
      break
    }
    fmt.Println("hello world")
    i++
  }
  fmt.Println(i)  // 结束的时候i是1
  
  
  // 方式2:使用do...while形式来实现
  var j int = 1
  for {
    ftm.Println("hello world", j)
    j++  // 循环迭代
    if j > 10{
      break
    }
  }
}
多重循环控制
代码语言:javascript
复制
// 3个班,每个班5个同学,求出每个班的平均分和所有班的平均分

package main
import "fmt"

func main(){
  
  var totalSum float64 = 0.0
  var passCount int = 0
  // 2. 再对3个班级进行循环
  for j :=1;j <= 3; j++{  
    // 1. 先求出一个班级的平均分
    sum := 0.0
    for i :=1;i <= 5;i++{
      var score float64
      fmt.Printf("请输入第%d个学生的成绩 \n", i)
      fmt.Scanln(&score)
      // 统计总分
      sum += score
      // 统计及格人数
      if score >= 60{
        passCount++ 
      		}
    	}
    	fmt.Printf("第%d个班的平均分是%v \n", j, sum / 5)
    // 3. 各个班级的总成绩进行累加
    totalSum += sum
    } 
  fmt.Printf("各个班级的总成绩%v   所有班级的平均分是%v\n", totalSum, totalSum / (5*3))
  fmt.Printf
}
金字塔案例
代码语言:javascript
复制
package main
import "fmt"

// 1. 打印矩形
/*
   ***
   ***
   ***
*/

// 2. 打印半个金字塔
/*
   *
   **
   ***
*/

// 3. 打印金字塔
/*
    *    1层1个     规律:2 * 层数 - 1  空格2:总层数-当前层数i 
   ***   2个3个
  *****  3层5个
*/

// 4. 将层数做成变量:

// 5. 打印空金字塔
// 规律:只有开头和结束是*,其余部分是空的
// 特殊情况:最后一层都是*
/*
     *
    * *
   *   *
*/

func main(){
  var totalLevel int = 9
  
  for i:=1; i <= totalLevel;i++{  // i表示层数
    // 打印空格
    for k := 1;k <= totalLevel - i;k++{
      fmt.Print(" ")
    }
    
    for j :=1;j <= 2 * i - 1;j++{  // j表示每层打印多少个*
      // 打印空金字塔
      if j == 1 || j == 2 * i-1 || i == totalLevel {
      		fmt.Print("*")
      } else{
        fmt.Print(" ")
      }
      
    }
    fmt.Println()   // 换行操作 
  }
}

九九乘法表
代码语言:javascript
复制
package main
import "fmt"

func main(){
  for i:=1;i<=9;i++{
    for j := 1; j <= i;j++{
      fmt.Printf("%v * %v = %v\t", j,i,j*i)   // 制表符
    }
    fmt.Println()   // 打印空行
  }
}
break
代码语言:javascript
复制
package main
import "fmt"

// 随机生成0-100的一个数,直到生成99这个数,总共用了多少次

func main(){
  var count int = 0 
  for {
      // time.Now().UnixNano() :生成一个从1970-01-01 00:00:00到现在的秒数 
    rand.Seed(time.Now().UnixNano())
    // 生成0-100的随机数
    n := rand.Intn(100) + 1 
    count ++
    if n == 99 {
      break   // n为99直接终止当前循环
    }
  }
  fmt.Println(count)
}
  • 通过标签label指定跳到哪一层
  • break语句只能跳出离它最近的for循环
代码语言:javascript
复制
func main(){
  for i := 0; i<4; i++{
    for j := 0; j<10; j++{
      if j == 2{
        break
      }
      fmt.Println(j)  // j=0,j=1  循环4次
    }
  }
}

代码语言:javascript
复制
// 标签使用
package main
import "fmt"

func main(){
  label2:
  for i := 0; i<4; i++{
    // lable1
    for j := 0; j<10; j++{
      if j == 2{
        // break lable1 // 结果同上面
        break label2   // 设置标签,直接跳出整个循环
      }
      fmt.Println(j)  // j=0,j=1  仅仅一次
    }
  }
}
代码语言:javascript
复制
package main
import "fmt"

func main(){
  // 0-100 求和,求出当和大于20时候的当前数
  sum := 0
  for i := 1;i <= 100;i++{
    sum += i
    if sum > 20{
      fmt.Println("当前数是",i)
      break
    }
  }
  
  // 3次登陆机会,密码和账号正确则成功;否则提示还有几次机会
  var name string
  var pwd string
  var loginChance = 3
  for i := 1;i<=3;i++{
    fmt.Println("输入用户名")
    fmt.Scanln(&name)
    fmt.Println("输入密码")
    fmt.Scanln(&pwd)
    
    if name == "张无忌" && pwd == "888"{
      fmt.Println("恭喜登陆成功")
      break
    }else {
      loginChance-- 
      fmt.Println("还有%v次机会,请珍惜\n",loginChance)
    }
    if loginChance == 0{
      fmt.Println("机会用完了,没有登陆成功")
    }
  }
}
continue

结束本次循环,继续执行下次循环;也可以通过指明标签来指定跳转到某个循环中。

代码语言:javascript
复制
package main
import "main"

func main(){
  for i:=0;i<4;i++{
    for j := 0;j<10;j++{
      if j == 2{
        continue    // 跳出j=2
      }
      fmt.Println("j=",j)
    }
  }
}

/*
j=1
j=3
...
j=9
输出4次上面的结果,每次没有j=2  
*/
代码语言:javascript
复制
package main
import "fmt"

// 标签使用

/*
i=0,j=1
i=1,j=1
*/
here:
func main(){
  for i:=0;i<2;i++{
    for j:=1;j<4;j++{
      if j==2{
        continue here
      }
      fmt.Println("i=",i,"j="j)
    }
  }
}
goto
  • goto语句可以无条件的转移到程序中指定的行
  • 通常和条件语句配合使用,用来实现条件转移
  • 不主张使用goto语句
代码语言:javascript
复制
package main
import "main"

func main(){
  var n int = 30
  fmt.Println("ok1")
  if n > 20{
    goto label1    // 直接跳过下面两句话
  }
  fmt.Println("ok2")
  fmt.Println("ok3")
  label1:  // 直接到这里的
  fmt.Println("ok4")
  fmt.Println("ok5")
  fmt.Println("ok6")
  fmt.Println("ok7")
}
return

return使用在方法或者函数中,遇到它,则跳出整个函数或方法

代码语言:javascript
复制
package main
import "main"

func main(){
  var n int = 30
  fmt.Println("ok1")
  if n > 20{
    return   // 直接跳过下面所有的语句
  }
  fmt.Println("ok2")
  fmt.Println("ok3")
  fmt.Println("ok4")
  fmt.Println("ok5")
  fmt.Println("ok6")
  fmt.Println("ok7")
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-5,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Go知识点总结2-流程控制
    • 流程控制
      • 分支控制
      • 嵌套分支
    • switch
      • for
        • while
          • 多重循环控制
            • 金字塔案例
              • 九九乘法表
                • break
                  • continue
                    • goto
                      • return
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档