前言

程序是由语句构成,而流程控制语句 是用来控制程序中每条语句执行顺序的语句。可以通过控制语句实现更丰富的逻辑以及更强大的功能。几乎所有编程语言都有流程控制语句,功能也都基本相似。

其流程控制方式有

  • 顺序结构
  • 分支结构
  • 循环结构

这里最简单最常用的就是顺序结构,即语句从上至下一一执行。

1. 分支语句

顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。

1.1 单分支语句

语法:

if 布尔表达式 {  // 注意左花括号必须与表达式同行/* 在布尔表达式为 true 时执行 */
}


案例一:

package mainimport "fmt"func main() {var user = "jiangtao"var passwd = 123if user == "tao" && passwd == 123 {fmt.Println("登陆成功")}fmt.Println("登陆失败")
}

执行结果:

解析:
此处不能存在这种写法:

if user == “tao” && passwd = 123 这种写法会报错,在判断是否相等的时候用==,而不是=

改写下,让用户输入

package mainimport "fmt"func main() {var user stringvar passwd stringfmt.Println("请输入用户名:")fmt.Scanln(&user)fmt.Println("请输入密码:")fmt.Scanln(&passwd)if user == "laoxin" && passwd == "123" {fmt.Println("登陆成功")}fmt.Println("登陆失败")
}

但这个地方需要注意,因为是单分支语句,他输出登陆成功后,还是会输出登陆失败,。

但登陆失败一定不会执行登陆成功的语句。

如果要实现更多功能需要用到双分支语句:

双分支语句

语法错误

if 布尔表达式 {  // 注意左花括号必须与表达式同行/* 在布尔表达式为 true 时执行 */
} else{}

案例一:

package mainimport "fmt"func main() {var user stringvar passwd stringfmt.Println("请输入用户名:")fmt.Scanln(&user)fmt.Println("请输入密码:")fmt.Scanln(&passwd)if user == "laoxin" && passwd == "123" {fmt.Println("登陆成功")} else {fmt.Println("登陆失败")}}

注意语法格式,{}的位置不能变

花括号里面可以写多行代码,这是一个语句体

3. 多分支语句

语法格式:

if 布尔表达式 {  // 注意左花括号必须与表达式同行/* 在布尔表达式为 true 时执行 */
} else  if{}else if{}else if{}else{}突然想起了香蕉这个单词, banananananana  最后一定要有个else,要不然上面的都不执行

案例一:
成绩是否合格

package mainimport "fmt"func main() {var score intfmt.Println("请输入你的成绩:")fmt.Scanln(&score)if score > 90 && score <= 100 {fmt.Println("成绩优秀")} else if score > 80 && score <= 90 {fmt.Println("成绩良好")} else if score > 60 && score <= 80 {fmt.Println("成绩及格")} else {fmt.Println("成绩不及格")}}

执行结果:

是否存在bug呢?

比如成绩是200分


所以成绩应该不能大于100,也不能小于0

修改v2版本

package mainimport "fmt"func main() {var score intfmt.Println("请输入你的成绩:")fmt.Scanln(&score)if score > 100 || score < 0 {fmt.Println("你输入的成绩超出了范围,请输入0-100之间的数字")} else if score > 90 && score <= 100 {fmt.Println("成绩优秀")} else if score > 80 && score <= 90 {fmt.Println("成绩良好")} else if score > 60 && score <= 80 {fmt.Println("成绩及格")} else {fmt.Println("成绩不及格")}}

执行结果

在想一个问题: 代码是从上往下进行,比如 一个成绩大于100, 就一定会执行第一个分支,不会执行到第二个分支。

所以我们写 score > 90 score< 100 这个小于100是否有必要。

很明显没有必要,可以改一下,改成score > 90 , 但这样少了90 。 所以需要改成score >=90

V3版

package mainimport "fmt"func main() {var score intfmt.Println("请输入你的成绩:")fmt.Scanln(&score)if score > 100 || score < 0 {fmt.Println("你输入的成绩超出了范围,请输入0-100之间的数字")} else if score >= 90 {fmt.Println("成绩优秀")} else if score >= 80  {fmt.Println("成绩良好")} else if score >=60 {fmt.Println("成绩及格")} else {fmt.Println("成绩不及格")}}

注意,代码不管有多少行,都是执行一个分支

其他分支语句 switch

语法:

switch var {case val1:...case val2:...default:...
}


switch语句也是多分支选择语句,执行哪一代码块,取决于switch后的值与哪一case值匹配成功,则执行该case后的代码块。

案例:

数字对应星期

package mainimport "fmt"func main() {var num intfmt.Scanln(&num)switch num {case 1:fmt.Println("今天星期一")case 2:fmt.Println("今天星期二")case 3:fmt.Println("今天星期三")case 4:fmt.Println("今天星期四")case 5:fmt.Println("今天星期五")case 6:fmt.Println("今天星期六")}
}

switch的特点:

1、switch比if else更为简洁

2、执行效率更高。switch…case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。从而,switch…case不用像if…else那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。

3、到底使用哪一个选择语句,代码环境有关,如果是范围取值,则使用if else语句更为快捷;如果是确定取值,则使用switch是更优方案

在上面的switch中如果出现不匹配的怎么办呢?

语法:

switch{case 1,2:default:
}

完善后案例代码:

package mainimport "fmt"func main() {var num intfmt.Scanln(&num)switch num {case 1:fmt.Println("今天星期一")case 2:fmt.Println("今天星期二")case 3:fmt.Println("今天星期三")case 4:fmt.Println("今天星期四")case 5:fmt.Println("今天星期五")case 6:fmt.Println("今天星期六")case 7, 0:fmt.Println("今天星期日")default:fmt.Println("数字不合法")}
}

总结

流程控制语句,在后面的课程中会用的比较多,是学习的重点。

Go语言基础语法-流程控制语句相关推荐

  1. java控制语句案例_Java基础语法—流程控制语句

    在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.所以,我们必须清楚每条语句的执行流程.而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能. 3.1 流程控制语句分类 ​ ...

  2. 【机器视觉】 HDevelop语言基础(四)-流程控制语句

    00. 目录 文章目录 00. 目录 01. 概述 02. if 03. if-else 04. elseif 05. while 06. until 07. for 08. continue 09. ...

  3. go语言打印日期_go语言基础:流程控制(4)-多重循环跳转控制

    1.6 多重循环控制 1.6.1 概念解析 1)多重循环就是指将一个循环嵌套在另一个循环体内,就形成了嵌套循环.在外边的for循环称之为外层for循环,在里面的for循环称之为内层for循环.2)实质 ...

  4. [GO语言基础] 五.顺序控制语句和条件控制语句(if、else、switch)

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了Golang的 ...

  5. GO 语言基础语法一 (快速入门 Go 语言)

    Go语言基础语法 一. golang 标识符,关键字,命名规则 二. golang 变量 三. golang 常量 四. golang 数据类型 五. golang 布尔类型 六. golang 数字 ...

  6. 【Day3 C语言基础语法学习-2】

    Day3 C语言基础语法学习-2 一.输入输出函数 1.1 getchar()/putcgar() 1.1.1getchar() 1.1.2 putchar 1.2 gets()/puts() 1.2 ...

  7. 一起学Go吧! Go语言基础语法篇二

    文章目录 前言 Go 语言指针 Go语言结构体 Go语言切片(Slice) Go 语言范围(Range) Go 语言Map(集合) Go 语言类型转换 Go 语言接口 Go 错误处理 Go并发 通道( ...

  8. Go语言基础语法--注释、基础结构2

    章节 GO语言基础语法--注释.基础结构(重要) 1.GO语言基础语法---注释.基础结构 //程序所属的包,且必须在源文件代码第一行 package mainimport "fmt&quo ...

  9. Java语言程序设计 上机实验2 掌握Java的基本语言成分和流程控制语句。 掌握Java中数组的使用,理解引用数据类型。 掌握String类的使用。...

      Java语言程序设计 上机实验2 实验目的: 掌握Java的基本语言成分和流程控制语句. 掌握Java中数组的使用,理解引用数据类型. 掌握String类的使用. 实验内容: 注:标(*)为选做内 ...

最新文章

  1. php文件数组,从文件到数组php
  2. MySql 修改外键 支持级联删除
  3. 渐统江湖的项目原型生成工具 -- Maven Archetype
  4. opencv-4.1.0-百度云盘下载链接-环境配置
  5. 计算机cpu 和 主板型号,CPU和主板怎么搭配?intel七代/八代/九代处理器和主板搭配对照表...
  6. 怎么在uefi解锁磁盘_系统重装时,如何秒判Windows启动是UEFI/Legacy?3步就够了!...
  7. Mysql使用存储过程与函数进行批量插入数据
  8. [原]Threads vs Processes in Linux 分析
  9. Tomcat源码分析(十)--部署器 转载
  10. 第 4 章(表达式和运算符)(4.1~ 4.7)
  11. 最新LAMP源码搭建网站平台PHP5.5.1 + Apache2.4.6 + mysql5.6.12
  12. 英文XP系统安装中文包
  13. python交互式程序设计导论小测验答案_最新网课答案2021学堂在线Python 交互式程序设计导论...
  14. 网页监控提醒工具WebMonitor
  15. VB6 TCP通讯服务端、客户端源码
  16. aes sm1 对比_SM1,SM2,SM3,SM4刨析
  17. Spring MVC 详解
  18. 计算机系统基本基本知识的说课稿,《计算机系统及工作原理》说课稿
  19. dowhile实现求水仙花数
  20. Word中公式变量解释时破折号对齐方法

热门文章

  1. 计算机辅助英语听说考试系统,英语听说训练平台
  2. lynx最新版本下载地址-2015-7
  3. 怎么用视频编辑软件把单声道变成立体声
  4. 幂函数、指数函数公式转换
  5. 迈动互联“三位一体”智慧医院系统建设不断创新
  6. 有人做脑电的情绪分类吗
  7. 仅仅有走过的路 才懂她的内容
  8. ISO, ASTM, JIS
  9. i386/libawt_xawt.so: libXext.so.6: cannot open shared object file
  10. 上面两点下面一个三角形_三角形的五心是三线共点的产物,聊一聊初中数学共点线的证明思路...