- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++Primer (第五版)第四章表达式章节编程练习答案
4.2 根据4.12节中的表,在下述表达式的合理位置添加括号,使得添加括号后运算对象的组合顺序与添加括号前⼀致。
(a) *vec.begin() (b) *vec.begin() + 1
答:*(vec.begin()) , (*(vec.begin())) + 1
4.3 C++语⾔没有明确规定⼤多数⼆元运算符的求值顺序,给编译器优化留下了余地。这种策略实际上是在代码⽣成效率和程序潜在缺陷之
间进⾏了权衡,你认为这可以接受吗?请说出你的理由。
答:可以接受。C++的设计思想是尽可能地“相信”程序员,将效率最⼤化。然⽽这种思想却有着潜在的危害,就是⽆法控制程序员 ⾃⾝引
发的错误。因此 Java 的诞⽣也是必然,Java的思想就是尽可能地“不相信”程序员。
4.5 写出下列表达式的求值结果。
答:
4.6 写出⼀条表达式⽤于确定⼀个整数是奇数还是偶数。
答:
注 0x1中“0x”表⽰的是⼗六进制数,1是⼗六进制的数值1:
0x1就是最后⼀位是1。偶数的⼆进制表⽰中最后⼀位是0,如果是奇数那是1,所以⼀个整数与0x1做按位与运算得到的结果是0或者 1就
可以判断出这个整数是偶数还是奇数
4.7 溢出是何含义?写出三条将导致溢出的表达式。
答:
注
unsigned类型,即⽆符号类型是属于整型变量。
unsigned可以单独使⽤代表unsignedint,也可以作为前缀,都表⽰⽆符号整数,即永远为⾮负的整型变量,⼤于0的数据范围约扩⼤为原
来的2倍。
unsigned能存储的数据范围则是0~65535(最⾼位不⽤做符号位,所以是2的16次⽅,⼀共65536
4.9 解释在下⾯的if语句中条件部分的判断过程。
答:⾸先判断cp,cp 不是⼀个空指针,因此cp为真。然后判断*cp,*cp 的值是字符H,⾮0。因此最后的结果为真。
4.12 假设i、j和k是三个整数,说明表达式i != j k的含义。
答:这个表达式等于i != (j k)。⾸先得到j k 的结果为true或false ,转换为整数值是1或0,然后判断i不等于1或0 ,最终的结果为bool值。
4.13 在下述语句中,当赋值完成后 i 和 d 的值分别是多少?
答:
4.14 执⾏下述 if 语句后将发⽣什么情况?
答:
4.15 下⾯的赋值是⾮法的,为什么?应该如何修改?
答:
p是指针,不能赋值给int,应该改为
注
4.16 尽管下⾯的语句合法,但它们实际执⾏的⾏为可能和预期并不⼀样,为什么?应该如何修改?
答:
4.19 假设ptr的类型是指向int的指针、vec的类型是vector、ival的类型是int,说明下⾯的表达式是何含义?如果有表达式不正确,为什么?
应该如何修改?
答:
(a) 判断ptr不是⼀个空指针,并且ptr当前指向的元素的值也为真,然后将ptr指向下⼀个元素
(b) 判断ival的值为真,并且(ival + 1)的值也为真
(c) 表达式有误。C++并没有规定=运算符两边的求值顺序,应该改为vec[ival] = vec[ival+1]
4.20 假设iter的类型是vector::iterator, 说明下⾯的表达式是否合法。如果合法,表达式的含义是什么?如果不合法,错在何处?
答:
4.21 编写⼀段程序,使⽤条件运算符从vector中找到哪些元素的值是奇数,然后将这些奇数值翻倍。
答:
4.22 本节的⽰例程序将成绩划分为high pass、pass 和 fail 三种,扩展该程序使其进⼀步将 60 分到 75 分之间的成绩设定为low pass。要
求程序包含两个版本:⼀个版本只使⽤条件运算符;另⼀个版本使⽤1个或多个if语句。哪个版本的程序更容易理解呢?为什么?
答:
4.23 因为运算符的优先级问题,下⾯这条表达式⽆法通过编译。根据4.12节中的表指出它的问题在哪⾥?应该如何修改?
答:
加法运算符的优先级⾼于条件运算符。因此要改为
4.27 下列表达式的结果是什么?
答:
4.28 编写⼀段程序,输出每⼀种内置类型所占空间的⼤⼩。
答:
4.30 根据4.12节中的表,在下述表达式的适当位置加上括号,使得加上括号之后的表达式的含义与原来的含义相同。
答:
4.32 解释下⾯这个循环的含义。
答:
这个循环在遍历数组ia,指针ptr和整型ix都是起到⼀个循环计数的功能。
4.34 根据本节给出的变量定义,说明在下⾯的表达式中将发⽣什么样的类型转换
答:
4.35 假设有如下的定义:
请回答在
文档评论(0)