《C++ Primer》第五版课后习题解答_第四章(2)(21-33)
来源:互联网 发布:js事件绑定on 编辑:程序博客网 时间:2024/05/21 14:08
系统环境: windows 10 1703
编译环境:Visual studio 2017
4.21
#include <iostream>#include <vector>using std::cout;using std::endl;using std::vector;int main(){ vector<int> ivec = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; for (vector<int>::size_type i = 0; i != ivec.size(); ++i) { ((ivec[i] % 2) == 0) ? ivec[i] = ivec[i] : ivec[i] *= 2; } for (auto a : ivec) { cout << a << " "; } cout << endl; return 0;}
4.22
#include <iostream>#include <string>using std::cout;using std::endl;using std::cin;using std::string;int main(){ int grade; string finalgrade; cin >> grade; // 条件运算符 finalgrade = (grade > 90) ? "hide pass" : (75 > grade && grade > 60) ? "low pass" : (grade < 60) ? "fail" : "pass"; // if 语句 if (grade > 90) { finalgrade = "high pass"; } else if (75 > grade && grade > 60) { finalgrade = "low pass"; } else if (grade < 60) { finalgrade = "fail"; } else { finalgrade = "pass"; } cout << finalgrade << endl; return 0;}if 版本的更容易理解,因为每个判断条件及其执行语句都是分开写的。然而从简便性上来说,条件运算符用了更少的行数。
4.23
原表达式,会先计算 s + s[s.size() - 1] ,再用其结果执行其后的条件运算符。应该修改为:
string pl = s + ((s[s.size() - 1] == 's') ? "" : "s");
4.24
如果条件运算符满足左结合律,则原式
finalgrade = (grade > 90) ? "high pass" : (grade < 60) ? "fail" : "pass"
的计算过程如下:
finalgrade = ((grade > 90) ? "high pass" : (grade < 60)) ? "fail" : "pass"
如果 grade 大于90,第一个条件运算符的返回值是 high pass,这个值又被当作下一个条件运算符的条件,当非空字符串被当做布尔值时,其为 1,所以 finalgrade 的值最终为 fail。
4.25
11111111111111111110001110000000
先将 'q' 取反,则先被提升为 int 类型(32位),再逐位求反,然后左移六位。
4.26
unsigned int 的最小长度为 16 位,例子中若想保存所有学生的成绩,至少需要 32 位,故其结果应为未定义行为(undefined behavior)
4.27
(a) 3
(b) 7
(c) true
(d) true
4.28
#include <iostream>using std::cout;using std::endl;int main(){ // 以 p30 算数类型表为例 cout << "bool " << sizeof(bool) << endl; cout << "char " << sizeof(char) << endl; cout << "wchar_t " << sizeof(wchar_t) << endl; cout << "char16_t " << sizeof(char16_t) << endl; cout << "char32_t " << sizeof(char32_t) << endl; cout << "short " << sizeof(short) << endl; cout << "int " << sizeof(int) << endl; cout << "long " << sizeof(long) << endl; cout << "long long " << sizeof(long long) << endl; cout << "float " << sizeof(float) << endl; cout << "double " << sizeof(double) << endl; cout << "long double " << sizeof(long double) << endl; return 0;}输出为
bool 1
char 1
wchar_t 2
char16_t 2
char32_t 4
short 2
int 4
long 4
long long 8
float 4
double 8
long double 8
4.29
第一个表达式输出结果为 10,其计算的是数组 x 中的元素数量;
第二个表达式输出结果不定,因为其计算的是指针本身的大小,其值由机器决定。
4.30
(a) (sizeof x) + y
(b) sizeof (p -> mem[i])
(c) (sizeof a) < b
(d) sizeof (f())
4.31
本书 p132 指出,除非必须,否则不用递增递减运算符的后置版本。建议养成使用前置版本的习惯。
若使用后置版本的递增递减运算符,无需做改动。
4.32
ptr 指向数组的开头,ix 表示下标。
当下标 ix 不等于数组长度,且指针不为尾后指针时,执行循环。
4.33
根据逗号运算符的求值顺序,题中表达式可等价为:
(someValue ? ++x, ++y : --x), --y当 someValue 为真时,计算 ++x,返回 ++y;
当 someValue 为假时,计算 --x,返回 --y;
由上述分析可知,其和下述表达式等效:
someValue ? (++x, ++y) : (--x, --y)
- 《C++ Primer》第五版课后习题解答_第四章(2)(21-33)
- 《C++ Primer》第五版课后习题解答_第四章(1)(01-20)
- 《C++ Primer》第五版课后习题解答_第四章(3)(34-38)
- 《C++ Primer》第五版课后习题解答_第五章(2)(09-14)
- 《C++ Primer》第五版课后习题解答_第二章(3)(21-29)
- 《C++ Primer》第五版课后习题解答_第三章(3)(21-29)
- 《C++ Primer》第五版课后习题解答_第二章(2)(09-20)
- 《C++ Primer》第五版课后习题解答_第三章(2)(06-20)
- 《C++ Primer》第五版课后习题解答_第六章(2)(08-15)
- 《C++ Primer》第五版课后习题解答_第五章(1)(01-08)
- 《C++ Primer》第五版课后习题解答_第五章(3)(15-19)
- 《C++ Primer》第五版课后习题解答_第五章(4)(20-25)
- C++Primer 中文版 第五版 第四章课后习题答案
- 《C++ Primer》第五版课后习题解答_第二章(1)(01-08)
- 《C++ Primer》第五版课后习题解答_第二章(4)(30-38)
- 《C++ Primer》第五版课后习题解答_第二章(5)(39-42)
- 《C++ Primer》第五版课后习题解答_第三章(1)(01-05)
- 《C++ Primer》第五版课后习题解答_第三章(4)(30-36)
- JVM垃圾回收
- 深度学习项目成功的六要素
- scala + intellij idea 环境搭建及编译、打包
- 5G时代,构建新型汽车生态
- 横向ListView(四) —— 添加滚动条
- 《C++ Primer》第五版课后习题解答_第四章(2)(21-33)
- 创建带文字的图片
- Node.js 命令行程序开发教程
- Java Web系统常用的第三方接口
- 修改源文件目录为src/main/java,src/main/resources形式
- R 语言学习教程
- HDU 6180 Schedule(贪心)
- 高性能Web框架
- matlab中uigetfile的用法