《C++ Primer》5th 课后练习 第四章 表达式 1~10

练习4.1 表达式 5 + 10 * 20 / 2 的求值结果是多少?

105

练习4.2 根据4.12节中的表,在下述表达式的合理位置添加括号,使得添加括号后运算对象的组合顺序与添加括号前一致。

/*- (a)*/ *vec.begin()
/*- (b)*/ *vec.begin() + 1
*(vec.begin())
(*(vec.begin()))+1

练习4.3 C++语言没有明确规定大多数二元运算符的求值顺序,给编译器优化留下了余地。这种策略实际上是在代码生成效率和程序潜在缺陷之间进行了权衡,你认为这可以接受吗?请说出你的理由。

我认为可以接受,提高效率的代价是对程序员提出更高要求。

练习4.4 在下面的表达式中添加括号,说明其求值过程及最终结果。编写程序编译该(不加括号的)表达式并输出结果验证之前的推断。

12 / 3 * 4 + 5 * 15 + 24 % 4 / 2 = 91

(((12/3) * 4) + (5*15)) + ((24%4) / 2) = 91

练习4.5 写出下列表达式的求值结果。

-30 * 3 + 21 / 5  // -90+4 = -86
-30 + 3 * 21 / 5  // -30+63/5 = -30+12 = -18
30 / 3 * 21 % 5   // 10*21%5 = 210%5 = 0
-30 / 3 * 21 % 4  // -10*21%4 = -210%4 = -2

练习4.6 写出一条表达式用于确定一个整数是奇数还是偶数。

if(x|1) cout << "even"<<endl; else cout << "odd" << endl;

练习4.7 溢出是何含义?写出三条将导致溢出的表达式。

当计算的结果超出该类型所能表示的范围时就会产生溢出。

short svalue = 32767; ++svalue; // -32768
unsigned uivalue = 0; --uivalue;  // 4294967295
unsigned short usvalue = 65535; ++usvalue;  // 0

练习4.8 说明在逻辑与、逻辑或及相等性运算符中运算对象的求值顺序。

先确定第一个取值,再考虑是否求第二个。

练习4.9 解释在下面的if语句中条件部分的判断过程。

const char *cp = "Hello World";
if (cp && *cp)

先判断cp是否为空指针,cp不是空指针,前面一部份为真,再判断后面*cp是否是空字符串,不是,后面为真,整体为真。

练习4.10 为while 循环写一个条件,使其从标准输入中读取整数,遇到 42 时停止。

while(cin >> n && n != 42);
发布了276 篇原创文章 · 获赞 21 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_40758751/article/details/103986885