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;
}