c++primer 第一章

Gitoo1993發表於2016-07-12

課後題:

1.6:解釋下面程式片段是否合法。

std::cout << "The sum of " << v1;
<< " and " << v2;
<< " is " << v1 + v2 << std::endl;

如果程式是合法的,它輸出什麼?如果程式不合法,原因何在?應該如何修正?

答:不合法。c++中以;為分隔符,因此該片段中包含三行語句,而<<作為輸出運算子,應該接收兩個運算物件,且左側物件必須是ostream型別。因此後兩句並不合法。修改的話需要在後兩句上加上std::cout。


1.7編譯一個包含不正確的巢狀註釋的程式,觀察編譯器返回的錯誤資訊。

答:

#include<iostream>
int main()
{
/*
*註釋對/* */不能巢狀。
*"不能巢狀"幾個字會被認為是原始碼,
*像剩餘程式那樣處理
*/
return 0;
}

提示unknown character。


1.8指出下列哪些輸出語句是合法的(如果有的話):

std::cout<<"/*";

std::cout<<"*/";

std::cout<</*"*/"*/;

std::cout<</*"*/"/*"/*"*/;

預測編譯這些語句會產生什麼樣的結果,實際編譯這些語句來驗證你的答案,改正每一個編譯錯誤。

答:1、2、4兩句編譯通過,第3句出現錯誤。因為第3句中的前一個"在界定符之中被註釋了,因此出現了"不匹配,改正的話需要在最後一個/後加上一個"。


1.14對比for迴圈和while迴圈,兩種形式的優缺點各是什麼?

答:while對迴圈的條件進行真假判斷,更像一個不斷迴圈執行的if語句,適應面更加廣泛,不僅僅應用於對範圍的限定。而for迴圈則針對數字遞增遞減的場合進行了簡化,在限定數字範圍的場合下for迴圈比while迴圈更加直觀。


1.23編寫程式,讀取多條銷售記錄,並統計每個ISBN有幾條銷售記錄。

答:書中假設輸入時相同ISBN號是連續的,因此只要相鄰兩個ISBN號不同便停止計數並輸出。只需要設定兩個變數

#include<iostream>
#include"Sales_item.h"
int main()
{
Sales_item currBook,Book;
std::cin >> currBook;
int cnt = 1;
while (std::cin >> Book){
if (Book.isbn() == currBook.isbn()){
cnt++;
}
else{
std::cout << currBook.isbn() << " occur " << cnt << " time " << std::endl;
currBook = Book;
cnt = 1;
}
}
std::cout << currBook.isbn() << " occur " << cnt << " time " << std::endl;
return 0;
}



相關文章