第一章
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 = "as?d@fd!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;
}
6.27
#include <iostream>
#include <vector>
using namespace std;
int sum(initializer_list<int> il)
{
int sum =0;
for(const auto &elem : il)
sum += elem;
return sum;
}
int main(int argc, char *argv[])
{
cout << sum({12,435,43,4543}) <<endl;
return 0;
}
6.40
(a)合法
(b)不合法,默认实参应放在后面
6.44
inline bool isShoter(const string &s1, const string &s2)
{
return s1.size() < s2.size();
}