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. js事件冒泡于事件捕获

    事件冒泡 事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件. 事件冒泡是自下而上(从最深节点开始,向上传播事件)的触发事件 //例子 <div id="pa ...

  2. discuz修改禁止性别保密选项

    第一步找到source/function/function_profile.php 第二步  注释下面的代码 else { $html .= '<option value="0&quo ...

  3. SQLI-LABS学习笔记(四)

    第十六关   和之前的关卡一样,修改闭合,无意义的关卡   ")闭合即可   第十七关   这题从源码上看发现     这里进行了两次查询   先查询了用户名是否存在   再查询密码是否匹配 ...

  4. Java 后台设置session成功,获取为空

    cookie secure当服务器使用https时,容易出现漏洞SSL cookie without secure flag set,敏感cookie这时就需要打开cookie secure,服务器端 ...

  5. OpenCV学习(2)——一个简单的例子

    光说不练假把式,来看一个简单的例子,了解了解OpenCV.这个小demo没有几行代码,作用是显示项目目录下面的一张图片. #include <opencv2\opencv.hpp> #in ...

  6. java 8 stream中的Spliterator简介

    目录 简介 tryAdvance trySplit estimateSize characteristics 举个例子 总结 java 8 stream中的Spliterator简介 简介 Split ...

  7. ERC20 Short Address Attack

    ERC20 Short Address Attack 什么是ERC20 Application Binary Interface(ABI) ERC20 Short Address Attack 开始攻 ...

  8. Eclipse Mac OS 安装 Subversion插件subclipse 缺失JavaHL解决方案

    安装 SVN 插件 subclipse 时可能遇到问题 subclipse 安装完成后,当我们选择使用 的时候还是会提示:javaHL not available, SVN接口选择 client:选择 ...

  9. 解决 Retrofit 多 BaseUrl 及运行时动态改变 BaseUrl ?

    原文地址: juejin.im/post/597856- 解决Retrofit多BaseUrl及运行时动态改变BaseUrl(一) 解决Retrofit多BaseUrl及运行时动态改变BaseUrl( ...

  10. 基于国内某云的 Domain Fronting 技术实践

    发布时间:2019-12-16 11:30:53 一.简介 Domain Fronting,中文译名 “域前置” 或 “域名前置”,是一种用于隐藏真实C2服务器IP且同时能伪装为与高信誉域名通信的技术 ...