首页 » 技术分享 » 《C++ Primer》第五版课后习题解答_第五章(1)(01-08)

《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 匹配。

转载自原文链接, 如需删除请联系管理员。

原文链接:《C++ Primer》第五版课后习题解答_第五章(1)(01-08),转载请注明来源!

0