函数课堂练习 | 学习笔记

简介: 简介:快速学习函数课堂练习

开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map :函数课堂练习】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/625/detail/9604


函数课堂练习

 

一、函数注意事项和细节讨论

1、课堂练习题:

(1) 习题1:

func sum(n1, n2 float32 ) float32 {

fmt.Printf("n1 type = %T\n", n1)

//n1 type = float32

return n1+n2

}

func main() {

fmt.Println("sum=", sum(1,2))// sum = 3

}

问:题1的代码有无错误,它输出什么?

解:代码无错误,输出 sum = 3。

习题解析:

main 函数中调用 sum(1,2) 在 sum 中调用形参 n1,n2 float32,返回一个 float32,这种用法与定义多个变量的用法是相同的。如果 n1 和 n2 的数据类型相同的话,n1后面的数据类型可以省略,只需在最后写上数据类型即可。在这道习题中 n1和 n2都为 float32 的数据类型,本题输出的是n1的数据类型是什么,再返回 n1+n2 的值。输出的是 n1,返回的 n1+n2=3。

(2) 习题2:

type mySum func (int, int) int

func sum(n1 int, n2 int) int {

return n1+n2

}

func sum2(n1, n2, n3 int) int {

return n1+n2

}

//使用type自定义数据类型来简化定义

func myFunc(funcVar mySum,num1 int,num2 int) int{

return funcVar(num1, num2)

}

func main(){

a := sum

b := sum2

fmt.Println(myFunc(a,1,2)//ok

fmt.Println(myFunc(b,1,2))//error

}

问:题2:代码有无错误,为什么?

解:fmt.Println(myFunc(b,1,2) 错误,原因是类型不匹配。因为不能把 func sum2(n1, n2, n3 int) int这种函数类型赋给 func (int, int) int。只能接受2个形参而给了3个,类型不匹配。

习题解析:

把 sum 函数给 a 变量,sum2 给 b 变量,调用 myFunc(a,1,2)函数。mySum是一个自定义类型,有两个 int 的形参然后返回一个 int 。本题中把 sum 赋给了mySum 函数类型,myFunc b 中函数类型给了 myFunc ,但是 b 是 sum2,mySum接收的是两个 int 形参再返回一个 int ,但 b 中是3个 int 的形参再返回一个int,fmt.Println(myFunc(b,1,2))是错误的。

(3) 习题3:

请编写一个函数 swap(n1*int,n2*int)可以交换 n1 和 n2 的值。

在练习室中新建一个文件夹“exercise”,新建一个文件叫 main.go。通用的部分是包和引入包,将它复制到 main.go 文件夹中,它们的代码如下:

package main

import (

“fmt”

//请编写一个函数swap(n1*int,n2*int)可以交换n1和n2的值

func swap(n1*int,n2*int){

//定义一个临时变量

t:= *n1

*n1= *n2

*n2= t

}

func main() {

a :=10

b :=20

swap(&a,&b)//传入的地址

fmt.Printf(“a=%v,b=%v”,a, b)

}

习题解析:

新建一个文件叫 main.go 把导包引用过来,写一个主函数,根据题目要求 func swap(n1*int,n2*int) 定义一个临时变量 t ,把 n1 的值给 t ,然后再把 n2 的值给 n1,*n2的值给 t 。a:=10,b:=20调用 swap(&a,&b)传入的是地址,再输出 fmt.Printf(“a=%v,b=%v”,a ,b)

最后输出结果为 a=20,b=10。开始是 a=10,b=20,交换成功。注意一定要用指针的数据类型来传递,基本数据类型是通过指针传递的,指针传递在交换的时候对外面的数据没有影响,指针接受地址来进行相应的数据交换。

相关文章
|
移动开发 前端开发
ruoyi-nbcio-plus基于vue3的flowable执行监听器的升级修改
ruoyi-nbcio-plus基于vue3的flowable执行监听器的升级修改
189 0
|
存储 缓存 Dragonfly
Nydus 镜像加速之内核演进之路
多年来容器化实践告诉我们,优化后的容器镜像搭配 P2P 网络等技术可以有效降低容器部署启动的时间,并可保障容器持续稳定运行,相关背景细节可以参考[“容器技术之容器镜像篇”](https://mp.weixin.qq.com/s/s4lFGbKlXuer8mlE8kqQOA)、[“让容器应用管理更快更安全,Dragonfly 发布 Nydus 容器镜像加速服务”](https://mp.weixin
1723 0
Nydus 镜像加速之内核演进之路
|
Web App开发 JavaScript 前端开发
12个实用的 JavaScript 框架分享给前端开发者
  JavaScript库是预先编写的 JavaScript 工具代码,让开发者可以更容易开发 JavaScript 应用。这个列表我们列出了2017年1月份功能丰富的 JavaScript 库,可以帮助您建立有效和有用的 Web 应用程序。
19423 0
|
.NET 开发框架 JavaScript
asp.net 连接新浪微博
资料收集 1 官方 http://open.weibo.com/sdk/js http://open.weibo.com/widget/js#connect   2 教程 http://zzk.
880 0
|
2天前
|
数据采集 人工智能 安全
|
12天前
|
云安全 监控 安全
|
3天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1023 151
|
3天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1722 9