• 13.3 Go章节练习题


    13.3 Go章节练习题

    练习1:定义1个整数,1个小数,访问变量,打印数值和类型,更改变量的数值,打印数值

    练习2:同时定义3个整数,

    练习3:同时定义3个字符串

    练习4:定义变量后,没有初始值,直接访问变量?

    练习5:尝试定义全局变量

    练习6:常量组中定义常量,如果没有赋值和上一行一致,写法?

    package main
    
    import "fmt"
    
    //全局变量,函数体外
    var (
        addr  string
        score float64
    )
    
    func main() {
        //局部变量,简短声明赋值
        i := 100
        f := 99.9
        fmt.Printf("类型:%T    值%v
    ", i, i)
        fmt.Printf("类型:%T    值%v
    ", f, f)
    
        //同时定义三个整数
        n1, n2, n3 := 1, 2, 3
        fmt.Println(n1, n2, n3)
        s1, s2, s3 := "断剑重铸之日", "骑士归来之时", "稳住我能carry"
        fmt.Println(s1, s2, s3)
        fmt.Println(s2)
        fmt.Println(s3)
    
        //定义变量,默认值,值类型可以修改,引用类型nil不得直接使用
        var name string
        fmt.Println(name)
        var age int
        fmt.Println(age)
        var m map[string]string
        fmt.Println(m)
    
        //读取全局变量
        addr = "昌平沙河"
        score = 99.99
        fmt.Println(addr)
        fmt.Println(score)
    
        fmt.Println(".........我是分割线.......")
        //常量定义
        const (
            sunday = iota
            Monday
            Tuesday
            Wedensday = "星期三"
            Thursday  = "星期四"
            Friday    = iota
            Saturday
        )
        fmt.Println(sunday)
        fmt.Println(Tuesday)
        fmt.Println(Friday)
        fmt.Println(Saturday)
    }
    

    1.每种基本类型的变量,各声明5个变量,并打印变量的数值,以及类型。

    2.声明几个常量。

    3.交换2个变量的值。

    4.定义一个四位数的整数,分别获取各个位数的值

    5.让用户输入账号密码, 并且接受用户账号密码

    package main
    
    import "fmt"
    
    func main() {
        s1 := "我是字符串" //string
        b1 := 'w'
        var b2 byte = 'w' //byte是uint8的别名
        var b3 rune = '于' //rune是int32的别名,字符本质存的是字节码
        f1 := 123.45
        i1 := 12345678
        b4 := true
        b5 := false
        fmt.Printf("%T %v
    ", s1, s1)
        fmt.Printf("%T %v %c
    ", b1, b1, b1)
        fmt.Printf("%T %v %c
    ", b2, b2, b2)
        fmt.Printf("%T %v %c
    ", b3, b3, b3)
        fmt.Printf("%T %v 
    ", f1, f1)
        fmt.Printf("%T %v 
    ", i1, i1)
        fmt.Printf("%T %v
    ", b4, b4)
        fmt.Printf("%T %v
    ", b5, b5)
        fmt.Println("-----分割线----")
        //定义赋值常量
        const pi = 3.1415926
        const (
            Sunday = "星期天"
            Monday = 1
        )
        fmt.Println("-----分割线----")
        //交换变量的值
        a := 3
        b := 2
        a, b = b, a
        fmt.Println(a)
        fmt.Println(b)
        fmt.Println("-----分割线----")
        //定义一个四位数的整数,分别获取各个位数的值
        num1 := 1983
        geWei := num1 % 10
        shiWei := (num1 / 10) % 10
        baiWei := (num1 / 100) % 10
        qianWei := (num1 / 1000) % 10
        fmt.Println(geWei)
        fmt.Println(shiWei)
        fmt.Println(baiWei)
        fmt.Println(qianWei)
    
        //键盘输入账号密码且打印
        var username string
        var password string
        fmt.Print("输入账号:")
        fmt.Scan(&username)
        fmt.Print("输入密码:")
        fmt.Scan(&password)
        fmt.Printf("用户输入的账号%s,密码%s
    ", username, password)
    }
    

    1.使用if语句完成:给定数字:如果为1,就输出星期一,如果为2,就输出星期二,以此类推,一直到7,输出星期日。如果是其他数字,就输出"错误信息"。

    2.作业1改为switch方式

    3.使用if语句完成:给定月份,输出该月属于哪个季节。3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季

    4.作业3改用switch方式

    5.模拟登录,键盘上输入用户名和密码,如果用户名是admin密码是123,或者用户名是zhangsan密码是zhangsan123,都表示可以登录。否则打印登录失败

    6.使用if语句完成:给定年龄,如果小于18岁,输出青少年,如果大于等于18并且小于30岁,输出青年,否则输出中老年。

    7.用switch完成简单 "+-*/"计算器

    8.随机猜数游戏

    9.100以内,计算奇数和,偶数和

    10.百钱买白鸡 百元百鸡,一百元钱买100只鸡,公鸡5元一只,母鸡3元一只,小鸡1元3个。

    package main
    
    import (
        "fmt"
        "math/rand"
        "time"
    )
    
    func testIf() {
        var num int
        fmt.Println("请输入数字:1-4")
        fmt.Scan(&num)
        if num == 1 {
            fmt.Println("星期一")
        } else if num == 2 {
            fmt.Println("星期二")
        } else if num == 3 {
            fmt.Println("星期三")
        } else if num == 4 {
            fmt.Println("星期四")
        } else {
            fmt.Println("输入有误,重新输入")
        }
    }
    func testSwitch() {
        var num int
        fmt.Println("请输入数字:1-4")
        fmt.Scan(&num)
        switch num {
        case 1:
            fmt.Println("星期一")
        case 2:
            fmt.Println("星期二")
        case 3:
            fmt.Println("星期三")
        case 4:
            fmt.Println("星期四")
        default:
            fmt.Println("输入有误,重新输入")
        }
    }
    func testIf2() {
        var num int
        fmt.Println("请输入月份")
        fmt.Scan(&num)
        if num == 3 || num == 4 || num == 5 {
            fmt.Println("春天来了,又到了...")
        } else if num == 6 || num == 7 || num == 8 {
            fmt.Println("夏天到了,又可以....")
        } else if num == 9 || num == 10 || num == 11 {
            fmt.Println("秋天到了,适合休息,秋游")
        } else if num == 12 || num == 1 || num == 2 {
            fmt.Println("春天到了,万物冬眠")
        } else {
            fmt.Println("输入月份有误")
        }
    }
    func testSwitch2() {
        var num int
        fmt.Println("请输入月份")
        fmt.Scan(&num)
        switch num {
        case 3, 4, 5:
            fmt.Println("春困")
        case 6, 7, 8:
            fmt.Println("夏乏")
        case 9, 10, 11:
            fmt.Println("秋天适合郊游")
        case 12, 1, 2:
            fmt.Println("冬眠")
        default:
            fmt.Println("输入月份有误")
        }
    }
    func userPwd() {
        var username string
        var pwd string
        fmt.Println("请输入用户名:")
        fmt.Scan(&username)
        fmt.Println("请输入密码:")
        fmt.Scan(&pwd)
        if username == "oldboy" && pwd == "oldboy666" {
            fmt.Println("登录成功")
        } else {
            fmt.Println("登录失败")
        }
    }
    
    func ageTest() {
        var age int
        fmt.Println("请输入你的年纪:")
        fmt.Scan(&age)
        if age < 18 {
            fmt.Println("你好,小老弟")
        } else if age > 18 && age < 30 {
            fmt.Println("你好,青年")
        } else {
            fmt.Println("你个遭老头子,坏得很")
        }
    }
    func switchCalc() {
        var num1 int
        fmt.Print("输入num1:")
        fmt.Scan(&num1)
        var num2 int
        fmt.Print("输入num2:")
        fmt.Scan(&num2)
        var oper string
        fmt.Println("输入运算符:")
        fmt.Scan(&oper)
        switch oper {
        case "+":
            fmt.Println(num1 + num2)
        case "-":
            fmt.Println(num1 - num2)
        case "*":
            fmt.Println(num1 * num2)
        case "/":
            fmt.Println(num1 / num2)
        default:
            fmt.Println("运算符有误")
        }
    }
    func caishuzi() {
        /*
            猜数游戏:
            step1:产生随机数
            step2:循环猜数
        */
        //1.产生系统的随机数
        rand.Seed(time.Now().UnixNano())
        randNum := rand.Intn(50)
        //fmt.Println(randNum)
    
        num := 0
        //2.猜,如果猜不对,一直循环
        for i := 0; num != randNum; i++ {
            fmt.Printf("第%d次输入数字:
    ", i)
            fmt.Scan(&num)
            if num > randNum {
                fmt.Println("猜大了")
            } else if num < randNum {
                fmt.Println("猜小了")
            } else {
                fmt.Println("恭喜你,猜对了!!")
            }
        }
    }
    
    //100以内,计算奇数和,偶数和
    func jiou() {
        //奇数
        num := 0
        num2 := 0
    
        for i := 0; i < 100; i++ {
            if i%2 == 0 {
                num += i
            }
            if i%2 == 1 {
                num2 += i
            }
        }
        fmt.Println("100以内偶数和:", num)
        fmt.Println("100以内奇数和:", num2)
    }
    
    /*
    百钱买白鸡
    百元百鸡,一百元钱买100只鸡,公鸡5元一只,母鸡3元一只,小鸡1元3个。
    100元,一共买100只鸡
    公鸡可买数量范围 [0,20]  数量a
    母鸡可买数量范围 [0,33]      数量b
    最多买100只鸡,所以不可能全部买小鸡,300只超量了
    小鸡可买数量范围[100-a-b] 去掉a,b的数量,就是剩下小鸡的数量
    */
    
    func ji() {
        for a := 0; a <= 20; a++ { //公鸡的数量
            for b := 0; b <= 33; b++ { //母鸡的数量
                c := 100 - a - b //小鸡的数量
                //所有组合可能性如下
                //fmt.Printf("公鸡数量%d 母鸡数量%d 小鸡数量%d
    ", a, b, c)
                //如果三只鸡的钱总数是100 并且 没有剩余的钱,组合就正确了
                //公鸡价格5元一只,母鸡价格3元一只,小鸡数量3元一个,所以c/3等于价格
                //并且小鸡数量取余3,没有余数,代表没有零钱
                if a*5+b*3+c/3 == 100 && c%3 == 0 {
                    fmt.Printf("百钱买白鸡:公鸡数量:%d	,母鸡数量:%d	,小鸡数量:%d
    ", a, b, c)
                }
            }
        }
    }
    func main() {
        ji()
    }
    

    1.操场上有一群人,人数在100到200之间。三人一组多1人,四人一组多2人,五人一组多3人。问操场上共有多少人。

    2.两个自然数x,y相除,商3余10,被除数,除数,商,余数的和是163,求被除数,除数

    3.某数学竞赛中,参赛人数大约在380-450之间。比赛结果,全体考生的总平均分为76分,男生的平均分为75,女生的平均分为80.1,求男女生各有多少人。

    4.给定一个数组,arr1 := [10] int{5,4,3,7,10,2,9,8,6,1},求数组中所有数据的总和。

    5.二维数组的遍历

    6.给定一个整型数组,长度为10。数字取自随机数。

    package main
    
    import (
        "fmt"
        "math/rand"
        "time"
    )
    
    //操场人数
    func playGround() {
        for i := 100; i <= 200; i++ {
            if i%3 == 1 && i%4 == 2 && i%5 == 3 {
                fmt.Println(i)
            }
        }
    }
    
    //
    func test1() {
        //    两个自然数x,y相除,商3余10,被除数,除数,商,余数的和是163,求被除数,除数
        /*
            思路:
            自然数x,y加上商,余数总和是163
            条件商3余数10,那么去掉这个数,x+y的总和是150
        */
        for x := 0; x < 150; x++ {
            //y的值
            y := 150 - x
            if x/y == 3 && x%y == 10 {
                fmt.Printf("被除数%d 除数%d
    ", x, y)
            }
        }
    }
    
    func student() {
        //某数学竞赛中,参赛人数大约在380-450之间。比赛结果,全体考生的总平均分为76分,男生的平均分为75,女生的平均分为80.1,求男女生各有多少人。
        /*
            思路,人数一共380-450之间    i
            求男生数量    x
            女生数量        y
            条件,全体人数平均分76,男生平均分75,女生平均分80.1
        */
        //嵌套循环计算
        for i := 380; i < 450; i++ {
            for x := 0; x < i; x++ {
                y := i - x
                //计算人数
                //总分数=男生分数+女生分数
                if float64(i*76) == float64(x*75)+float64(y)*(80.1) {
                    fmt.Printf("男生人数:%d	女生人数%d	总人数%d
    ", x, y, i)
                }
            }
        }
    }
    
    func test2() {
        //给定一个数组,arr1 := [10] int{5,4,3,7,10,2,9,8,6,1},求数组中所有数据的总和。
        arr1 := [10]int{5, 4, 3, 7, 10, 2, 9, 8, 6, 1}
        num := 0
        for _, v := range arr1 {
            num += v
        }
        fmt.Println("数组元素总和", num)
    }
    
    //二维数组
    /*
    二维数组:存储的是一维的一维
            arr :=[3][4]int
            该二维数组的长度,就是3。
            存储的元素是一维数组,一维数组的元素是数值
    */
    func test3() {
        arr := [3][4]int{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}} //默认值    [[1 2 3 4] [0 0 0 0] [0 0 0 0]]
        fmt.Println(arr)
        //取出二维数组元素
        for _, v1 := range arr {
            for _, v2 := range v1 {
                fmt.Println("二维数组中的元素:", v2)
            }
        }
    }
    
    //给定一个整型数组,长度为10。数字取自随机数。
    func makeArray() {
        /*
            给定一个整型数组,长度为10。数字取自随机数。
            [1,10]
        */
        //初始化数组
        arr := [10]int{}
        fmt.Println(arr)
        //随机数种子
        rand.Seed(time.Now().UnixNano())
        //循环生成写入元素,正常写入
        for i := 0; i < len(arr); i++ {
    
            x := 0
            //验证:x是否已经存储过了
            /*
             循环验证x是否已经存储,如果已经有,再取随机数,再验证,直到不重复
            */
            //循环验证
            for {
                //生成随机数
                x = rand.Intn(10) + 1 // 8
                flag := true          //true:代表不重复值可以用,false代表值重复,不可以使用
                //循环检测,次数依次少于元素个数
                for j := 0; j < i; j++ {
                    //如果x元素已经存在,结束循环
                    if x == arr[j] {
                        flag = false
                        break
                    }
                }
                //如果为真,就停止死循环
                if flag {
                    //判断标记的值
                    break
                }
            }
            arr[i] = x
        }
        fmt.Println(arr)
    }
    
    func main() {
        makeArray()
    }
    

    1.给定一个路径名: pathName:="http://192.168.15.33/static/aa.jpeg" 获取文件名称:aa.jpeg

    2.给定一个以下字符串:统计大写字母的个数,小写字母的个数,非字母的个数。

    str:="aekjffjkJDJ294384848DKFJFJkdjfhfh2943845593nfnJRIEIFJ"

    package main
    
    import (
        "fmt"
        "strings"
    )
    
    /*
    练习2:给定一个路径名:
    pathName:="http://192.168.10.1:8080/Day33_Servlet/aa.jpeg"
    获取文件名称:aa.jpeg
    
        给定一个以下字符串:统计大写字母的个数,小写字母的个数,非字母的个数。
    str:="aekjffjkJDJ294384848DKFJFJkdjfhfh2943845593nfnJRIEIFJ"
    */
    
    func main() {
        pathName := "http://192.168.10.1:8080/Day33_Servlet/aa.jpeg"
        //取出末尾元素方式一
        //slistStr:=strings.Split(pathName,"/")
        //fmt.Println(slistStr[len(slistStr)-1:])
    
        //方式二,找到/符号的索引,加一取出
        fileName := pathName[strings.LastIndex(pathName, "/")+1:]
        fmt.Printf("%T %v 
    ", fileName, fileName)
    
        //统计个数
        str:="aekjffjkJDJ294384848DKFJFJkdjfhfh2943845593nfnJRIEIFJ"
        count1 := 0
        count2 := 0
        count3 := 0
    
        for i := 0; i < len(str); i++ {
            if str[i] >= 'A' && str[i] <= 'Z' {
                count1++
            } else if str[i] >= 'a' && str[i] <= 'z' {
                count2++
            } else {
                count3++
            }
        }
    
        fmt.Printf("大写字母:%d,小写字母:%d,非字母:%d
    ", count1, count2, count3)
    }
    

    1.练习:递归算法求5的阶乘

    2.练习:兔子生兔子:fibonacci数列:第1,2两项数值都为1,从第3项开始,是前两项之和。使用递归算法,求第12项的数值。

    func getfactorial(n int)int{
        if n== 1{
            return 1
        }
        return getfactorial(n-1) *n
    }
    

    1.一条协程打印100数字,另一条协程打印100字母

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func printNum() {
        for i := 0; i < 100; i++ {
            fmt.Println("goroutine1 打印数字:", i)
            time.Sleep(1 * time.Second)
    
        }
    }
    
    func printChar() {
        for i := 0; i < 100; i++ {
            fmt.Printf("goroutine2 打印【字符】: %c
    ", i)
            time.Sleep(1 * time.Second)
        }
    }
    func main() {
        //如果不加go协程去运行,函数会等待运行
        //加go 并发版运行,抢占式运行,每次结果都不一样
        //可以设置睡眠时间,查看go协程是并发运行
        go printChar()
        go printNum()
        time.Sleep(10 * time.Second)
        fmt.Println("main结束。。。")
    }
    

    1.创建并启动一个子 goroutine,打印100个数字,要保证在main goroutine结束前结束。(使用管道)

    package main
    
    import (
        "fmt"
        "time"
    )
    
    //利用chan阻塞的特性,延迟main进程结束
    func printNum(ch1 chan bool) {
        for i := 1; i <= 100; i++ {
            fmt.Println(i)
            time.Sleep(10 * time.Millisecond)
        }
        ch1 <- true //写入一个标志位,true
    }
    func main() {
        //练习1:创建并启动一个子 goroutine,打印100个数字,要保证在main goroutine结束前结束。
        ch1 := make(chan bool)
        printNum(ch1)
        <-ch1 //读取管道数据,如果没读到数据,会一直阻塞,延迟main进程结束
    }
    

    1.通道channel的用法例题

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main() {
        //go的ok语法
        ch1 := make(chan int)
        go sendData(ch1)
    
        //channel关闭后不得再写入,可以读取
        //channel如果没关闭,且没有数据,再读取channel会pannic
        //读取数据
        for {
            time.Sleep(1*time.Second)//每秒读一次
            data,ok:=<-ch1//返回值data,与ok布尔值
            if !ok{
                fmt.Println("数据读取完毕,通道已经关闭",ok)
                break
            }
            fmt.Printf("已读取到数据【%d】%v
    ",data,ok)
        }
    }
    
    func sendData(ch1 chan int) {
        for i := 1; i < 10; i++ {
            ch1 <- i //向通道写入数据
        }
        fmt.Println("数据写入完毕")
        close(ch1)//关闭管道,接收方已经无法取数据
    }
  • 相关阅读:
    Python多线程之死锁
    Python多线程之间同步总结
    C语言动态数组
    Python标准库 -- UUID模块(生成唯一标识)
    东南亚 SAP 实施 马来西亚税收在SAP的设计和实现
    odoo:开源 ERP/CRM 入门与实践 -- 上海嘉冰信息技术公司提供咨询服务
    SAP FICO 凭证导入接口 数据xml格式
    SAP HANA S4 FI TABLE表结构
    CFA一级知识点总结
    汽车行业与 Telematics
  • 原文地址:https://www.cnblogs.com/open-yang/p/11256980.html
Copyright © 2020-2023  润新知