GO语言圣经 第二章习题

这篇具有很好参考价值的文章主要介绍了GO语言圣经 第二章习题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

练习2.1

向tempconv包添加类型、常量和函数用来处理Kelvin绝对温度的转换,Kelvin 绝对零度是−273.15°C,Kelvin绝对温度1K和摄氏度1°C的单位间隔是一样的。

conv.go

package tempconv

// 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) }

func KToC(k Kelvin) Celsius { return Celsius(k + 273.15) }

func CToT(c Celsius) Kelvin { return Kelvin(c + 273.15) }

tempconv.go

package tempconv

import "fmt"

type Celsius float64
type Fahrenheit float64
type Kelvin float64

const (
	AbsoluteZeroC Celsius = -273.15
	FreezingC     Celsius = 0
	BoilingC      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) }

练习2.2

写一个通用的单位转换程序,用类似cf程序的方式从命令行读取参数,如果缺省的话则是从标准输入读取参数,然后做类似Celsius和Fahrenheit的单位转换,长度单位可以对应英尺和米,重量单位可以对应磅和公斤等。

conv.go:

package lenthconv

func MToF(m Meter) Feet { return Feet(m / 0.3084) }

func FToM(f Feet) Meter { return Meter(f * 0.3084) }

lenthconv:

package lenthconv

import "fmt"

type Meter float64
type Feet float64

func (m Meter) String() string { return fmt.Sprintf("%g m", m) }
func (f Feet) String() string  { return fmt.Sprintf("%g ft", f) }

test:

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"

	"gopl.io/ch2/lenthconv"
)

func main() {
	if len(os.Args) == 1 {
		input := bufio.NewScanner(os.Stdin)
		for input.Scan() {
			t, err := strconv.ParseFloat(input.Text(), 64)
			if err != nil {
				fmt.Fprintf(os.Stderr, "cf: %v\n", err)
				os.Exit(1)
			}
			f := lenthconv.Feet(t)
			m := lenthconv.Meter(t)
			fmt.Printf("%s = %s, %s = %s\n",
				f, lenthconv.FToM(f), m, lenthconv.MToF(m))

		}
	}
	for _, arg := range os.Args[1:] {
		t, err := strconv.ParseFloat(arg, 64)
		if err != nil {
			fmt.Fprintf(os.Stderr, "cf: %v\n", err)
			os.Exit(1)
		}
		f := lenthconv.Feet(t)
		m := lenthconv.Meter(t)
		fmt.Printf("%s = %s, %s = %s\n",
			f, lenthconv.FToM(f), m, lenthconv.MToF(m))
	}
}

练习2.3

重写PopCount函数,用一个循环代替单一的表达式。比较两个版本的性能。

func PopCount(x uint64) int {
	res := 0
	for i := 0; i < 8; i++ {
		res += int(pc[byte(x>>(i*8))])
	}
	return res
}

练习2.4

用移位算法重写PopCount函数,每次测试最右边的1bit,然后统计总数。比较和查表算法的性能差异。

func PopCount(x uint64) int {
	res := 0
	for x != 0 {
		res += x & 1
		x >>= 1
	}
	return res
}

练习2.5

表达式x&(x-1)用于将x的最低的一个非零的bit位清零。使用这个算法重写PopCount函数,然后比较性能。文章来源地址https://www.toymoban.com/news/detail-674384.html

func PopCount(x uint64) int {
	res := 0
	for x != 0 {
		res++
		x &= x - 1
	}
	return res
}

到了这里,关于GO语言圣经 第二章习题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 操作系统第二章练习题

    第三部分 选择题 1、在进程管理中,当(     )时,进程从阻塞状态变为就绪状态。   C  A.进程被进程调度程序选中              B.等待某一事件 C.等待的事件发生                       D.时间片用完 2、分配到必要的资源并获得处理机时的进程状态是(

    2024年02月07日
    浏览(41)
  • 计算机组成原理---第二章 习题详解版

    1.                       1.写出下列各整数的原码、反码和补码表示(用8位二进制表示)。其中MSB是最高位(符号位),LSB是最低位。 (1)-35        (2) -128   (3)-127         (4)-1 答:(1)-35   原: 1011 0101  反:1100 1010  补码:1100 1011       (2) -128   在八

    2024年02月04日
    浏览(33)
  • Python基础练习题--第二章 顺序结构

    目录 1007:【例2.1】交换a和B的值 1008:【例2.2】打招呼Hello 1009:【例2.3】购买笔记本 1010:【例2.4】最适宜运动心率 1011:【例2.5】求3个整数的和 1012:练2.1  小明买图书 1013:练2.2  鸡兔同笼 1014:练2.3  求平均分 1015:【例2.6】数字对调 1016:【例2.7】BMI指数 1017:练2.4  与

    2024年02月09日
    浏览(71)
  • 数据挖掘(Data Mining)第二章课后习题

    1、下面哪个不属于数据的属性类型(  相异  ) 2、属于定量的属性类型是(  区间  ) 3、一所大学内的各年纪人数分别为:一年级200人,二年级160人,三年级130人,四年级110人。则年级属性的众数是(  一年级  ) 4、考虑数据集{12 24 33 24 55 68 26},其四分位数极差是(  

    2024年02月08日
    浏览(35)
  • 数据结构英文习题解析-第二章 链表List

    前言:最近快到FDS考试了,po重刷了一下学校的题目,自己整理了一些解析orz 因为po在自己找解析和学习的过程中非常痛苦,所以在此共享一下我的题目和自己写的解题思路,欢迎各位指出错误~全章节预计会陆续更新,可在专栏查看~ HW2 1. For a sequentially stored linear list of leng

    2024年04月11日
    浏览(45)
  • 【数据结构】第二章课后练习题——线性结构

    1、线性表是 一个有限序列,可以为空 2、链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用 单循环链表 存储方式最节省运算时间 3、若某线性表中最常用的操作实在最后一个元素之后插入一个元素和删除第一个元素,则采用 仅有尾结点的

    2024年02月07日
    浏览(52)
  • 【课后习题】 线性代数第六版第二章 矩阵及其运算 习题二

    习题二 1. 计算下列乘积: (1) ( 4 3 1 1 − 2 3 5 7 0 ) ( 7 2 1 ) left(begin{array}{rrr}4 3 1 \\\\ 1 -2 3 \\\\ 5 7 0end{array}right)left(begin{array}{l}7 \\\\ 2 \\\\ 1end{array}right) ⎝ ⎛ ​ 4 1 5 ​ 3 − 2 7 ​ 1 3 0 ​ ⎠ ⎞ ​ ⎝ ⎛ ​ 7 2 1 ​ ⎠ ⎞ ​ ; (2) ( 1 , 2 , 3 ) ( 3 2 1 ) (1,2,3)left(begin{array}{l}3 \\\\ 2 \\\\ 1end{ar

    2024年02月05日
    浏览(35)
  • 【C++】C++ primer plus第二章练习题

    c++程序的模块叫什么? 函数。 下面的预处理器编译指令是做什么用的? 包含头文件,将iostream文件的内容添加·到代码中 下面的语句是做什么用的? using namespace std; using是预编译器指令,让其使用std命名空间 什么语句可以用来打印短语“Hello, world”,然后开始新的一行? s

    2024年02月06日
    浏览(44)
  • 计算机网络原理 谢希仁(第8版)第二章习题答案

    2-01 物理层要解决哪些问题?物理层的主要特点是什么? 要解决的问题: 屏蔽掉硬件设备与传输媒体的差异,使比特流在传输媒体上透明的传输。 用多大电压表示1和0,以及接收方如何识别发送发所发送的比特 确定连接电缆的插头有多少根引脚,以及各引脚如何连接。 特点

    2023年04月09日
    浏览(31)
  • 【计算机网络】(谢希仁第八版)第二章课后习题答案

    第二章 答: 物理层要解决的主要问题: (1)物理层要尽可能地屏蔽掉物理设备和传输媒体,通信手段的不同,使数据链路层感觉不到这些差异,只考虑完成本层的协议和服务。 (2)给其服务用户(数据链路层)在一条物理的传输媒体上传送和接收比特流(一般为串行按顺

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包