[go学习笔记.第五章.流程控制] 1.if基本介绍

在程序中,程序运行的流程控制决定程序是如何执行的,主要有三大流程控制:

1).顺序控制

        程序从上到下逐行执行,中间没有任何判断和跳转

2).分支控制

        让程序有选择的执行

                (1).单分支

                (2).双分支

                (3).多分支

                (4).嵌套分支

3).循环控制

        让代码可以循环的执行

                (1).for循环

                (2).多重循环

下面从分支控制讲解

分支控制if-else

        (1).单分支

        (2).双分支

        (3).多分支

        (4).嵌套分支

1.单分支

//基本语法
if 条件表达式 {
    执行代码块
}
//说明:当条件表达式为true时,执行{}中的代码
//注意:{}必须有,就算只写一行代码

 

 细节说明:

        go的if有一个强大的地方就是条件判断语句里面允许声明一个变量,这个变量的作用域只能在该条件逻辑块中,其他地方不起作用

//go支持在if中,直接定义一个变量,如下
if age := 20; age > 18 {
    fmt.Println("你年龄大于18,应该为自己的行为负责~")
}

 2.双分支

//基本语法
if 条件表达式 {
    执行代码块1
} else {
    执行代码块2
}
//说明:当条件表达式成立时,执行代码块1中的代码,否则执行代码块2中的代码. {}也是必须有的
//编写一个程序:输入人的年龄,如果年龄大于18,则输出"你年龄大于18,该为自己的行为负责".否则输出"你的年龄小于18,只对你进行口头教育"

package main

import (
	"fmt"
)
func main()  {
	var age byte 
	fmt.Println("请输入你的年龄:")
	fmt.Scanln(&age)
	if age > 18 {
		fmt.Println("你年龄大于18,该为自己的行为负责")
	} else {
		fmt.Println("你的年龄小于18,只对你进行口头教育")
	}
}

//练习1
var x int = 4
if x > 2 {
    frm.Pringln("ok)
} 
else {
    fmt.Prinrtln("hello")
}
//编程错误: else 不能换行

//练习2
var x int = 4
if x > 2 {
    frm.Pringln("ok)
} else {
    fmt.Prinrtln("hello")
}
//正确,输出"ok"

//练习3
var x int = 4
if (x > 2) {
    frm.Pringln("ok)
} else {
    fmt.Prinrtln("hello")
}
//正确,输出"ok"; 虽然正确,但要求一般把if (x > 2) { 写成 if x > 2 {

//声明两个int32的变量并赋值,判断两数之和,如果大于50,输出hello workd,否则输出ou!
	var num1 int32
	var num2 int32
	fmt.Println("请输入两个变量,以空格区分:")
	fmt.Scanf("%d %d", &num1, &num2)
	var sum int32
	sum = num1 + num2
	if sum > 50 {
		fmt.Println("hello workd")
	} else {
		fmt.Println("ou!")
	}

	//声明两个float64的变量并赋值,判断第一个数大于10.0并且第二个数小于20.0,打印两数之和
	var f1 float64
	var f2 float64
	fmt.Println("请输入两个变量,以空格区分:")
	fmt.Scanf("%f %f", &f1, &f2)
	if f1 > 10.0 && f2 < 20.0{
		fmt.Println("f1 + f2 =", f1 + f2)
	}

	//判断一个年份是否是闰年,闰年的条件是符合下面条件之一:(1).年份能被4整除,但不能被100整除. (2)能被400整除
	var year int = 2000
	if (year % 4 == 0 && year 5 100 != 0) || year % 400 == 0 {
		fmt.Println(year,"是闰年")  
	}

3.多分支

//基本语法
if 条件表达式 {
    执行语句1
} else if {
    执行语句2
} 
...
    else {
    执行语句...
}

//案例:小明参加考试,和父亲达成协议,如果:
//成绩为100分,奖励一部手机
//成绩为80~99,奖励一部游戏机
//成绩为60~80,奖励一支钢笔
//成绩小于60,什么都没有
//请从键盘输入小明成绩,并加以判断
package main
import "fmt"
func main() {
    var score int
    fmt.Println("请输入成绩:")
    fmt.Scanln(&score)
    //多分支判断
    if score == 100 {
        fmt.Println("奖励一部手机")    
    } else if score > 80 && score <= 99 {
        fmt.Println("奖励一部游戏机") 
    } else if score > 60 && score <=80 {
        fmt.Println("奖励一支钢笔") 
    } else {
        fmt.Println("什么都没有") 
    }

    
    //使用陷阱: 只会输出ok1
    var n int = 20
    if n > 9 {
        fmt.Println("ok1")    //输出ok1
    } else if n > 6 {
        fmt.Println("ok2")
    } else if n > 3{
        fmt.Println("ok3")
    } else {
        fmt.Println("ok4")
    }
}
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 换成 b = false,能编译通过吗?如果能,结果是多少?
//答案:把b == false 换成 b = false,会发生编译错误,因为if的条件表达式不能是赋值语句
package main

import (
    "fmt"
    "math"
)

func main() {
    //求a * x^2 + b * x + c = 0方程的根,a,b,c分别为函数的参数,
	//如果b^2 - 4 * a *c > 0,则有两个根
	//如果b^2 - 4 * a *c = 0,则有一个根
	//如果b^2 - 4 * a *c < 0,则无根
	var a float64
	var b float64
	var c float64
	fmt.Println("请输入三个数a,b,c,求其a * x^2 + b * x + c = 0的解:")
	fmt.Println("请输入a:")
	fmt.Scanln(&a)	
	fmt.Println("请输入b:")
	fmt.Scanln(&b)
	fmt.Println("请输入c:")
	fmt.Scanln(&c)
	m := b * b - 4 * a * c
	if m > 0 {
		fmt.Println("有两个根:")
		var x1 = (-b + math.Sqrt(m)) / 2 * a
		fmt.Println("x1=", x1)
		var x2 = (-b - math.Sqrt(m)) / 2 * a
		fmt.Println("x2=", x2)
	} else if m == 0 {
		fmt.Println("有一个根:")
		var x1 = (-b + math.Sqrt(m)) / 2 * a
		fmt.Println("x1=", x1)
	} else {
		fmt.Println("无解")
	}
}

 4.嵌套分支

在一个分支结构中完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支,外面的分支称为外层分支

//基本语法
if 条件表达式 {
    if 条件表达式 {
        执行代码块1
    } else {
        执行代码块2
    }
}
//注意:嵌套分支不宜过多,建议控制在3层内
    //案例
    //出票系统:根据淡旺季的月份和年龄,打印票价
	//4~10 旺季
	//	成人(18~60) : 60元
	//	儿童(<18)	: 半价
	//	老人(>60)	: 1/3
	//淡季
	//	成人:40元
	//	其他:20元
	var mouth byte
	var age byte
	var price float64 = 100

	fmt.Println("请输入月份,年龄,以空格隔开:")
	fmt.Scanf("%d %d", &mouth, &age)
	if mouth >= 4 && mouth < 10 {
			if age >= 60 {
				fmt.Printf("%v 月份年龄在%v的游客票价为 %v", mouth, age, price / 3)
			} else if age >= 18 {
				fmt.Printf("%v 月份年龄在%v的游客票价为 %v", mouth, age, price)
			} else {
				fmt.Printf("%v 月份年龄在%v的游客票价为 %v", mouth, age, price)
			}
	} else {
		if age >= 18 {
			fmt.Printf("%v 月份年龄在%v的成人游客票价为 %v", mouth, age, price)
		} else {
			fmt.Printf("%v 月份年龄在%v的未成年游客票价为 %v", mouth, age, price / 2)
		}
	}
/**
 *参加百米运动会,如果用时8秒以内进入决赛,否则淘汰,并根据性别提示进入男子组还是女子组,输入成绩和性 
 *别,进行判断
 */
//1.定义一个变量,来接收跑步使用的秒速,float64
//2.定义一个变量,来接收性别,string
//3.因为判断是嵌套的判断,所以使用嵌套分支
var score float64
fmt.Println("请输入跑步的成绩:")
fmt.Scanln(&score)
if score >= 8 {
    var sex string
    fmt.Println("请输入性别 :")
    fmt.Scanln(&sex)
    if sex == "男" {
         fmt.Println("男子组")
    } else if sex == "女" {
        fmt.Println("女子组")
    }
} else {
    fmt.Println("out...")
}

 上一节:[go学习笔记.第四章.运算符] 7.位运算符,原码,反码,补码

 下一节:[go学习笔记.第五章.流程控制] 2.switch基本介绍

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值