• 4、数据结构


    数据结构01

    数值处理

    取整

    日常用的四种

    • / 整数除法,截取整数部分
    • math.Ceil 向上取整 “理解为天花板,向上取值”
    • math.Floor 向下取整 “理解为地板,向下取值”
    • math.Round 四舍五入
    / 整数除法,截取整数部分
    func main() { 
    	fmt.Println(1/2, 5/2, 3/2)                 //0 2 1 
    	fmt.Println(-1/2, -5/2, -3/2)			   // 0 -2 -1
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    math.Ceil 向上取整 “理解为天花板,向上取值”
    func main() {
    	fmt.Println(math.Ceil(2.01), math.Ceil(2.5), math.Ceil(2.8))      // 3 3 3
    	fmt.Println(math.Ceil(-2.01), math.Ceil(-2.5), math.Ceil(-2.8))  // -2 -2 2
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    math.Floor  向下取整 “理解为地板,向下取值”
    func main() {
    	fmt.Println(math.Floor(2.01), math.Floor(2.5), math.Floor(2.8))  // 2 2 2
    	fmt.Println(math.Floor(-2.01), math.Floor(-2.5), math.Floor(-2.8))// -3 -3 -3
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    math.Round 四舍五入
    func main() {
    	fmt.Println(math.Round(2.01), math.Round(2.5), math.Round(2.8))
    	fmt.Println(math.Round(-2.01), math.Round(-2.5), math.Round(-2.8))
    	fmt.Println(math.Round(0.5), math.Round(1.5), math.Round(2.5),
    		math.Round(3.5))
    }
    2 3 3
    -2 -3 -3
    1 2 3 4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    常用数值处理

    fmt.Println(math.Abs(-2.7)) // 绝对值
    fmt.Println(math.E, math.Pi) // 常数
    fmt.Println(math.MaxInt16, math.MinInt16) // 常量,极值
    fmt.Println(math.Log10(100), math.Log2(8)) // 对数
    fmt.Println(math.Max(1, 2), math.Min(-2, 3)) // 最大值、最小值
    fmt.Println(math.Pow(2, 3), math.Pow10(3)) // 幂
    fmt.Println(math.Mod(5, 2), 5%2) // 取模
    fmt.Println(math.Sqrt(2), math.Sqrt(3), math.Pow(2, 0.5)) // 开方
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    标准输入Scan

    Scan:空白字符分割,回车提交。换行符当做空白字符

    前人经验,一定要有空格分隔,不要用什么花里胡哨的符合来当做分隔符,因为有时候%s string类型是把那些符号作为字符串的,当做一个整体

    package main
    
    import "fmt"
    
    func main() {
    	var n int
    	var err error
    	var (
    		name string
    		age  int
    	)
    	n, err = fmt.Scan(&name, &age)
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println(n, name, age)
    }
    
    面板输入zfl 20
    
    输出2 zfl 20
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    如果少一个数据,Scan就会阻塞;如果输入数据多了,等下回Scan读取。例如,一次性输入zfl 20 100 只读取前面两个

    如果使用短格式已经声明了n err 则再次使用n, err,不用声明

    func main() {
    	var (
    		name  string
    		age   int
    		heigh int
    		wget  int
    	)
    	n, err := fmt.Scan(&name, &age)      
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println(n, name, age)
    	n, err = fmt.Scan(&heigh, &wget)    //前面短格式已经声明了,不需要在此声明
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println(n, name, age, heigh, wget)
    }
    面板输入zfl 20
    
    输出2 zfl 20 继续输入
    100 174
    输出  2 zfl 20 100 174      后面的2 是第二次声明的n
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    如果使用,分隔
    func main() {
    	var (
    		name  string
    		age   int
    		heigh int
    		wget  int
    	)
    	n, err := fmt.Scan(&name, &age)      
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println(n, name, age)
    面板输入zfl,20,100,170
    20
    输出2 zfl,20,100,170 20   因为name为string类型所以,分隔的看做为一个整体的字符串
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在面板输入的任何都是string类型,通过Scan类型转换为声明的类型,想要的类型

    Scanf:读取输入,按照格式匹配解析。如果解析失败,立即报错,那么就会影响后面的Scanf。

    这个和Printf是一样的 只不过这个是按照类型输入

    package main
    
    import "fmt"
    
    func main() {
    	var n int
    	var err error
    	var name string
    	var age int
    	fmt.Print("Plz input your name and age: ")
    	n, err = fmt.Scanf("%s %d\n", &name, &age) // 这里要有\n以匹配回车
    
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println(n, name, age)
    }
    
    控制面板必须按照对应的类型输入不然的话会直接报错的 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    fmt.Scanf(“%s,%d”, &name, &age) 中%s会和后面的非空白字符分不清楚,用 abc,20 是匹配不上
    的,因为除空白字符外,都可以看做是字符串。所以,建议格式字符串中,一律使用空格等空白字符分割。

  • 相关阅读:
    Presto (三) --------- Presto 优化
    猿创征文|前端安全(XSS和CSRF)
    【Python百日进阶-数据分析】Day124 - Plotly Figure参数:饼图(二)
    一道签到题目 签到.zip
    【前端手写】call和apply方法
    java面试题及答案2020 大汇总
    SpringBoot 底层机制分析
    Java架构师缓存性能优化
    【数据集制作】用于语义分割,labelme4.5.13版本,实现按照指定颜色生成分割颜色批量转换json文件
    科技云报道:不卷自研大模型,金山办公如何创新生成式AI?
  • 原文地址:https://blog.csdn.net/xiaolong1155/article/details/134249208