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\n", i, i)
fmt.Printf("类型:%T 值%v\n", 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\n", s1, s1)
fmt.Printf("%T %v %c\n", b1, b1, b1)
fmt.Printf("%T %v %c\n", b2, b2, b2)
fmt.Printf("%T %v %c\n", b3, b3, b3)
fmt.Printf("%T %v \n", f1, f1)
fmt.Printf("%T %v \n", i1, i1)
fmt.Printf("%T %v\n", b4, b4)
fmt.Printf("%T %v\n", 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\n", 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次输入数字:\n", 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\n", a, b, c)
//如果三只鸡的钱总数是100 并且 没有剩余的钱,组合就正确了
//公鸡价格5元一只,母鸡价格3元一只,小鸡数量3元一个,所以c/3等于价格
//并且小鸡数量取余3,没有余数,代表没有零钱
if a*5+b*3+c/3 == 100 && c%3 == 0 {
fmt.Printf("百钱买白鸡:公鸡数量:%d\t,母鸡数量:%d\t,小鸡数量:%d\n", 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\n", 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\t女生人数%d\t总人数%d\n", 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 \n", 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\n", 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\n", 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\n",data,ok)
}
} func sendData(ch1 chan int) {
for i := 1; i < 10; i++ {
ch1 <- i //向通道写入数据
}
fmt.Println("数据写入完毕")
close(ch1)//关闭管道,接收方已经无法取数据
}

13.3 Go章节练习题的更多相关文章

  1. 《agile java》First : 起步 + 章节练习题

    第一章节:起步 1.创建简单Java类2.创建测试类3.使用JUnit4.学习构造函数5.重构代码 涉及知识:TDD.UML TDD: Test Driven Development, 测试驱动开发. ...

  2. C++章节练习题

    笔试宝典:http://www.bishibaodian.com/writtenCircle/lightquestionlist http://www.bishibaodian.com/written ...

  3. Java语言概述_章节练习题及面试

    学于尚硅谷开源课程 宋洪康老师主讲 感恩 尚硅谷官网:http://www.atguigu.com 尚硅谷b站:https://space.bilibili.com/302417610?from=se ...

  4. Go语言学习目录

    第一章 Go环境搭建 1.1 Linux搭建Go环境 1.2 Mac搭建Go环境 1.3 Windows搭建Go环境 第二章 Go语言特性 2.1 Go特征 2.2 Go变量类型 2.3 Go内置函数 ...

  5. 【大数据】Scala学习笔记

    第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java  以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...

  6. squid常用调试命令

    解压,编译,make ,make install 就不说了.从 make install 后开始.当你的 squid.conf 配置文档按照你的想法修改完以后,启动 squid 之旅就开始了.1,初始 ...

  7. Linux(10.18-10.25)学习笔记

    一.学习目标 1. 了解常见的存储技术(RAM.ROM.磁盘.固态硬盘等) 2. 理解局部性原理 3. 理解缓存思想 4. 理解局部性原理和缓存思想在存储层次结构中的应用 5. 高速缓存的原理和应用 ...

  8. 分享我收集的引擎、图形学、WebGL方面的电子资料

    本文分享我这一年以来收集的我认为比较经典的电子资料,希望能对大家有所帮助! 本文会不断更新! 目录 WebGL Insights OpenGL Insights Game Programming Pa ...

  9. Python高级编程–正则表达式(习题)

    原文:http://start2join.me/python-regex-answer-20141030/ ############################################## ...

随机推荐

  1. PHP--关于上传文件大小的问题

    参考:https://www.cnblogs.com/jianqingwang/p/5863960.html https://blog.csdn.net/u013168253/article/deta ...

  2. 2019-2020-1 20199310《Linux内核原理与分析》第五周作业

    1.问题描述 在前面的文章中,已经了解了Linux内核源代码的目录结构,并在Oracle VM VirtualBox的Linux环境中构造一个简单的操作系统MenuOS,本文将学习系统调用的相关理论知 ...

  3. 2019-2020-1 20199325《Linux内核原理与分析》第三周作业

    在实验楼当中进行实验3的实践:主要是针对cpu占用分配,使用时间片轮转算法进行分配 在Shell命令当中输入如下代码: $ cd ~/LinuxKernel/linux-3.9.4 $ rm -rf ...

  4. 通过transmittable-thread-local源码理解线程池线程本地变量传递的原理

    前提 最近一两个月花了很大的功夫做UCloud服务和中间件迁移到阿里云的工作,没什么空闲时间撸文.想起很早之前写过ThreadLocal的源码分析相关文章,里面提到了ThreadLocal存在一个不能 ...

  5. 汉字编码对照表(gb2312/Big5/GB2312)

    一.汉字编码的种类 1.GB2312又称国标码,由国家标准总局发布,1981年5月1日实施,通行于大陆.新加坡等地也使用此编码.它是一个简化字的编码规范,当然也包括其他的符号.字母.日文假名等,共74 ...

  6. OpenRASP管理后台安装记录

    OpenRASP项目地址https://rasp.baidu.com/ 一.安装java 在CentOS中安装ElasticSearch需要Java1.8.0,可执行命令java -version查看 ...

  7. USACO Training Section 1.1 坏掉的项链Broken Necklace

    题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...

  8. 图论--树的重心(DFS) 模板

    const int maxn=500005; int tot=0,n; int ans,size; int sx[maxn],head[maxn]; int vis[maxn]; struct edg ...

  9. 安卓commandlinetools-win-6200805_latest配置

    JDK:1.8.0_251 系统:win10 64bit 问题1 官网下载commandlinetools,解压运行报错 解决方法 打开sdkmanager.bat,修改第17行为set DEFAUL ...

  10. HTML data-* 属性的含义和使用

      data-*自定义数据属性 首先讲一下语法格式: data-* =“值” data-* 属性包括两部分: 属性名不应该包含任何大写字母,并且在前缀 "data-" 之后必须有至 ...