《C Primer》第2章 2 6節習題答案

2021-10-11 22:01:13 字數 2519 閱讀 7497

2.5 自定義資料結構

練習39:編譯下面的程式觀察其執行結果,注意,如果忘記寫類定義體後面的分號會發生什麼情況?記錄下相關資訊,以後可能會有用。

struct foo    //注意:沒有分號

int main()

【解答】

該程式無法編譯通過,原因是缺少乙個分號。因為類體後面可以緊跟變數名以示對該型別物件的定義,所以在類體右側表示結束

的花括號後必須寫乙個分號。稍作修改,該程式就可以編譯通過 了。

struct foo ;

int main()

練習40:根據自已的理解寫出sales_data類,最好與書中的例子有所區別。

【解答】

原書中的程式包含3個資料成員,分別是bookno(書籍編號)、units_sold(銷售量)、revenue(銷售收入),新設計的

sales_data類細化了銷售收入的計算方式,在保留bookno和units_sold的基礎上,新增了sellingprice(零售價、原價)、

saleprice(實售價、折扣價)、discount(折扣),其中discount=saleprice/sellingprice。

struct sales_data;

練習41:使用你自己的sales_data類重寫1.5.1節(第20頁)、1.5.2節(第21頁)和1.6節(第22頁)的練習。眼下先把sales_data類的定義和main函式放在同乙個檔案裡。

#include #include using namespace std;

class sales_data

sales_data(std::istream &is)

public:

sales_data& operator += (const sales_data&);

std::string isbn() const

private:

std::string bookno; //書籍編號,隱式初始化為空串

unsigned units_sold = 0; //銷售量,顯示初始化為0

double sellingprice = 0.0; //原始**,顯示初始化為0.0

double saleprice = 0.0; //實售**,顯示初始化為0.0

double discount = 0.0; //折扣,顯示初始化為0.0

};inline bool compareisbn(const sales_data &lhs, const sales_data &rhs)

sales_data operator + (const sales_data&, const sales_data&);

inline bool operator == (const sales_data &lhs, const sales_data &rhs)

inline bool operator != (const sales_data &lhs, const sales_data &rhs)

sales_data& sales_data::operator += (const sales_data& rhs)

sales_data operator + (const sales_data& lhs, const sales_data& rhs)

std::istream& operator >> (std::istream& in, sales_data& s)

std::ostream& operator << (std::ostream& out, const sales_data& s)

int main()

sales_data trans1, trans2;

std::cout << "請輸入兩條isbn相同的銷售記錄:" << std::endl;

std::cin >> trans1 >> trans2;

if(compareisbn(trans1, trans2))

std::cout << "彙總資訊:isbn,售出本數,原始**,實售**,折扣為" << trans1 + trans2 << std::endl;

else

std::cout << "兩條銷售記錄的isbn不同" << std::endl;

sales_data total, trans;

std::cout << "請輸入幾條isbn相同的銷售記錄:" << std::endl;

if(std::cin >> trans)

else //isbn不同

}else

int num = 1; //記錄當前書籍的銷售記錄總數

std::cout << "請輸入若干銷售記錄:" << std::endl;

if(std::cin >> trans1)

else //isbn不同

std::cout << trans1.isbn() << "共有" << num << "條銷售記錄" << std::endl;

}else

return 0;

}

《C Primer》第2章 2 4節習題答案

2.4 const限定符 練習26 下面的哪些句子是合法的?如果有不合法的句子,請說明為什麼?a const int buf b int cnt 0 c const int sz cnt d cnt sz 解答 本題的所有語句應該看作是順序執行的,即形如 const int buf int cnt ...

C primer習題 第3章

習題 2.11 編寫程式,要求使用者輸入兩個數 底數 base 和指數 exponent 輸出底數的指數次方的結果。include include include using namespace std intmain for int i 1 i exp i result base cout 的 次...

C primer習題 第4章

習題 4.7 編寫必要的 將乙個陣列賦給另乙個陣列,然後把這段 改用 vector 實現。考慮如何將乙個 vector 賦給另乙個 vector。用陣列實現 include using namespace std intmain inta2 size for size t i 0 ii a2 i a...