第四章 4.6节练习 & 4.7节练习
2014-10-17 23:54
113 查看
练习4.20
假设iter的类型是vector<string>::iterator,说明下面的表达式是否合法。如果合法,表达式的含义是什么?如果不合法,错在何处?
(a) *iter++
(b) (*iter)++
(c) *iter.empty()
(d) iter->empty()
(e) ++*iter
(f) iter++->empty();
解答:
(a) 合法。使用当前迭代器指向的字符串,并将迭代器做向后偏移的操作
(b) 合法。使用当前迭代器指向的字符串,并将该数自加1
(c) 非法。‘.’操作符要比*操作符的优先级高,但是iter不是一个string对象
(d) 合法。查看当前迭代器指向的字符是否为空
(e) 非法。这里先对iter进行解引用,在对对象进行自加操作。不过string对象不支持自加操作符
(f) 合法。先判断当前迭代器指向的字符是否为空,然后对迭代器做偏移操作。
练习4.21
编写一段程序,使用条件运算符从vector<int>中找到哪些元素是基础,然后将这些奇数翻倍。
解答:
练习4.22
本节的示例程序将成绩划分成high pass、pass和fail三种,扩展该程序使其进一步将60分到75分之间的成绩设计成low pass。要求程序包含两个版本:一个版本只使用条件运算符;另外一个版本使用1个或多个if语句。那个版本更容易理解呢?为什么?
解答:
层次很分明,看的很清楚。
练习4.23
因为运算符的优先级问题,下面这条表达式无法通过编译。根据4.12节中的表指出它的问题在哪里?应该如何修改?
string s = "word";
string pl = s + s[s.size() -1] == 's'? "" : "s";
解答:
这里+运算符的优先级要比==号高。
string pl = s + (s[s.size() -1] == 's'? "" : "s");
练习4.24
本节的示例程序将成绩划分成high pass、pass和fail三种,他的依据是条件运算符满足右结合律。假如条件运算符满足的是左结合律,求值过程将是怎样的?
解答:
会从表达式的尾部开始进行条件判断。最后判断grade>90,结果和之前没有区别。
假设iter的类型是vector<string>::iterator,说明下面的表达式是否合法。如果合法,表达式的含义是什么?如果不合法,错在何处?
(a) *iter++
(b) (*iter)++
(c) *iter.empty()
(d) iter->empty()
(e) ++*iter
(f) iter++->empty();
解答:
(a) 合法。使用当前迭代器指向的字符串,并将迭代器做向后偏移的操作
(b) 合法。使用当前迭代器指向的字符串,并将该数自加1
(c) 非法。‘.’操作符要比*操作符的优先级高,但是iter不是一个string对象
(d) 合法。查看当前迭代器指向的字符是否为空
(e) 非法。这里先对iter进行解引用,在对对象进行自加操作。不过string对象不支持自加操作符
(f) 合法。先判断当前迭代器指向的字符是否为空,然后对迭代器做偏移操作。
练习4.21
编写一段程序,使用条件运算符从vector<int>中找到哪些元素是基础,然后将这些奇数翻倍。
解答:
#include <iostream> #include <vector> using namespace std; int main(){ vector<int> ivec{ 1, 2, 3, 4, 5, 6, 7, 8, 9 }; for (auto i : ivec){ cout << ((i % 2) ? i * 2 : i) << endl; } }
练习4.22
本节的示例程序将成绩划分成high pass、pass和fail三种,扩展该程序使其进一步将60分到75分之间的成绩设计成low pass。要求程序包含两个版本:一个版本只使用条件运算符;另外一个版本使用1个或多个if语句。那个版本更容易理解呢?为什么?
解答:
string finalgrade = grade > 90 ? "high pass" : (grade < 60) ? "fail" : (grade > 75) : "low pass" : "pass";
if (grade > 90){ finalgrade = "high pass"; } else if (60 < grade && grade < 75){ finalgrade = "low pass"; } else if (grade < 60){ finalgrade = "fail"; } else{ finalgrade = "pass"; }这里肯定是if语句的好理解。
层次很分明,看的很清楚。
练习4.23
因为运算符的优先级问题,下面这条表达式无法通过编译。根据4.12节中的表指出它的问题在哪里?应该如何修改?
string s = "word";
string pl = s + s[s.size() -1] == 's'? "" : "s";
解答:
这里+运算符的优先级要比==号高。
string pl = s + (s[s.size() -1] == 's'? "" : "s");
练习4.24
本节的示例程序将成绩划分成high pass、pass和fail三种,他的依据是条件运算符满足右结合律。假如条件运算符满足的是左结合律,求值过程将是怎样的?
解答:
会从表达式的尾部开始进行条件判断。最后判断grade>90,结果和之前没有区别。
相关文章推荐
- 《java编程思想》第四章 练习9&练习10
- 第四章 4.1.2节练习 & 4.1.3节练习
- Delphia5开发指南->第四章->4.5、4.6节(2010年9月13日星期一)
- 人力资源第四章练习解答
- Java Q&A: 抽象类和接口 - 实战练习
- simply scheme 第四章 练习
- 第四章章节练习
- Python - 基础教程学习(第三章 & 第四章)
- <<展现C#>>第四章 C#类型(修订)
- Python自然语言处理学习笔记(8):1.6-1.8 小结&深入阅读&练习
- 《Python核心编程》第二版第75页第四章练习
- 【学习笔记】Thinking in java (第三版)第四章 初始化和清除(Initialization & Cleanup)
- 单片机中断练习 c&asm
- &amp;gt;--练习总结
- UNIX环境高级编程学习之第四章文件和目录-用C实现Shell中的"ls -l"功能
- 第四章 进程(3)进程的命令行&环境变量
- 第四章: Initialization & Cleanup
- 福尔摩斯探案集(上)第四章 亨利·巴斯克维尔爵士
- HTML[CSS+DIV] 网站布局练习 Zun'Showing
- msp430系列16位超低功耗单片机原理与应用_第四章课后练习