《C++ Primer》第五版课后习题解答_第五章(3)(15-19)
系统环境: windows 10 1703
编译环境:Visual studio 2017
5.15
(a) 变量 ix 定义在 for 循环的语句头中,因此不能在 for 循环结束继续被 if 语句使用。可以修改为
int ix; for (ix = 0; ix != sz; ++ix) {/*...*/ } if (ix != sz)
(b) for 循环中省略了 init-statement,但是应该保留分号。可以修改为
int ix; for (; ix != sz; ++ix) {/*...*/}
(c) expression 语句有误。可以修改为
for (int ix = 0; ix != sz; ++x) {/*...*/}
5.16
条件不变反复执行的情况:
#include <iostream> using std::cout; using std::endl; using std::cin; // 统计输入文本中非负数的个数 int main() { int ival = 0, Cnt = 0; while (cin >> ival) { if (ival >= 0) ++Cnt; } cout << Cnt << endl; return 0; }
#include <iostream> using std::cout; using std::endl; using std::cin; // 统计输入文本中非负数的个数 int main() { int ival = 0, Cnt = 0; for (; cin >> ival; ) { if (ival >= 0) { ++Cnt; } } cout << Cnt << endl; return 0; }
按步骤迭代,索引值在某个范围内变化的情况:
#include <iostream> using std::cout; using std::endl; using std::cin; // 计算 1 到 10 的整数之和 int main() { int sum = 0, i = 1; while (i <= 10) { sum += i; ++i; } cout << sum << endl; }
#include <iostream> using std::cout; using std::endl; using std::cin; // 计算 1 到 10 的整数之和 int main() { int sum = 0; for (int i = 1; i <= 10; ++i) { sum += i; } cout << sum << endl; return 0; }如果只能使用一种循环,我倾向于使用 while 循环,因为在不知道循环范围的情况下,for 循环将会很难使用,而 while 可以适用更多的情况。
5.17
#include <iostream> #include <vector> #include <string> using std::cout; using std::endl; using std::vector; using std::string; int main() { string result; vector<int> ival1 = { 0, 1, 1, 2 }; vector<int> ival2 = { 0, 1, 1, 2, 3, 5, 8 }; auto size1 = ival1.size(); auto size2 = ival2.size(); int size = (size1 >= size2) ? size2 : size1; // 比较两个 vector 的维度,把小的那个赋给 size for (decltype(ival1.size()) i = 0; i != size; ++i) { result = (ival1[i] == ival2[i]) ? "true" : "false"; // 比较元素,以决定将 true 或 false 赋给 result } cout << result << endl; return 0; }
5.18
(a) 计算输入两个数字的和。do 之后缺少了花括号,可以修改为
do { int v1, v2; cout << "Please enter two numbers to sum: "; if (cin >> v1 >> v2) cout << "Sum is: " << v1 + v2 << endl; } while (cin);(b) 最好不要在 while 语句里定义变量,有可能出现预料不到的错误,可以修改为
int ival = 0; do { //... } while (ival = get_response());(c) 在 do 语句块内定义的变量 ival 无法在作用域外被访问到,可以修改为
int ival = 0; do { ival = get_response(); } while (ival);
5.19
#include <iostream> #include <string> using std::cout; using std::endl; using std::cin; using std::string; int main() { string str, str1, str2; cout << "Please enter two strings: " << endl; cin >> str1 >> str2; str = (str1.size() >= str2.size()) ? str2 : str1; for (auto a : str) { cout << a ; } cout << endl; return 0; }