美文网首页
第03天(复合类型)_04

第03天(复合类型)_04

作者: lucas777 | 来源:发表于2019-12-11 20:35 被阅读0次

18_切片和底层数组关系.go

package main //必须有个main包

import "fmt"

func main() {
    a := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

    //新切片
    s1 := a[2:5] //从a[2]开始,取3个元素
    s1[1] = 666
    fmt.Println("s1 = ", s1)
    fmt.Println("a = ", a)

    //另外新切片
    s2 := s1[2:7]
    s2[2] = 777
    fmt.Println("s2 = ", s2)
    fmt.Println("a = ", a)
}

19_append函数的使用.go

package main //必须有个main包

import "fmt"

func main() {
    s1 := []int{}
    fmt.Printf("len = %d, cap = %d\n", len(s1), cap(s1))
    fmt.Println("s1 = ", s1)

    //在原切片的末尾添加元素
    s1 = append(s1, 1)
    s1 = append(s1, 2)
    s1 = append(s1, 3)
    fmt.Printf("len = %d, cap = %d\n", len(s1), cap(s1))
    fmt.Println("s1 = ", s1)

    s2 := []int{1, 2, 3}
    fmt.Println("s2 = ", s2)
    s2 = append(s2, 5)
    s2 = append(s2, 5)
    s2 = append(s2, 5)
    fmt.Println("s2 = ", s2)
}

20_append扩容特点.go

package main //必须有个main包

import "fmt"

func main() {
    //如果超过原来的容量,通常以2倍容量扩容
    s := make([]int, 0, 1) //容量为1
    oldCap := cap(s)
    for i := 0; i < 20; i++ {
        s = append(s, i)
        if newCap := cap(s); oldCap < newCap {
            fmt.Printf("cap: %d ===> %d\n", oldCap, newCap)

            oldCap = newCap
        }
    }

}

21_copy的使用.go

package main //必须有个main包

import "fmt"

func main() {
    srcSlice := []int{1, 2}
    dstSlice := []int{6, 6, 6, 6, 6}

    copy(dstSlice, srcSlice)
    fmt.Println("dst = ", dstSlice)
}

22_切片做函数参数.go

package main //必须有个main包

import "fmt"
import "math/rand"
import "time"

func InitData(s []int) {
    //设置种子
    rand.Seed(time.Now().UnixNano())

    for i := 0; i < len(s); i++ {
        s[i] = rand.Intn(100) //100以内的随机数
    }
}

//冒泡排序
func BubbleSort(s []int) {
    n := len(s)

    for i := 0; i < n-1; i++ {
        for j := 0; j < n-1-i; j++ {
            if s[j] > s[j+1] {
                s[j], s[j+1] = s[j+1], s[j]
            }
        }
    }
}

func main() {
    n := 10

    //创建一个切片,len为n
    s := make([]int, n)

    InitData(s) //初始化数组
    fmt.Println("排序前: ", s)

    BubbleSort(s) //冒泡排序
    fmt.Println("排序后: ", s)
}

23_猜数字游戏.go

package main //必须有个main包

import "fmt"
import "math/rand"
import "time"

func CreatNum(p *int) {
    //设置种子
    rand.Seed(time.Now().UnixNano())

    var num int
    for {
        num = rand.Intn(10000) //一定是4位数
        if num >= 1000 {
            break
        }
    }

    //fmt.Println("num = ", num)

    *p = num

}

func GetNum(s []int, num int) {
    s[0] = num / 1000       //取千位
    s[1] = num % 1000 / 100 //取百位
    s[2] = num % 100 / 10   //取百位
    s[3] = num % 10         //取个位
}

func OnGame(randSlice []int) {
    var num int
    keySlice := make([]int, 4)

    for {
        for {
            fmt.Printf("请输入一个4位数:")
            fmt.Scan(&num)

            // 999 < num < 10000
            if 999 < num && num < 10000 {
                break
            }

            fmt.Println("请输入的数不符合要求")
        }
        //fmt.Println("num = ", num)
        GetNum(keySlice, num)
        //fmt.Println("keySlice = ", keySlice)

        n := 0
        for i := 0; i < 4; i++ {
            if keySlice[i] > randSlice[i] {
                fmt.Printf("第%d位大了一点\n", i+1)
            } else if keySlice[i] < randSlice[i] {
                fmt.Printf("第%d位小了一点\n", i+1)
            } else {
                fmt.Printf("第%d位猜对了\n", i+1)
                n++
            }
        }

        if n == 4 { //4位都猜对了
            fmt.Println("全部猜对!!!")
            break //跳出循环
        }
    }
}

func main() {
    var randNum int

    //产生一个4位的随机数
    CreatNum(&randNum)
    //fmt.Println("randNum: ", randNum)

    randSlice := make([]int, 4)
    //保存这个4位数的每一位
    GetNum(randSlice, randNum)
    //fmt.Println("randSlice = ", randSlice)

    /*
        n1 := 1234 / 1000 //取商
        //(1234 % 1000) //取余数,结果为234   234/100取商得到2
        n2 := 1234 % 1000 / 100
        fmt.Println("n1 = ", n1)
        fmt.Println("n2 = ", n2)
    */

    OnGame(randSlice) //游戏

}

相关文章

  • 第03天(复合类型)_04

    18_切片和底层数组关系.go 19_append函数的使用.go 20_append扩容特点.go 21_cop...

  • 第4章 复合类型

    复习题 如何声明下述数据?a. actor是由30个char组成的数组。答:char actor[30];。b. ...

  • 复合类型

    引用 引用(reference)为对象起了另外一个名字,引用类型应用(refers to)另外一种类型。通过将声明...

  • [C++ 语言入门到精通] 目录大纲

    第1章 C++简介和历史 第2章 进入C++的世界 第3章 数据类型和运算符 第4章 复合类型 第5章 循环控制和...

  • C++复合类型之引用和指针

    1. 什么是复合类型 复合类型(compound type)是指基于其它类型定义的类型(eg: 引用和指针)。 2...

  • Go复合数据类型

    复合数据类型:是以不同的方式组合基本类型可以构造出来的复合数据类型,在Golang中复合数据类型有数组、slice...

  • C语言基础 之 复合数据类型和类型定义

    复合类型是一种自定义类型,用于扩展基本数据类型。复合数据类型包括:结构类型、共用体类型和枚举类型。 用 typed...

  • C++与python差异(一)

    内置数据类型(1)c++的内置类型包括基本类型和复合类型,基本类型有算术类型和空类型两种,复合类型是基于基本类型定...

  • 如何实现 a == c, b == c成立,a == b 不成立

    在JavaScript中,利用 复合数据类型的拆箱,使两个不同的复合数据类型拆箱得到的值相同。 原理:复合数据类型...

  • 第03天(复合类型)_01

    01_指针基本操作.go 02_不要操作没有合法指向的内存.go 03_new函数的使用.go 04_普通变量做函...

网友评论

      本文标题:第03天(复合类型)_04

      本文链接:https://www.haomeiwen.com/subject/ohuagctx.html