[C++ primer] 第五章习题答案

    xiaoxiao2023-11-14  139

    [C++ primer] 第五章习题答案

    5.15.25.35.45.85.105.105.115.135.155.185.23

    5.1

    如果在程序的某个地方,语法上需要一条语句但是逻辑上不需要,此时应该使用空语句。(注意此时应该加上注释,增加可读性)

    5.2

    复合语句(块)是用花括号括起来的(可能为空的)语句和声明的序列,复合语句也被称作块。 一个块就是一个作用域,在块中引入的名字只能在块内部以及嵌套在块中的子块里访问。 块不以分号作为结束。

    5.3

    会降低代码的可读性

    while(val <= 10) sum += val, ++val;

    5.4

    定义在控制结构当中的变量只在相应语句的内部可见,一旦语句结束,变量也就超出其作用范围了 (a)iter没有初始化,直接与end比较非法 (b)if循环没有意义,并且变量status在if循环中不可用

    5.8

    当if语句嵌套时,可能会出现if语句的数量大于else语句的情况,这时,我们如何确定给定的else是和哪个if匹配的呢?这个问题就称作悬垂else。

    c++中规定,else与离它最近且尚未匹配的if语句匹配。

    5.10

    #include <iostream> #include <vector> using namespace std; int main() { int cntA = 0, cntE = 0, cntI = 0, cntO = 0, cntU = 0; char temp; while (cin >> temp) { if (temp == 'a') cntA++; else if (temp == 'e') cntE++; else if (temp == 'i') cntI++; else if (temp == 'o') cntO++; else if (temp == 'u') cntU++; } }

    5.10

    #include <iostream> #include <vector> using namespace std; int main() { int cntA = 0, cntE = 0, cntI = 0, cntO = 0, cntU = 0; char temp; while (cin >> temp) { switch (cval) { case 'a': case 'A': cntA++; break; case 'e': case 'E': cntE++; break; case 'i': case 'I': cntI++; break; case 'o': case 'O': cntO++; break; case 'u': case 'U': cntU++; break; } } }

    5.11

    空格符‘ ’ 制表符‘/t’ 换行符’/n’

    5.13

    (a)没有break, 程序会在遇到字符a时把aCnt, eCnt, iouCnt全部+1 (b)ix应该在外部定义 (c)case标签中只能有一个常量,不能用逗号 (d)case标签必须是常量表达式

    5.15

    (a)if语句永远不成立 (b)ix没有初始化 (c)死循环

    5.18

    (a)没有加{} (b)不允许在do while的条件部分定义变量 (c)condition使用的变量必须定义在循环体外部

    5.23

    #include <iostream> #include <stdexcept> #include <vector> using namespace std; int main() { int a, b; while (cin >> a >> b) { try { if (b == 0) throw runtime_error("被除数不能为0"); cout << a / b << endl; break; } catch (runtime_error err) { cout << err.what(); cout << "是否要重新输入" << endl; char c; cin >> c; if (!cin || c == 'n') break; } } }
    最新回复(0)