ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Go语言基础03(程序流程控制)

2021-12-25 15:05:56  阅读:133  来源: 互联网

标签:语句 03 fmt 程序流程 else case Go 表达式


Go语言基础(程序流程控制)


  \ \quad  在程序中,程序运行的流程控制决定了程序是如何执行的,主流的程序设计语言一般有三大流程控制语句:分别是 顺序控制分支控制循环控制

  \ \quad  Go语言的常用流程控制有ifforswitchgoto

一、顺序控制

1.1 顺序控制介绍

  \ \quad  所谓的顺序控制就是程序从上到下逐行的执行,中间没有任何判断和跳转。

1.2 流程图

1.3 顺序控制举例和注意事项

  • 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
    	fmt.Println(num2)
    }
    

二、分支控制

  \ \quad  在实际应用中,有时需要通过某个判断来决定任务是否执行或者执行的方式。对于这样的情况,仅有顺序结构控制是不够的,需要选择结构,也就是分支控制语句。

  \ \quad  所谓的分支控制就是让程序执行到某个位置的时候有一个判断,判断结果为布尔值,如果布尔值为true则执行某一块代码,布尔值为false则执行另一块代码。分支控制主要有三种形式:单分支、双分支和多分支。

2.1 单分支结构

  • 若条件成立时需要执行某些操作,不成立时不执行操作,则需要编写单分支结构。
  • Golang中的if语句实现了单分支控制结构,用来实现有条件地执行语句的功能。
  • if语句单分支结构的语法形式如下,当条件判断表达式为true时,就会执行{ }的代码,如果为false则不执行。
    if condition {
    	/* 在条件判断表达式为 true 时执行 */
    }
    
    • if:条件判断使用的关键字。
    • condition:条件判断表达式。
  • Go语言中的if语句后面的条件判断表达式,不需要也不能加小括号,即(),这是Go语言与其他语言if语句的区别。
  • Go语言if语句后面的大括号必须跟条件表达式写在一行,不能换行写,换行写会编译错误。
  • Go语言if语句{ }是必须有的,就算只写一行代码也必须加上。
  • Goif还有一个强大的地方就是判断条件语句里面允许声明一个变量,这个变量的作用域只能在该条件逻辑块内,其他地方就不起作用了。
  • 单分支结构流程图:
  • 示例:判断年龄是否成年
    func main() {
    	age := 20
    	if age > 18 {
    		fmt.Println("您已经成年")
    	}
    }
    
    • 条件判断语句里面声明变量
      func main() {
      	if age := 20; age >= 18 {
      		fmt.Println("您已经成年")
      	}
      }
      

2.2 双分支结构

  • 若条件成立时需要执行某些操作,不成立时需要执行另外一些操作,则需要编写双分支结构。
  • Go语言中,关键字else是用于在if条件不满足时执行的代码逻辑。else后面一定不能加判断条件,否则会语法错误。
  • Go编程语言中if...else语句的语法如下if在条件判断表达式为true时,其后紧跟的语句块执行,如果为false则执行else语句块。
    if condition {
    	/* 在条件判断表达式为 true 时执行 */
    } else {
    	/* 在条件判断表达式为 false 时执行 */
    }
    
    • if:条件判断使用的关键字。
    • condition:条件判断表达式。
  • 双分支结构流程图:
  • 示例:判断年龄是否成年,如果未成年则输出年龄
    func main() {
    	if age := 16; age > 18 {
    		fmt.Println("您已经成年")
    	} else {
    		fmt.Printf("%d岁还未成年", age)
    	}
    }
    

2.3 多分支结构

2.3.1 if … else if 分支控制

  • 若条件成立时需要执行某些操作,不成立时需要执行后续多个逻辑判断,直到满足条件时执行某些操作,则需要编写多分支结构。
  • Go语言中,关键字if是用于测试某个条件(布尔型逻辑型)的语句是否满足一定的条件,如果满足特定的条件,则会执行if后由大括号{ }括起来的代码块,否则就忽略该代码块继续执行后续的代码。
  • else if关键字用于在if语句条件不满足的情况下,继续执行else if里面的逻辑判断,如果满足条件则执行else if大括号里面的逻辑。
  • else if语句只能写在if语句的大括号的后面,且else if语句可以写任意多个。
  • Go编程语言中if ... else if语句的语法如下if在条件判断表达式为true时,其后紧跟的语句块执行,如果为false则执行后续多个else if语句块,直到else if的条件判断表达式为true时执行紧跟的语句块。
    if condition {
    	// do something
    } else if condition1 {
    	// do something1
    } else if condition2 {
    	// do something2
    }
    	...... 
    	
    } else if conditionN {
    	// do somethingN
    }
    
    • Go语言中的else if语句后面的条件判断表达式,同样也不需要加小括号,即(),类似于if语句。同理,Go语言else if语句后面的大括号必须跟else if条件表达式写在一行,不能换行写,换行写会编译错误。
    • 上述语句,如果if语句的条件表达式成立,那么就会只执行if的逻辑do something,如果if条件表达式不成立,那么会判断表达式condition1
    • 如果表达式condition1成立,那么会执行do something1,仅仅在表达式condition1不成立时,才会判断表达式condition2,如果表达式condition2成立,那么执行do something2,否则,继续向后执行直到条件判断表达式成立。如果所有条件判断表达式均不成立,则执行else代码块。
  • 多分支结构流程图:
    在这里插入图片描述
  • 示例:判断考试成绩等级
    func main() {
    	var score float64
    	fmt.Print("请输入成绩:")
    	fmt.Scanf("%f", &score)
    	if score >= 90 {
    		fmt.Printf("%.2f分是A等", score)
    	} else if score >= 80 {
    		fmt.Printf("%.2f分是B等", score)
    	} else if score >= 70 {
    		fmt.Printf("%.2f分是C等", score)
    	} else if score >= 60 {
    		fmt.Printf("%.2f分是D等", score)
    	} else {
    		fmt.Printf("%.2f分是E等", score)
    	}
    }
    

2.3.2 switch 语句

  • switch语句的作用类似于if语句,用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上至下逐一测试,直到匹配为止。
  • Go语言的switch语句不同于其他语言的switch语句,Go语言的switch语句的表达式不需要为常量,且匹配项后面也不需要再加break语句case语句最后自带break语句。
  • switch默认情况下case最后自带break语句,匹配成功后就不会执行其他 case,如果我们需要执行后面的 case,可以使用 fallthrough 。
  • Go编程语言中switch语句的语法如下
    switch var1 {
    	case val2:
    		...
    	case val3:
    		...
    	......
    	case valN:
    		...
    	default:
    		...
    }
    
    • switch:判断使用的关键字。
    • var1:需要判断的变量或条件表达式。
    • case:每一个分支前面需要使用的关键字。
    • var2:判断var1是否满足var2的条件。
    • varN:判断var1是否满足varN的条件。
    • default:如果var1不满足上述所有的case,则会执行default分支。
    • :变量var1可以是任何数据类型,而 val1val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型,或者最终结果为相同类型的表达式。
  • 可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3
    func main() {
    	// 请用户输入年份,再输入月份,输出该月的天数(需要考虑闰年)
    	var year int
    	var month int
    	fmt.Print("请输入年份:")
    	fmt.Scanf("%d\n", &year)
    	fmt.Print("请输入月份:")
    	fmt.Scanf("%d\n", &month)
    	switch month {
    	case 1, 3, 5, 7, 8, 10, 12:
    		fmt.Printf("%d年%d月有31天", year, month)
    	case 4, 6, 9, 11:
    		fmt.Printf("%d年%d月有30天", year, month)
    	case 2:
    		if year%400 == 0 || year%4 == 0 && year%100 != 0 {
    			fmt.Printf("%d年%d月有29天", year, month)
    		} else {
    			fmt.Printf("%d年%d月有28天", year, month)
    		}
    	default:
    		fmt.Printf("%d年%d月不是一个正确的年月", year, month)
    	}
    }
    
  • switch语句流程图:
    在这里插入图片描述
  • 使用fallthrough会强制执行后面的case语句,fallthrough不会判断下一条case的表达式结果是否为 true
    func main() {
    	// 请用户输入年份,再输入月份,输出该月的天数(需要考虑闰年)
    	var year int
    	var month int
    	fmt.Print("请输入年份:")
    	fmt.Scanf("%d\n", &year)
    	fmt.Print("请输入月份:")
    	fmt.Scanf("%d\n", &month)
    	switch month {
    	case 1,3,5,7,8,10,12:
    		fmt.Printf("%d年%d月有31天", year, month)
    	case 4:
    		fallthrough
    	case 6:
    		fallthrough
    	case 9:
    		fallthrough
    	case 11:
    		fmt.Printf("%d年%d月有30天", year, month)
    	case 2:
    		if year%400 == 0 || year%4 == 0 && year%100 != 0 {
    			fmt.Printf("%d年%d月有29天", year, month)
    		} else {
    			fmt.Printf("%d年%d月有28天", year, month)
    		}
    	default:
    		fmt.Printf("%d年%d月不是一个正确的年月", year, month)
    	}
    }
    

标签:语句,03,fmt,程序流程,else,case,Go,表达式
来源: https://blog.csdn.net/m0_52650517/article/details/122133283

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有