1. 程式人生 > >C++ Primer 答案(一)

C++ Primer 答案(一)

第一章

1.6 去掉前兩個 ;

1.8 一個/* 對應一個 */ std::cout << /* "*/" */; 相當於 std::cout << " */; 因此少了一個 "

第二章

2.9 (b)錯誤, {}進行列表初始化存在丟失資料風險時會報錯

2.10 預設初始化: 1、定義在任何函式體外的變數會被初始化為0。    2、定義在函式體內部的變數不會被初始化。  3、類的物件未被初始化,則初值由類決定。 所以 第一個變數是一個空字串,第二個變數是0,第三個變數不確定, 第四個變數是空字串

2.11 宣告:只確定變數的名字和型別。 定義:還會申請儲存空間,可能會賦予初始值。 宣告一個變數而不想定義它,那麼可以在變數名前加extern關鍵字。但是如果後面接著賦值的話,就不再是宣告而是定義 所以 1、定義   2、定義  3、宣告

2.12 變數名: 字母+數字+下劃線(必須以字母或者下劃線開頭)(不能用內建的) 所以 a,c,d 錯誤,b,e 正確

2.14 合法 第二個 i 是區域性變數,作用域只是for迴圈內 所以輸出是 100 45

2.15 引用即別名,引用時型別必須正確,且必須初始化 所以 b,d 錯誤,a,c 正確

2.17 輸出 10 10

2.20  把 i 變成 42*42

2.22 第一個判斷的是:P指標是否為空指標 第二個判斷的是:P指標所指向的物件是否為0

2.25 int *p1, p2; 我以後都採用這種寫法

第三章

3.2 讀取一行:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s;
    while (getline(cin , s))
    {
        cout<<s<<endl;
    }
    return 0;
}

讀取一個單詞:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s;
    while (cin>>s)
    {
        cout<<s<<endl;
    }
    return 0;
}

3.3 對於string類的輸入運算子,它會自動忽略開頭的空白(空格、製表符、換行等等),從第一個真正的字元開始直到下一個空白。 對於getline()函式,它會儲存字串中的空白符,它讀入資料,直到遇到換行符位置。

3.6

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s = "asdfdsfdsf";
    for(char &c : s)  //不要忘了&
    {
        c = 'x';
    }
    cout << s << endl;
    return 0;
}

3.9 不合法,s 是空串

3.10

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s = "[email protected]!s,,,,d,sf";
    for(auto c : s)
    {
        if(!ispunct(c))
            cout << c;
    }
    cout <<endl;
    return 0;
}

3.11 合法,是const char&

3.23

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> v = {1,2,3,4,5,6,7,8,9,10};
    for(auto iter = v.begin(); iter !=v.end(); iter++)
        *iter *= 2;
    for(auto iter = v.cbegin(); iter !=v.cend(); iter++)
        cout << *iter <<endl;
    return 0;
}

第五章

5.13 (a):缺少break; (b):ix應在外部宣告定義 (c):改為case 1 : case 2: case : 3.... (d):case 後面需要加的是常量表達式,可以加const修飾符,將ival、jval、kval變成”常量“

5.25

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    double x, y;
    cout << "Enter your numbers " <<endl;
    while(cin >> x >> y)
    {
        try
        {
            if(y == 0)
                throw runtime_error("The denominator cannot be 0");
            cout << "x/y is " << x/y <<endl;
            break;
        }
        catch (runtime_error err)
        {
            cout << err.what()
                 << "\nTry again? Enter y or n" << endl;
            char c;
            cin >> c;
            if(c == 'n' || !cin)
                break;
            cout << "Enter your numbers " <<endl;
        }
    }
}

第六章

6.16

bool is_empty(const string &s){return s.empty()}

6.16 (a) bool compare(const matrix &m1, const matrix &m2) {} (b) vector<int>::iterator change_var(const int &i, vector<int>::iterator iter){}

6.25

#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
    for(int i = 0; i != argc; i++)
    {
        cout << argv[i] <<endl; //試試看,題目要求來
    }
    return 0;
}