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\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章节练习题的更多相关文章
- 《agile java》First : 起步 + 章节练习题
第一章节:起步 1.创建简单Java类2.创建测试类3.使用JUnit4.学习构造函数5.重构代码 涉及知识:TDD.UML TDD: Test Driven Development, 测试驱动开发. ...
- C++章节练习题
笔试宝典:http://www.bishibaodian.com/writtenCircle/lightquestionlist http://www.bishibaodian.com/written ...
- Java语言概述_章节练习题及面试
学于尚硅谷开源课程 宋洪康老师主讲 感恩 尚硅谷官网:http://www.atguigu.com 尚硅谷b站:https://space.bilibili.com/302417610?from=se ...
- Go语言学习目录
第一章 Go环境搭建 1.1 Linux搭建Go环境 1.2 Mac搭建Go环境 1.3 Windows搭建Go环境 第二章 Go语言特性 2.1 Go特征 2.2 Go变量类型 2.3 Go内置函数 ...
- 【大数据】Scala学习笔记
第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java 以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...
- squid常用调试命令
解压,编译,make ,make install 就不说了.从 make install 后开始.当你的 squid.conf 配置文档按照你的想法修改完以后,启动 squid 之旅就开始了.1,初始 ...
- Linux(10.18-10.25)学习笔记
一.学习目标 1. 了解常见的存储技术(RAM.ROM.磁盘.固态硬盘等) 2. 理解局部性原理 3. 理解缓存思想 4. 理解局部性原理和缓存思想在存储层次结构中的应用 5. 高速缓存的原理和应用 ...
- 分享我收集的引擎、图形学、WebGL方面的电子资料
本文分享我这一年以来收集的我认为比较经典的电子资料,希望能对大家有所帮助! 本文会不断更新! 目录 WebGL Insights OpenGL Insights Game Programming Pa ...
- Python高级编程–正则表达式(习题)
原文:http://start2join.me/python-regex-answer-20141030/ ############################################## ...
随机推荐
- js事件冒泡于事件捕获
事件冒泡 事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件. 事件冒泡是自下而上(从最深节点开始,向上传播事件)的触发事件 //例子 <div id="pa ...
- discuz修改禁止性别保密选项
第一步找到source/function/function_profile.php 第二步 注释下面的代码 else { $html .= '<option value="0&quo ...
- SQLI-LABS学习笔记(四)
第十六关 和之前的关卡一样,修改闭合,无意义的关卡 ")闭合即可 第十七关 这题从源码上看发现 这里进行了两次查询 先查询了用户名是否存在 再查询密码是否匹配 ...
- Java 后台设置session成功,获取为空
cookie secure当服务器使用https时,容易出现漏洞SSL cookie without secure flag set,敏感cookie这时就需要打开cookie secure,服务器端 ...
- OpenCV学习(2)——一个简单的例子
光说不练假把式,来看一个简单的例子,了解了解OpenCV.这个小demo没有几行代码,作用是显示项目目录下面的一张图片. #include <opencv2\opencv.hpp> #in ...
- java 8 stream中的Spliterator简介
目录 简介 tryAdvance trySplit estimateSize characteristics 举个例子 总结 java 8 stream中的Spliterator简介 简介 Split ...
- ERC20 Short Address Attack
ERC20 Short Address Attack 什么是ERC20 Application Binary Interface(ABI) ERC20 Short Address Attack 开始攻 ...
- Eclipse Mac OS 安装 Subversion插件subclipse 缺失JavaHL解决方案
安装 SVN 插件 subclipse 时可能遇到问题 subclipse 安装完成后,当我们选择使用 的时候还是会提示:javaHL not available, SVN接口选择 client:选择 ...
- 解决 Retrofit 多 BaseUrl 及运行时动态改变 BaseUrl ?
原文地址: juejin.im/post/597856- 解决Retrofit多BaseUrl及运行时动态改变BaseUrl(一) 解决Retrofit多BaseUrl及运行时动态改变BaseUrl( ...
- 基于国内某云的 Domain Fronting 技术实践
发布时间:2019-12-16 11:30:53 一.简介 Domain Fronting,中文译名 “域前置” 或 “域名前置”,是一种用于隐藏真实C2服务器IP且同时能伪装为与高信誉域名通信的技术 ...