C++ Primer(第五版) 第五章练习答案

C++ Primer(第五版) 第五章练习答案

目录

  • C++ Primer(第五版) 第五章练习答案
      • 5.1
      • 5.2
      • 5.3
      • 5.4
      • 5.5
      • 5.6
      • 5.7
      • 5.8
      • 5.9
      • 5.10
      • 5.11
      • 5.12
      • 5.13
      • 5.14
      • 5.15
      • 5.16
      • 5.17
      • 5.18
      • 5.19
      • 5.20
      • 5.21
      • 5.22
      • 5.23
      • 5.24
      • 5.25

5.1


/**
 * 只有单独一个分号的语句 ;
 * 语法需要但逻辑不需要时用空语句
 */

5.2



/**
 * 块是一条复合语句 { }
 * 语法需要一条语句但逻辑上需要多条语句时用块
 */

5.3

#include 
#include 
#include 

using namespace std;

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



/**
 * iter 没初始化
 * while(string::iterator iter != s.end()) { }
 * 
 * while (bool status = find(word)) { }
 * 
 * status 未定义
 * if (!status) { }
 */

5.5

#include 
#include 
#include 

using namespace std;

int main()
{
     
    vector<string> vec{
     "E", "D", "C", "B", "A", "A++"};

    int ch;
    while (cin >> ch && ch >= 0 && ch <= 100)
        if (ch == 100)
            cout << vec[5] << endl;
        else if (ch >= 90)
            cout << vec[4] << endl;
        else if (ch >= 80)
            cout << vec[3] << endl;
        else if (ch >= 70)
            cout << vec[2] << endl;
        else if (ch >= 60)
            cout << vec[1] << endl;
        else
            cout << vec[0] << endl;

    return 0;
}

5.6

#include 
#include 
#include 

using namespace std;

int main()
{
     
    vector<string> vec{
     "E", "D", "C", "B", "A", "A++"};

    int ch;
    while (cin >> ch && ch >= 0 && ch <= 100)
        cout << (ch == 100 ? vec[5] :
                 ch >= 90 ? vec[4] : 
                 ch >= 80 ? vec[3] :
                 ch >= 70 ? vec[2] :
                 ch >= 60 ? vec[1] : vec[0]) << endl;

    return 0;
}

5.7


/**
 * a
 * 分号
 * ival1 = ival2;
 * 
 * b
 * 块
 * {
 *     minval = ival;
 *     occurs = 1;
 * } 
 * 
 * c
 * ival 未定义
 * if (!ival)
 * 
 * d
 * 不是赋值
 * if (ival == 0)
 */

5.8



/**
 * if 的 分支 多于 else 分支
 * else 匹配最近尚未匹配的 if
 */

5.9

#include 
#include 
#include 

using namespace std;

int main()
{
     
    string str;
    size_t sum = 0;

    while (getline(cin, str))
        for (auto &ch : str)
            if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
                ++sum;
    
    cout << sum << endl;

    return 0;
}

5.10

#include 
#include 
#include 
#include 

using namespace std;

int main()
{
     
    string str;
    size_t sum = 0;

    while (getline(cin, str))
        for (auto ch : str)
        {
     
            ch = tolower(ch);
            if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
                ++sum;
        }
    
    cout << sum << endl;

    return 0;
}

5.11

#include 
#include 
#include 
#include 

using namespace std;

int main()
{
     
    string str;
    size_t sum = 0;
    size_t space = 0;

    while (getline(cin, str))
        for (auto ch : str)
        {
     
            ch = tolower(ch);
            if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
                ++sum;
            if (isspace(ch))
                ++space;
        }
    
    cout << sum << " " << space << endl;

    return 0;
}

5.12

#include 
#include 
#include 
#include 

using namespace std;

int main()
{
     
    string str;
    size_t sum = 0;
    size_t space = 0;
    size_t count = 0;
    char upper = '\0';

    while (getline(cin, str))
        for (auto ch : str)
        {
     
            if (upper != '\0')
            {
     
                string s = string() + upper + ch;
                if (s == "ff" || s == "fl" || s == "fi")
                    ++count;
            }

            ch = tolower(ch);
            if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
                ++sum;
            if (isspace(ch))
                ++space;
            
            upper = ch;
        }
    
    cout << sum << " " << space << " " << count << endl;

    return 0;
}

5.13


/**
 * a 没写 break
 * b index 不是 1 时 ix 未定义
 * c case 后接 整型常量表达式
 *      case (1, 2, 3, 4, 5, 6, 7, 8, 9) 加 ( ) 
 *      或者
 *      case 1:
 *      ...
 *      case 9:
 * d 标签值不是常量
 */

5.14


#include 
#include 
#include 

using namespace std;

int main()
{
     
    // 保存单词和次数
    pair<string, int> pa(string(), 0);
    // 这次单词
    string word;
    // 上次单词
    string upper;
    // 出现次数
    int sum = 1;

    while (cin >> word)
    {
     
        // 本次单词 == 上次单词
        if (word == upper)
        {
     
            ++sum;
        }
        // 没有相同单词
        else if (sum == 1)
        {
     
            // 本次单词 赋给 上一个
            upper = word;
        }
        else
        {
     
            if (pa.second < sum)
                pa = make_pair(upper, sum);
            // 重置
            sum = 1;
            upper = word;
        }
    }

    // 存入最后一个相同单词
    if (sum != 1 && pa.second < sum)
        pa = make_pair(word, sum);

    if (pa.second == 0)
        cout << "null" << endl;
    else
        cout << pa.first << " " << pa.second;

    return 0;
}

5.15


/**
 * a
 * ix 未定义
 * 
 * b
 * for 循环少个 ; 
 * 
 * c
 * 条件双递增
 */

5.16



/**
 * 你喜欢
 */

5.17

#include 
#include 

using namespace std;

bool test(vector<int> &vec1, vector<int> &vec2, size_t size);

int main()
{
     
    vector<int> vec1{
     0, 1, 1, 2};
    vector<int> vec2{
     0, 1, 1, 2, 3, 5, 8};

    if (vec1.size() <= vec2.size())
        cout << boolalpha << test(vec1, vec2, vec1.size()) << noboolalpha << endl;
    else
        cout << boolalpha << test(vec1, vec2, vec2.size()) << noboolalpha << endl;

    return 0;
}

bool test(vector<int> &vec1, vector<int> &vec2, size_t size)
{
     
    for (size_t i = 0; i != size; ++i)
        if (vec1[i] != vec2[i])
            return false;

    return true;
}

5.18

/**
 * a
 * do {
 * ...
 * } while (cin);
 * 
 * b
 * do while 不允许在条件部分定义变量
 * 
 * c
 * while (ival);  ival 未定义
 */

5.19

#include 
#include 

using namespace std;

int main()
{
     
    string str1, str2;

    cout << "请输入两个string: " << endl;
    do
    {
     
        if (str1.empty())
            continue;
        else if (str1.size() <= str2.size())
            cout << "最短的: " + str1 << endl;
        else
            cout << "最短的: " + str2 << endl;

        cout << "请输入两个string: " << endl;

    } while (cin >> str1 >> str2);
    

    return 0;
}

5.20

#include 
#include 

using namespace std;

int main()
{
     
    string word;
    string upper;
    bool bl = false;

    while (cin >> word)
    {
     
        if (word == upper)
        {
     
            bl = true;
            break;
        }
        upper = word; 
    }

    if (bl)
        cout << word << endl;
    else
        cout << "null" << endl;

    return 0;
}

5.21

#include 
#include 
#include 

using namespace std;

int main()
{
     
    string word;
    string upper;
    bool bl = false;

    while (cin >> word)
    {
     
        if (!upper.empty() && isupper(upper[0]) && word == upper)
        {
     
            bl = true;
            break;
        }
        upper = word; 
    }

    if (bl)
        cout << word << endl;
    else
        cout << "null" << endl;

    return 0;
}

5.22

#include 
#include 
#include 

using namespace std;

int get_size() {
      int i; cin >> i; return i; }

int main()
{
     
    begin:
    int sz = get_size();
    if (sz <= 0)
        goto begin;


    for (int sz = get_size(); sz <= 0; sz = get_size())
        ;

    return 0;
}

5.23

#include 
#include 
#include 
#include 

using namespace std;

int main()
{
     
    int i, j;

    while (cin >> i >> j)
        cout << i / j << endl;

    return 0;
}

5.24

#include 
#include 
#include 
#include 

using namespace std;

int main()
{
     
    int i, j;

    while (cin >> i >> j)
    {
     
        if (j == 0)
            throw runtime_error("除数为0");
        cout << i / j << endl;
    }

    return 0;
}

5.25

#include 
#include 
#include 
#include 

using namespace std;

int main()
{
     
    int i, j;

    while (cin >> i >> j)
    {
     
        try
        {
     
            if (j == 0)
                throw runtime_error("除数为0");
            cout << i / j << endl;
            
        }
        catch(runtime_error e)
        {
     
            char ch;
            cerr << e.what() << endl
                 << "是否从新输入 y / n" << endl;
            cin >> ch;
            if (ch == 'n')
                break;
        }
    }
    return 0;
}

你可能感兴趣的:(C++,Primer(第五版),c++)