《C++ Primer》第五版课后习题解答_第五章(1)(01-08)
系统环境: windows 10 1703
编译环境:Visual studio 2017
5.1
空语句是不执行任何操作的语句,空语句中只包含一个单独的分号;
当语法上需要一条语句,但逻辑上不需要的时候,会用到空语句。
5.2
块就是复合语句,指用花括号括起来的(可能为空的)语句和声明的序列。
在程序的某个地方,语法上需要一条语句,但是逻辑上需要多条语句时,应该用复合语句。
5.3
#include <iostream> using std::cout; using std::endl; int main() { int sum = 0, val = 1; while (val <= 10) sum += val, ++val; cout << "Sum of 1 to 10 inclusive is " << sum << endl; return 0; }可读性降低了,没有了花括号就很难一眼看出循环体的范围。
5.4
(a) 声明语句错误,可修改为:
string::iterator iter; while (iter != s.end()) {/*...*/}
(b) 错误,布尔变量 status 是在 while 语句的条件中定义的,在 if 条件中不能访问。可修改为:
bool status; while (status = find(word)) {/*...*/} if (!status) {/*...*/}
5.5
#include <iostream> #include <vector> #include <string> using std::cout; using std::endl; using std::cin; using std::vector; using std::string; int main() { vector<string> svec = { "F", "D", "C", "B", "A", "A++" }; unsigned int grade = 0; string final_grade = ""; cout << "Enter your grade: " << endl; cin >> grade; if (grade < 60) { final_grade = svec[0]; } else { final_grade = svec[(grade - 50) / 10]; if (grade != 100) { if (grade % 10 > 7) { final_grade += '+'; } else if (grade % 10 < 3) { final_grade += '-'; } } } cout << final_grade << endl; return 0; }
5.6
#include <iostream> #include <vector> #include <string> using std::cout; using std::endl; using std::cin; using std::vector; using std::string; int main() { vector<string> svec = { "F", "D", "C", "B", "A", "A++" }; unsigned int grade = 0; string final_grade = ""; cout << "Enter your grade: " << endl; cin >> grade; final_grade = (grade < 60) ? svec[0] : svec[(grade - 50) / 10]; final_grade += (grade == 100 || grade < 60) ? "" : ((grade % 10) > 7) ? "+" : ((grade % 10) < 3) ? "-" : ""; cout << final_grade << endl; return 0; }
5.7
// a if (ival1 != ival2) ival1 = ival2; // 末尾添加了分号 else ival1 = ival2 = 0; // b if (ival < minval) // 添加了花括号以标识出块 { minval = ival; occurs = 1; } // c if (int ival = get_value()) // 添加了花括号以标识出块 { cout << "ival = " << ival << endl; if (!val) cout << "ival = 0\n"; } // d if (ival == 0) // 将赋值变成了相等 ival = get_value();
5.8
悬垂 else 指的是,当一个 if 语句嵌套在另一个 if 语句内部时,可能出现 if 分支多于 else 分支,这时很难区分某个给定的 else 是和 哪个 if 匹配。
在 C++ 中,规定 else 与离它最近的尚未匹配的 if 匹配。