所有字体里面显示字体类型都是英文怎么办(英文字体常见字体)
814
2022-05-30
这些年我学过各种编程语言,从最早的C语言到C++,再到C#、PHP、JAVA,再到IOS开发、Python,到最新的GO语言,学得是真的杂。有时候觉得编程语言恰恰是最简单的,而通过一门编程语言能够解决实际问题或深入底层才是其价值所在,并且当我们学好一门编程语言后,其他编程语言都非常类似,殊途同归,学起来也很迅速。
源码-:
https://github.com/eastmountyxz/Go-learning
前文参考:
[GO语言基础] 一.为什么我要学习Golang以及GO语言入门普及
[GO语言基础] 二.编译运行、语法规范、注释转义及API标准库知识普及
[GO语言基础] 三.变量声明、数据类型、标识符及编程练习12题
[GO语言基础] 四.算术运算、逻辑运算、赋值运算、位运算及编程练习
[GO语言基础] 五.顺序控制语句和条件控制语句(if、else、switch)
文章目录
一.顺序控制语句
二.条件控制语句
1.单分支控制
2.双分支控制
3.多分支控制
4.嵌套分支
三.switch分支控制
四.编程练习
1.题目
2.答案
五.总结
在程序中,程序运行的流程控制决定程序是如何执行的,也是大家必须要掌握的,主要有三大流程控制语句。这篇文章先介绍前两个流程控制。
顺序控制
分支控制
循环控制
一.顺序控制语句
顺序控制是指程序从上到下逐行地执行,中间没有任何判断和跳转。其流程图如下所示:
下面举个简单的案例说明。代码中没有判断,程序按照默认的流程执行,即顺序控制。
package main import "fmt" func main() { //假如还有97天放假 问多少个星期多少天 var num int = 97 var week int var day int week = num / 7 day = num % 7 fmt.Printf("%d个星期零%d天 \n", week, day) //定义一个变量保存华氏温度 转换成摄氏温度 //摄氏温度=5/9*(摄氏温度-32) var huashi float32 = 134.2 var sheshi float32 sheshi = 5.0 / 9 * (huashi - 32) fmt.Printf("%v 对应的摄氏温度=%v \n", huashi, sheshi) }
输出结果如下图所示:
注意,Golang中定义变量时采用合法的前向引用,比如正确形式:
func main() { var num1 int = 10 //声明num1 var num2 int = num1 + 20 //使用num1 fmt.Println(num2) }
错误形式:
func main() { var num2 int = num1 + 20 //使用num1 var num1 int = 10 //声明num1(x) fmt.Println(num2) }
二.条件控制语句
分支控制是让程序有选择执行,包括三种常见形式:
单分支
双分支
多分支
1.单分支控制
基本语法如下:
if 条件表达式 { 执行代码块 }
说明:当条件表达式为True时,就会执行括号中的代码块。 注意{}是必须有的,即使只写一行代码。对应的流程图如下所示:
案例分析:编写代码实现输入人的年龄,如果年龄大于18岁,则输出“你的年龄大于18岁”。
package main import "fmt" func main() { //输入年龄 var age int fmt.Println("请输入年龄:") fmt.Scanln(&age) //单分支判断 if age > 18 { fmt.Println("你的年龄大于18岁") } }
输出结果如下图所示:
注意事项:
在golang中支持在if语句直接定义一个变量,如下所示:
if n := 20; n > 5 { fmt.Println("定义变量的值数字大于5") }
2.双分支控制
基本语法如下:
if 条件表达式 { 执行代码块1 } else { 执行代码块2 }
说明:当条件表达式为True时,否则执行代码块2。注意{}是必须有的,即使只写一行代码。 对应的流程图如下所示:
案例分析:编写代码实现输入人的年龄,如果年龄大于18岁,则输出“你的年龄大于18岁”;否则输出“你的年龄小于等于18岁”。
package main import "fmt" func main() { //输入年龄 var age int fmt.Println("请输入年龄:") fmt.Scanln(&age) //单分支判断 if age > 18 { fmt.Println("你的年龄大于18岁") } else { fmt.Println("你的年龄小于等于18岁") } }
输出结果如下图所示:
注意事项:
条件表达式是age > 18,执行代码块1和执行代码块2
双分支只会执行其中一个分支
条件语句嵌套
案例:对下列代码,若有输出,指出输出结果。
package main import "fmt" func main() { var x int = 4 var y int = 1 //双分支嵌套判断 if (x > 2) { if (y > 2) { fmt.Println(x + y) fmt.Println("执行语句:----a----") } fmt.Println("执行语句:----b----") } else { fmt.Println("x is", x, "y is", y) fmt.Println("执行语句:----c----") } }
输出结果如下图所示:
条件判断
声明两个int32型变量并复制,判断两个数之和,如果大于等于50输出
声明两个float64型变量,判断第一个数大于10.0,并且第二个数小于20.0输出两数之和
声明两个int32型变量,判断两者之和是否能被3又能被5整除,输出信息
package main import "fmt" func main() { //判断两个数之和大于等于50 var n1 int32 = 10 var n2 int32 = 50 if n1 + n2 >= 50 { fmt.Println("相加结果大于等于50") } //判断第一个数大于10.0,并且第二个数小于20.0 var n3 float64 = 11.0 var n4 float64 = 17.0 if n3 > 10.0 && n4 < 20.0 { fmt.Println("输出两数之和 =", (n3+n4)) } //判断两者之和是否能被3又能被5整除 var n5 int32 = 10 var n6 int32 = 5 if (n5 + n6) % 3 == 0 && (n5 + n6) % 5 ==0 { fmt.Println("能被3和5整除") } }
输出结果如下图所示:
错误案例1:编译错误,缺少括号{}
syntax error: unexpected newline, expecting { after if clause
错误案例2:编译错误,else不能换行
syntax error: unexpected else, expecting }
3.多分支控制
基本语法如下:
if 条件表达式1 { 执行代码块1 } else if 条件表达式2 { 执行代码块2 } ... else { 执行代码块n }
说明:
先判断条件表达式1是否成立,如果为True,就执行代码块1
如果条件表达式1位False,就去判断条件表达式2是否成立,如果条件表达式2成立,就执行代码块2
依次类推,如果所有的条件表达式不成立,就执行else语句块
else不是必须的
注意:多分支语句只能有一个执行入口
对应的流程图如下所示:
案例分析:编写代码实现考试成绩判断,如果成绩大于等于90则为A,如果成绩[80,90)则为B,依次类推不及格为E。
package main import "fmt" func main() { //输入变量 var score int fmt.Println("请输入成绩:") fmt.Scanln(&score) //多分支判断 if score >= 90 { fmt.Println("该同学成绩为A") } else if score >=80 && score < 90 { fmt.Println("该同学成绩为B") } else if score >=70 && score < 80 { fmt.Println("该同学成绩为C") } else if score >=60 && score < 70 { fmt.Println("该同学成绩为D") } else { fmt.Println("该同学成绩为E") } fmt.Printf("成绩为:%d", score) }
输出结果如下图所示:
注意事项:
初学者需要注意多分支语句的条件判断,经常会陷入判断融合的情况,比如下图只会输出“ok1”。
案例1:融合bool类型多分支判断
package main import "fmt" func main() { //多分支判断 var b bool = true if b == false { fmt.Println("a") } else if b { fmt.Println("b") } else if !b { fmt.Println("c") } else { fmt.Println("d") } }
输出结果为“b”,如果将第一个判断修改成“b=false”是否能编译通过呢?答案是否,它会提示编译错误,因为if条件表达式不能是赋值语句。
案例2:输入一个字符,判断:
它是否为大写字母,如果是转换成小写;
它是否为小写字母,如果是转换层大写;
否则,输出原字符
package main import "fmt" func main() { var ch byte var res byte fmt.Println("请输入字母:") fmt.Scanf("%c", &ch) //大小写转换 if ch >= 'A' && ch <= 'Z' { res = ch + 32 } else if ch >= 'a' && ch <= 'z' { res = ch - 32 } else { res = ch } fmt.Printf("输入字母:%c %v \n", ch, ch) fmt.Printf("输出结果:%c %v \n", res, res) }
输出结果如下图所示,这道题目非常棒,希望大家熟练掌握。知识点包括:
ASCII码大小写转换方法
多分支条件语句
char字符型变量输入输出
4.嵌套分支
在一个分支结果中又完整嵌套另一个完整的分支结构,里面的分支结构称为内层分支,外面的分支结构称为外层分支。基本语法如下:
if 条件表达式 { if 条件表达式 { 语句块 } else { 语句块 } .... }
注意事项:
嵌套分支不宜过多,建议控制在三层内
案例分析:
参加百米运动会,如果用时8秒以内进入决赛,否则提示淘汰;并且根据性别提示进入男子组或女子组,我们输入成绩和性别进行相关判断。
package main import "fmt" func main() { var sex string var second float64 fmt.Println("请输入秒数:") fmt.Scanln(&second) //嵌套分支 if second <=8 { fmt.Println("请输入性别:") fmt.Scanln(&sex) if sex == "男" { fmt.Println("进入决赛的男子组") } else if sex == "女" { fmt.Println("进入决赛的女子组") } else { fmt.Println("性别输入错误") } } else { fmt.Println("淘汰未进入决赛") } }
输出结果如图所示:
三.switch分支控制
switch语句用于基于不同条件执行不同动作,每个case分支都是唯一的,从上往下逐一测试,直到匹配为止。
注意,匹配项后面不需要再加break
。
基本语法如下:
switch 表达式 { case 表达式1, 表达式2, ...: 语句块1 case 表达式3, 表达式4, ...: 语句块2 .... default: 语句块n }
对应的流程图如下所示:
switch的执行流程是先执行表达式,得到值,然后和case的表达式进行比较,如果相等,就匹配到;接着执行对应case的语句块,然后退出switch控制。
如果switch表达式的值没有和任何case的表达式匹配成功,则执行default的语句块,执行后退出switch的控制。
golang中的case后的表达式可以有多个,使用逗号间隔。
golang中的case语句块不需要写break,因为默认会有。即在默认情况下,当程序执行完case语句块后,就直接退出该switch控制结构。
下面简单实现一个switch语句案例。请编写程序实现输入某个字符,然后a表示周一,b表示周二,c表示周三,根据用户的输入依次显示信息。
package main import "fmt" func main() { var key byte fmt.Println("请输入a到g的一个字符") fmt.Scanf("%c", &key) //switch语句 switch key { case 'a': fmt.Println("今天星期一") case 'b': fmt.Println("今天星期二") case 'c': fmt.Println("今天星期三") case 'd': fmt.Println("今天星期四") case 'e': fmt.Println("今天星期五") case 'f': fmt.Println("今天星期六") case 'g': fmt.Println("今天星期天") default: fmt.Println("输入有误....") } }
输出结果如下图所示:
注意事项:
(1) case和switch后是一个表达式,即常量值、变量、一个有返回值的函数等
(2) case后的各个表达式值的数据类型,必须和switch的表达式数据类型一致
(3) case后面可以带多个表达式,使用逗号间隔,如下图所示:
(4) case后的表达式如果是常量值,则要求不能重复
(5) case后面不需要带break,程序匹配到一个case后就会执行对应的代码块,然后退出switch,如果一个都匹配不到,则执行default
(6) default语句不是必须的
(7) switch后也可以不带表达式,类似于if-else分支来使用;同时case中也可以对范围进行判断
package main import "fmt" func main() { //switch后不接表达式 类似于if-else分支来使用 var age int = 10 switch { case age == 10: fmt.Println("年龄为10") case age == 20: fmt.Println("年龄为20") default: fmt.Println("没有匹配到") } //case中也可以对范围进行判断 var score int = 90 switch { case score > 90: fmt.Println("成绩优秀...") case score >= 70 && score <= 90: fmt.Println("成绩良好...") case score >=60 && score <70: fmt.Println("成绩及格...") default: fmt.Println("不及格") } }
(8) switch后也可以直接声明定义变量,分好结束,但不推荐使用。
(9) switch穿透fallthrough。如果在case语句块后增加fallthrough,则会继续执行下一个case,也叫switch穿透。
package main import "fmt" func main() { //switch穿透fallthrough var age int = 10 switch age { case 10: fmt.Println("年龄为10") fallthrough //默认只能穿透一层 case 20: fmt.Println("年龄为20") fallthrough case 30: fmt.Println("年龄为30") default: fmt.Println("没有匹配到") } }
输出结果如下图所示:
(10) Type Switch。switch语句还可以被用于type-switch来判断某个interface(接口)变量中实际指向的变量类型。后续文章会补充interface。
package main import "fmt" func main() { //type-switch var x interface{} //定义空接口 var y = 10.0 x = y switch i := x.(type) { case nil: fmt.Printf("x的类型是:%T", i) case int: fmt.Printf("x是int型") case float64: fmt.Printf("x是float64型") //输出结果 case func(int) float64: fmt.Printf("x是func(int)型") case bool, string: fmt.Printf("x是bool或string型") default: fmt.Println("未知类型") } }
最后简单总结switch和if的区别:
如果判断的具体数值不多,而且符合整数、浮点数、字符、字符串这几种类型,建议使用switch语句,简洁高效。
其他情况:对区间判断和结果为bool类型的判断使用if,并且if的使用范围更广。
四.编程练习
1.题目
(1) 判断一个年份是否是闰年,闰年的条件是符合以下二者之一。
年份能被4整除,但不能被100整除
年份能被400整除
(2) 请分别使用if和switch语句实现成绩判断,输出分数对应的等级。
[100, 90] => A
[80, 90) => B
[70, 80) => C
[60, 70) => D
[0, 60) => E
(3) 根据淡旺季的月份和年龄,实现一个票价系统。
旺季:4-10月
成人(18-60岁):60
儿童(<18):半价
老人(>60):1/3
淡季
成人:40
其他:20
(4) 使用switch语句实现:根据用户输入月份,输出对应春夏秋冬季节。
(5) 求ax^2+bx+c=0方程的根。a、b、c分别为函数的参数,如果b^2-4ac>0,则有两个解;如果b^2-4ac=0,则有一个解;否则无解。
提示:x1=(-b+sqrt(b^2-4ac))/2a
提示:x2=(-b-sqrt(b^2-4ac))/2a
2.答案
(1) 判断一个年份是否是闰年,闰年的条件是符合以下二者之一。
年份能被4整除,但不能被100整除
年份能被400整除
代码如下:
package main import "fmt" func main() { //判断闰年 var year int fmt.Println("请输入年份:") fmt.Scanln(&year) if (year % 4 == 0 && year % 100 !=0) || year % 400 == 0 { fmt.Println(year, "是闰年~") } else { fmt.Println(year, "不是闰年~") } }
输出结果如下图所示:
(2) 请分别使用if和switch语句实现成绩判断,输出分数对应的等级。
[100, 90] => A
[80, 90) => B
[70, 80) => C
[60, 70) => D
[0, 60) => E
代码如下:
package main import "fmt" func main() { var score int fmt.Println("请输入分数:") fmt.Scanln(&score) //if判断 if score >= 90 { fmt.Println("分数等级为A") } else if score >= 80 && score < 90 { fmt.Println("分数等级为B") } else if score >= 70 && score < 80 { fmt.Println("分数等级为C") } else if score >= 60 && score < 70 { fmt.Println("分数等级为D") } else { fmt.Println("不及格等级为E") } //switch判断 switch { case score > 90: fmt.Println("分数等级为A") case score >= 80 && score < 90: fmt.Println("分数等级为B") case score >=70 && score < 80: fmt.Println("分数等级为C") case score >=60 && score < 70: fmt.Println("分数等级为D") default: fmt.Println("不及格等级为E") } }
输出结果如下图所示:
(3) 根据淡旺季的月份和年龄,实现一个票价系统。
旺季:4-10月
成人(18-60岁):60
儿童(<18):半价
老人(>60):1/3
淡季
成人:40
其他:20
代码如下:
package main import "fmt" func main() { //出票系统 var month byte var age byte var price float64 = 60.0 fmt.Println("请输入游玩月份:") fmt.Scanln(&month) fmt.Println("请输入游客年龄:") fmt.Scanln(&age) if month >= 4 && month <= 10 { //旺季 if age > 60 { fmt.Printf("%v月 票价 %v 年龄 %v \n", month, price / 3, age) } else if age >= 18 { fmt.Printf("%v月 票价 %v 年龄 %v \n", month, price, age) } else { fmt.Printf("%v月 票价 %v 年龄 %v \n", month, price / 2, age) } } else { //淡季 if age >= 18 && age < 60 { fmt.Println("淡季成人票价 40") } else { fmt.Println("淡季儿童和老人票价 20") } } }
输出结果如下图所示:
(4) 使用switch语句实现:根据用户输入月份,输出对应春夏秋冬季节。
代码如下:
package main import "fmt" func main() { //季节判断 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("Error Input") } }
输出结果如下图所示:
(5) 求ax^2+bx+c=0方程的根。a、b、c分别为函数的参数,如果b^2-4ac>0,则有两个解;如果b^2-4ac=0,则有一个解;否则无解。
提示:x1=(-b+sqrt(b^2-4ac))/2a
提示:x2=(-b-sqrt(b^2-4ac))/2a
注意,需要引入math.Sqrt(num)即可求平方根
package main import "fmt" import "math" func main() { /* 分析思路 1) a,b,c是给出的变量 2) 使用给出的数学公式和多分支语句计算 3) 导入math包计算平方根 */ var a float64 var b float64 var c float64 fmt.Println("请输入abc三个变量") fmt.Scanf("%f %f %f", &a, &b, &c) fmt.Printf("a=%v b=%v c=%v \n", a, b, c) m := b * b - 4 * a * c if m > 0 { x1 := (-b + math.Sqrt(m)) / (2 * a) x2 := (-b - math.Sqrt(m)) / (2 * a) fmt.Printf("x1=%v x2=%v", x1, x2) } else if m == 0 { x1 := (-b + math.Sqrt(m)) / (2 * a) fmt.Printf("x1=%v", x1) } else { fmt.Printf("无解") } }
输出结果如下图所示:
五.总结
写到这里,这篇基础性Golang文章介绍完毕,希望您喜欢!祝大家新年快乐,牛气冲天,也希望自己能分享更优秀、更深入的文章。
一.顺序控制语句
二.条件控制语句
1.单分支控制
2.双分支控制
3.多分支控制
4.嵌套分支
三.switch分支控制
四.编程练习
1.题目
2.答案
Go基本运算和进制转换了解后,后面的文章将详细介绍Go语言的条件语句和循环语句知识,并结合案例进行普及。希望这篇基础性文章对您有帮助,写得不好的地方还请海涵。同时非常感谢参考文献中的大佬们的文章分享,尤其是韩顺平老师,深知自己很菜,得努力前行。也希望自己能深入下去,未来四年好好研究Go编程语言,做更多实际工程,写更好的文章,共勉!
源代码-:
https://github.com/eastmountyxz/Go-learning
2020年在github的绿瓷砖终于贴完了第一年提交2100余次,获得1500多+stars,开源93个仓库,300个粉丝。挺开心的,希望自己能坚持在github打卡五年,督促自己不断前行。简单总结下,最满意的资源是YQ爆发时,去年2月分享的舆情分析和情感分析,用这系列有温度的代码为武汉加油;最高赞的是Python图像识别系列,也获得了第一位来自国外开发者的贡献补充;最花时间的是Wannacry逆向系列,花了我两月逆向分析,几乎成为了全网最详细的该蠕虫分析;还有AI系列、知识图谱实战、CVE复现、APT报告等等。当然也存在很多不足之处,希望来年分享更高质量的资源,也希望能将安全和AI顶会论文系列总结进来,真诚的希望它们能帮助到大家,感恩有你,一起加油~
感谢华为云的礼物,希望能与大家一起在华为云社区共同进步,且看且珍惜。
原文地址:https://blog.csdn.net/Eastmount/article/details/113804706
(By:娜璋AI之家 Eastmount 2021-08-10 星期二 夜于贵阳 )
参考文献:
Go官网:https://golang.org/
韩老师视频:https://www.bilibili.com/video/BV1pt41127FZ
https://www.runoob.com/go/go-tutorial.html
Go中文网在线标准库文档:https://studygolang.com/pkgdoc
《C程序设计》谭浩强老师
《GO高级编程》
Go
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。