Go语⾔练习题
title: Go语⾔练习题
tags: Go
author: Clown95
Go基础编程
Go初体验
1. 熟悉go的编译环境已经编译过程,根据Hello World输出,拓展打印出⾃我介绍。
2. 查询资料了解go语⾔的特点并简单的叙述。
3. ⼀个包是否可以在⼀个源⽂件⾥⾯多次引⽤?
基础结构和类型
1. 以下变量名有哪些是不合法的?
1a、abc、a&b 、年龄、 var、bool 、public、a2 、2#、a2_1、f unction、class、new
2. 以下变量声明哪些条款是正确的?
var i =1
var i int
var i =int
i :=1
i =1
3. 阅读以下代码,写出输出结果。
package main
import"fmt"
func main(){
var a int=10
fmt.Println(a)
{
a:=9
fmt.Println(a)
}
fmt.Println(a)
}
4. 编程实现:使⽤itoa和const,定义⼀周的数值,如Monday=1 ,Tuesday=2,依次类推Sunday=7。
5. 编程实现:实现字符串"123"和整数123之间的互转,并格式化输出他们转换后的类型和值。
6. 编程实现:使⽤类型别名,让go语⾔⽀持中⽂关键字,如 int可以⽤整数型替代。
输⼊输出
1. 编程实现:声明⼀组变量:姓名(Name),年龄(Age),籍贯(From),专业(Major),从控制台接收内容并赋值给这些变量,最后输出这些
变量的值。
python 定义数组2. 简述内置的print和println函数与fmt和log标准库包中相应的打印函数有什么区别?
3. 以下代码,输出结果会出现什么问题?如何解决?
func main(){
for i :=0; i <5; i++{
fmt.Println("请输⼊⼀个字符")
var code byte
fmt.Scanf("%c",&code)
fmt.Println(code)
}
}
表达式与运算符
1. 不依靠程序计算 (1+6)/2*4^2+10%3<<2的值
2. 写出下⾯代码输出的内容(%4b是4位⼆进制)。
const(
read byte=1<<iota
write
exec
freeze
)
func main(){
a:=read|write|freeze
b:=read|freeze|exec
c:= a &^b
fmt.Printf("%4b &^ %4b= %04b\n", a, b, c)
}
3. 编程实现:现有⼀个四位数, 计算它每位数的和、每位数的乘积 ,并⽤乘积除以和,输出它们的结果。
4. 什么是byte?什么是rune? 如何将[]byte和[]rune类型的值转换为字符串?
数组
1. 以下不能正确定义数组和赋初值的语句是
var a=[5]int{1,2,3,4,5}
var b=[...]int{1,2,3,4,5}
var c[5]int={1,2,3,4,5}
var d=[5]int(2:4,4:61}
2. 编程实现:有⼀个长度为5的int数组,初始化该数组并计算平均值。
3. 执⾏以下代码将会出现什么样的结果?怎么让它正确运⾏?
var arr []int
arr[0]=1
fmt.Println(arr[0])
切⽚
1. 关于整型切⽚的初始化,下⾯正确的有哪些?
s :=make([]int){1,2,3,4}
s :=make([]int,0)
s :=make([]int,5,10)
s :=[]int{1,2,3,4,5}
2. 编程实现:花样体操⽐赛,6个评委打分,运动员的成绩去掉⼀个最⾼分,去掉⼀个最低分,剩下的4个分数的平均分就是最后得分,
要求:
(1)请把最⾼分,最低分的评委。(需要考虑存在多个最低分和最⾼分的情况)
(2)出最佳评委和最差评委。最佳评委是最后得分差距最⼩,最差评委最后得分差距最⼤。
3. 编程实现:切⽚的升序排序,反转,搜索功能。
4. 请简述切⽚和数组的区别。
Map
1. 编程实现:现有字典map1的键是string型,值是int型,初始化为[psw1:123 psw2:456 psw3:789],要求删除键值对
psw2:456,增加键值对psw4:135。
2. 编程实现:实现⼀个函数,计算字符串的单词的个数,它应该返回⼀个包含字符串中单词个数的map。
3. 为什么映射元素不可被取地址?
struct
1. 编程实现:实现⼀个同学录,建⽴学⽣信息的结构体Student,每个学⽣的信息包括姓名()、性别、年龄。实现学⽣信息的添加、修
改、删除、查询等功能。
2. go语⾔中哪些类型的值可以被取地址,哪些不可以被取地址?
3. 罗列出哪些类型不⽀持⽐较?
4. 下⾯的变量a和b相等吗?变量c和d相等吗?
a :=struct{}{}
b :=struct{}{}
c :=[10]struct{}{}
d :=[10]struct{}{}
5. 为什么两个nil值有时候会不相等?
6. 简述go语⾔中make和new的区别。
7. 哪些类型是值类型,那些是引⽤类型?
8. 以下代码有什么问题,说明原因并修改代码得到预期结果。
type student struct{
Name string
Age int
}
func main(){
m :=make(map[string]*student)
stus :=[]student{
{Name:"zhou", Age:24},
{Name:"li", Age:23},
{Name:"wang", Age:22},
}
for_, stu :=range stus {
m[stu.Name]=&stu
}
fmt.Println(m)
}
指针类型
1. 通过指针变量 p 访问其成员变量 name,下⾯语法正确的哪些?
p.name
(*p).name
(&p).name
p->name
2. 填写A⾏和B⾏的空⽩,以确保打印输出为“foo”
package main
type S struct{
m string
}
func f()*S {
return __ //A
}
func main(){
p := __ //B
print(p.m)//print "foo"
}
3. 执⾏以下代码时将打印什么?
func main(){
s :="123"
ps :=&s
b :=[]byte(*ps)
pb :=&b
s +="4"
*ps +="5"
b[1]='0'
println(*ps," ",string(*pb))
}
4. 解释为什么下⾯的打印输出是333,并修改A⾏以确保打印012。
package main
const N =3
func main(){
m :=make(map[int]*int)
for i :=0; i < N; i++{
m[i]=&i //A
}
for_, v :=range m {
print(*v)
}
}
5. 函数返回局部变量的指针是否安全?
流程控制
条件判断
1. 编程实现:从控制台输⼊学⽣的成绩并判断等级,0-59 不及格,60-79 良好 ,80-100 优秀,使⽤if 和switch两种⽅法实现。
2. 编程实现:从键盘接收⼀个整数,求奖⾦提成,规则:低于或等于10万元时,奖⾦可提10%;利润⾼于10万元,低于20万元时,低
于10万元的部分按10%提成,⾼于10万元的部分,可提成7.5%;20万到40万之间时,⾼于20万元的部分,可提成5%;40万到60万之间时⾼于40万元的部分,可提成3%;60万到100万之间时,⾼于60万元的部分,可提成1.5%;⾼于100万元时,超过100万元的部分按1%提成从键盘输⼊当⽉利润,求应发放奖⾦总数?
3. 编程实现:输⼊⼀个字符,判断它如果是⼩写字母输出其对应的⼤写字母;如果是⼤写字母输出其对应的⼩写字母;如果是数字输出
数字本⾝;如果是空格输出“SPACE”;如果不是上述情况输出“Other”。(可⽤ASCII码判断)
4. 下⾯的代码将会输出什么?
package main
import"fmt"
func False()bool{
return false
}
func main(){
switch False(){
case true:
fmt.Println("true")
case false:
fmt.Println("false")
}
}
5. switch流程控制代码块中的case表达式能重复吗?
循环结构
1. 编程实现:从键盘输⼊字符串str,使⽤for range语句遍历该字符串中的每⼀个字符,并打印输出。
2. 执⾏以下代码时将打印什么?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论