开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:方法课堂练习题(2)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/9681
方法课堂练习题(2)
内容介绍:
一、习题4
二、习题5
三、习题6
四、课后练习
一、习题4
编写方法:判断一个数是奇数还是偶数
此题最好绑定结构体的指针类型,这样 mu 就不会进行值的拷贝。判断一个数是奇数还是偶数,需要利用 judgenumber。而判断一个数是奇数还是偶数应该值返还回来,因此输入判断 if num % 2==0{},如果 nummber%2=0,说明此数刚好能够被二整除,那么此时此刻我们认为它就是一个偶数,则输出为“是偶数”(fmt.Println("是偶数"))。如果该数不能够被二整除,我们就输出一个方法 fmt.Println("是奇数"),输出结果为“是奇数”。调用时因为此题是指针类型,所以严格来说应该输入 (&mu) . JudgeNum(10)完成调用,但是实际上底层做了优化,因此输入 mu.judgeNum(10)即可完成调用。运行发现,输出结果为:10是偶数;调用时将括号数值更改,即可完成判断。
核心代码:
func (mu *MethodUti1s) JudgeNum(num int){
if num %2 = 0{
fmt.Print1n("是偶数..")
}else{
fmt.Print1n("是奇数..")
}
}
func main(){
mu.judgeNum(10)
二、习题5
根据行、列、字符打印对应行数和列数的字符,比如:行:3,列:2,字符自定义
此题应该接收三个参数对吧,一个是行,一个是列,还有自定义打印字符,输入func (mu *MethodUtils) Print3(n int,m int,key string)
,进行两次for循环,for i:=1;i=n;i++{for j :=1;j<=m;j++{
,然后输出代码为:fmt.Print(key),并换行 fmt.Println()。调用时,输入 mu.Print3(7,20,”#”),即可打印出7行20列#的矩形,达到想要的效果。可以通过改变括号内容,更改矩形的形式。
核心代码:
func (mu *Methodutils) Print3(n int, m int, key string){
for i :=1;i<=n ; i++{
for j:=1;j<=m;j++{
fmt.print(key)
}
fmt.Print1n()
}
}
mu.Print3(7,20,”#”)
三、习题6
定义小小计算器结构体 (Calcuator),实现加减乘除四个功能
实现形式1:分四个方法完成:分别计算加减乘除
定义一个结构体,type Calcuator struct{。该结构体需要两个参数,参数的定义方式有两种,第一种是把参数直接写到Calcuator中去,用字段形式(Num1 float64 Num2float64 )体现;第二种方式则通过直接接收。如果写成四个方法,分别完成加减乘除。首先是加法,输入代码:func (calcuator *calcuator) getsum() float64{},其中*calcuator代表指针,int{}表示返回值,计算方法则是分别在变量里取出num1和num2,并进行求和计算,代码是:return calcuator.Num1 +calcuator.Num2;再完成减法运算,原理类似,代码为:func (calcuator *calcuator) getsub() float64{} return calcuator.Num1 -calcuator.Num2;乘法与除法的运行规则与加减法的运算规则类似,可以依据上述进行类推,不进行赘述。
测试时,首先创建一个Calcuator变量(var calcuator Calcuator),再对Num1和Num2赋值,例如对Num1赋值为1.2(calcuator.Num1=1.2),Num2赋值为2.2(calcuator.Num2 =2.2),输入代码:fmt.Println( "sum=",calcuator.getsum())
fmt.Printin("sub=", calcuator.getsub())
}
,运算结果输出为和(sum=)、差(sub=),此时的运算结果精度较高,是由于未进行格式化处理,可以通过fmt.Printf("sum=%v\n",fmt.sprintf("%.2f",calcuator.getsum()))
fmt.Printf("sub=%v\n",fmt.sprintf("%.2f",calcuator.getsub()))
进行格式化处理以降低精度
核心代码:
type Calcuator struct{
Num1 float64
Num2 f1oat64
}
func (calcuator *Calcuator) getsum() float64 {
return calcuator. Num1 +calcuator.Num2
}
func (calcuator *calcuator) getsub()float64 {
return calcuator. Num1 +calcuator.Num2
}
var calcuator Calcuator
calcuator.Num1=1.2
calcuator.Num2 =2.2
fmt.Printf("sum=%v\n",fmt.sprintf("%.2f",calcuator.getsum()))
fmt.Printf("sub=%v\n",fmt.sprintf("%.2f",calcuator.getsub()))
实现形式2:用一个方法搞定,需要接收两个数以及一个运算符
首先为指针绑定方法,并传入运算符 operator,并返回 float64 的结果,代码为:fune (calcuator *calcuator) getRes(operator byte) float64{}
。接下来要完成判断,判断出运算符的类型,再去执行对应的操作,代码为:
res := 0.0
switch operator {
Case‘+’:
res =calcuator .Num1 +calcuator. Num2
Case‘-’:
res = calcuator.Num1 - calcuator.Num2
case‘*’:
res = calcuator .Num1*calcuator.Num2
case‘/’:
res = calcuator.Num1 /calcuator.Num2
,即首先要定义一个结果0.0,利用 switch 语句做判断,若输入了除+—*/以外的运算符,则输出“运算符输入有误”提示并返回原始res值0。上述流程全部完成后,输入return res 结束。通过 res :=calcuator.getRes(‘+’)
fmt.Print1n("res=", res)完成调用,输出结果与理论值一致(由于在实现形式1中已经定义了 Num1 和 Num2 的值,故此时仍以上述 Num1=1,Num2=2 进行运算),由于没有进行格式化故结果精度很高
核心代码:
fune (calcuator *calcuator) getRes(operator byte)float64 {
res :=0.0
switch operator{
case'+':
res = calcuator.Num1 + calcuator. Num2
case'-':
res = calcuator.Num1 - calcuator. Num2
case'*':
res = calcuator.Num1 * calcuator. Num2
case'/':
res = calcuator.Num1 / calcuator. Num2
default:
fmt.Print1n(”运算符输入有误...")
}
return res
}
var calcuator Calcuator
calcuator.Num1=1.2
calcuator.Num2 =2.2
res :=calcuator.getRes(‘+’)
fmt.Print1n("res=", res)
四、课后练习
1.在 MethodUtils 结构体编个方法,从键盘接收整数(1-9),打印对应乘法表:
2.编写方法,使给定的一个二维数组(3×3)转置: