第二章练习题答案

  • 2.1 添加Kelvin绝对温度的转换
  • 2.2 长度转换
  • 2.3 2.4 重写PopCount函数,用一个循环代替单一的表达式
  • 2.5 用移位算法重写PopCount函数

2.1 添加Kelvin绝对温度的转换

// tempconv.go
package tempconvimport "fmt"type Celsius float64
type Fahrenheit float64
type Kelvin float64const (AbsoluteZeroC Celsius = -273.15FreezingC     Celsius = 0BoilingC      Celsius = 100
)func (c Celsius) String() string    { return fmt.Sprintf("%g°C", c) }
func (f Fahrenheit) String() string { return fmt.Sprintf("%g°F", f) }
func (k Kelvin) String() string     { return fmt.Sprintf("%g°K", k) }// CToF converts a Celsius temperature to Fahrenheit.
func CToF(c Celsius) Fahrenheit { return Fahrenheit(c*9/5 + 32) }// FToC converts a Fahrenheit temperature to Celsius.
func FToC(f Fahrenheit) Celsius { return Celsius((f - 32) * 5 / 9) }// CToK converts a Celsius temperature to Kelvin.
func CToK(c Celsius) Kelvin { return Kelvin(c + AbsoluteZeroC) }// KToC  converts a Kelvin temperature to Celsius.
func KToC(k Kelvin) Celsius { return Celsius(k) - AbsoluteZeroC }// FToK converts a Celsius temperature to Kelvin.
func FToK(f Fahrenheit) Kelvin { return Kelvin(FToC(f) + AbsoluteZeroC) }// KToF converts a Kelvin temperature to Fahrenheit.
func KToF(k Kelvin) Fahrenheit { return CToF(Celsius(k) - AbsoluteZeroC) }
// main.go
package mainimport ("ch2/tempconv""fmt""os""strconv"
)// 添加Kelvin绝对温度的转换
func test_2_1() {for _, arg := range os.Args[1:] {temp, err := strconv.ParseFloat(arg, 64)if err != nil {fmt.Println("arguments have problems, try again.")}c := tempconv.Celsius(temp)f := tempconv.Fahrenheit(temp)k := tempconv.Kelvin(temp)fmt.Printf("%s=%s=%s\n", c, tempconv.CToF(c), tempconv.CToK(c))fmt.Printf("%s=%s=%s\n", tempconv.FToC(f), f, tempconv.FToK(f))fmt.Printf("%s=%s=%s\n\n", tempconv.KToC(k), tempconv.KToF(k), k)}
}func main() {test_2_1()
}

2.2 长度转换

// lenconv.go
package lenconvimport "fmt"type Meter float64
type Foot float64// Meter,Foot的输出方式
func (m Meter) String() string { return fmt.Sprintf("%fm", m) }
func (f Foot) String() string  { return fmt.Sprintf("%fft", f) }// Meter,Foot的转换方式
func MToF(m Meter) Foot { return Foot(m * 3.28084) }
func FToM(f Foot) Meter { return Meter(f * 0.3048) }
// main.go
func test_2_2() {if len(os.Args) == 1 {var l float64fmt.Println("please input a number float64")_, err := fmt.Scan(&l)if err != nil {fmt.Printf("arguments errors,error:%v\n", err)return}m := lenconv.Meter(l)f := lenconv.Foot(l)fmt.Printf("%s=%s\n", m, lenconv.MToF(m))fmt.Printf("%s=%s\n\n", f, lenconv.FToM(f))return}for _, arg := range os.Args[1:] {l, err := strconv.ParseFloat(arg, 64)if err != nil {fmt.Printf("arguments errors,error:%v\n", err)}m := lenconv.Meter(l)f := lenconv.Foot(l)fmt.Printf("%s=%s\n", m, lenconv.MToF(m))fmt.Printf("%s=%s\n\n", f, lenconv.FToM(f))}
}

2.3 2.4 重写PopCount函数,用一个循环代替单一的表达式

// 重写PopCount函数,用一个循环代替单一的表达式
var pc [256]bytefunc init() {for i := range pc {pc[i] = pc[i/2] + byte(i&1)}
}func PopCount(x uint64) int {ans := 0for i := 0; i < 8; i++ {ans += int(pc[byte(x)])x >>= 8}return ans
}func test_2_3() {var num uint64fmt.Printf("please enter a number:")_, err := fmt.Scan(&num)if err != nil {fmt.Println("input error,err:", err)return}start := time.Now()fmt.Printf("%d has %d set bits\n", num, PopCount(num))fmt.Printf("%fs has passed\n", time.Since(start).Seconds())
}

2.5 用移位算法重写PopCount函数

// 用移位算法重写PopCount函数
func PopCount(num uint64) int {ans := 0for num != 0 {num = num & (num - 1)ans++}return ans
}func test_2_5() {fmt.Printf("Please enter a number:")var num uint64_, err := fmt.Scan(&num)if err != nil {fmt.Println("input error:", err)return}start := time.Now()fmt.Printf("%d has %d set bits\n", num, PopCount(num))fmt.Printf("%d Nanoseconds has passed\n", time.Since(start).Nanoseconds())
}

【go语言圣经】习题答案 第二章相关推荐

  1. 8086微型计算机原理答案,8086微型计算机原理与应用(吴宁)习题答案(第二章)

    8086微型计算机原理与应用(吴宁)习题答案(第二章) 8086微型计算机原理与应用(吴宁)习题答案(第二章) 第二章 微处理器结构 2-14 存储空间范围 CS×16+0000H - CS×16+F ...

  2. 【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第二章

    前言 此书在最后的附录B中,有给出部分重难点部分的参考答案.会在最后放上图片.如果想要此书习题答案,可点以下链接:为一个压缩包,以图片形式,习题图片按章节排序,答案图片按书页排序. <操作系统原 ...

  3. 浙江大学python程序设计(陈春晖、翁恺、季江民)习题答案第二章

    浙江大学python程序设计(陈春晖.翁恺.季江民)习题答案 第二章 一.单选题 1.下列数据类型中,Python不支持的是( A ) A.char B.int C.float D.list 2.Py ...

  4. 算法竞赛入门经典第二版课后习题答案第二章

    算法竞赛入门经典第二版课后习题答案 第二章 习题2-1水仙花数 输出100-999中的所有水仙花数.若三位数ABC满足ABC=A^3+B^3+C^3,则称其为水仙花数.例如153=1^3+5^3+3^ ...

  5. Java语言程序设计基础篇(第十版 梁勇著)课后习题答案 - 第二章

    第二章:基本程序设计 复习题 2.1 指出并修改以下代码中的错误: public class Test {public void main(String[] args) {double i = 50. ...

  6. 现代操作系统英文第四版课后习题答案——第二章

    @T现代操作系统第四版参考答案 现代操作系统英文第四版第二章参考答案--进程 先更新第二章的答案,习惯中文的童鞋请左转百度翻译 Solution for chapter 2 The transitio ...

  7. 编译原理(第3版-王生原)课后习题答案-第二章

    1.文法G=({A,B,S},{a,b,c},P,S)其中Р为:S→Ac|aB A→ab→bc 写出L(GISJ)的全部元素. 答案: L(G[S])={abc} 2.文法G[N]为:N→D|ND D ...

  8. 微型计算机原理与接口技术(周荷琴 冯焕清)第六版 课后习题答案 第二章(部分答案)

    第二章 2.8086CPU内部由哪两部分组成?它们的大致是如何工作的? 8086CPU由指令执行部件EU和总线接口部件BIU两部分组成 ①BIU先执行读存储器操作,从给定地址单元中取出指令,送到先进先 ...

  9. C++程序设计(第二版)谭浩强----程序题课后习题答案第二章

    3. #include<iostream> using namespace std; int main() {char c1 = 'a', c2 = 'b', c3 = 'c', c4 = ...

最新文章

  1. 博士申请 | ​香港中文大学LaVi实验室招收2022年秋季入学博士生、硕士生
  2. 在Tomcat上跑东西时遇到的对我这样新手来说很难找到的问题
  3. 手机端校验的那些事情(简单实例)
  4. flink启动出现java.lang.NoClassDefFoundError: org/apache/hadoop/fs/Path
  5. URL 路径长度限制(错误:指定的文件或文件夹名称太长)
  6. Linux系统编程----8(竞态条件,时序竞态,pause函数,如何解决时序竞态)
  7. python中random函数用法_random函数的用法
  8. android手机用户,[信息图]Android手机用户如何使用自己的设备?
  9. geoserver矢量瓦片发服务前端展示偏移问题解决
  10. TWebBrowser的常见属性和方法
  11. 小米史上最“短命”旗舰机:年初发布,官网已正式下架
  12. python语言程序设计实践教程答案实验五_Python程序设计实验五
  13. word文档通配符换行_这个小工具,让你word操作效率翻倍
  14. java中计算文件的md5,Java计算文件MD5值代码
  15. 全网疯传,谷歌BAT员工「LeetCode刷题手册」,1400+超详细算法题讲解。
  16. wifi连接状态android,判断android设备wifi连接状态
  17. Hadoop势微,云原生上位——传统大数据平台的云原生化改造
  18. Spark使用start-slave.sh启动Worker
  19. python file does not exist什么意思_Python的冷知识和坑
  20. 关于 迪奥 中国官网 dior.cn 的真假性判断 ~

热门文章

  1. jquery on()方法 off()方法
  2. 想要学好SEO,首先得了解SEO的发展史
  3. 【c++算法篇】--30分钟从0到精通讲解算法--搜索
  4. 就用人话,边唠边学——javaSE篇(1)让我们开始一段不再止步于hello world的学习之旅
  5. 虚机中安装OFFICE2010专业版
  6. android程序员的座右铭,作为一名程序员,你最喜欢的座右铭是什么?
  7. ELK 环境搭建 (三)
  8. fzu 2230 翻翻棋
  9. 网络与社会——我的观点(探讨)
  10. 微信小程序毕业设计 基于微信技师预约小程序系统开题报告