《C++primer》v5 第4章 表达式 读书笔记 习题答案
4.1
105
4.2
*vec.begin()=*(vec.begin())//先调用点运算符,再解引用
*vec.begin()+1=(*vec.begin())+1//先解引用,再加一
4.3略?
4.4
(12/3*4)+(5*15)+(24%4/2)=91
4.5
(a)-86(b)-16
(c)0 (d)0
4.6
n%2
4.7
溢出:计算结果超出该数据类型所能表示的范围
2147483647+1
1U-2
...
4.8
比较低。。
4.9
首先判断cp是否为空指针,若非空指针则判断cp指向的是否是空字符串
4.10
int val;
);
4.11
int main()
{
int a,b,c,d;
cin>>a>>b>>c>>d;
if(a>b&&b>c&&c>d)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
;
}
4.12
由于<优先级高于!=,所以先执行j<k返回一个bool类型,可能是0或1,再执行!=运算。最终返回一个bool运算结果,可能是0或1。
4.13
(a)d=3,i=3 因为是从右往左执行的
(b)i=3,d=3.5
4.14
第一种将报错,42是常量,不能被赋值
第二种,该表达式返回42,为真,但是可能并非设计者原意
4.15
指针数据类型与int和double都是不相容的,不能这样赋值。
正确答案:dval=ival=*pi=0;
4.16
(a)将先执行 !=,再执行=。
正解:if((p=getPtr())!=0)
(b)=是赋值,不是判断是否相等
正解:if(i==1024)
4.17
前置运算符,先求值再返回该对象用于左值运算对象
后置运算符,返回该对象的一个副本作为右值运算对象,再求值
4.18
使用前置运算符将不能输出第一个元素,而且会访问越界
另外,经测试,++*it和*++it是不一样的。前置可能导致死循环,因为只是给数值自加了。
4.19
(a)如果ptr不是空指针,那么判断ptr指向的是否是0,再将ptr指向下一个位置
(b)先判断ival是为是0,再将ival自加1,再判断ival是否为0。
(c)等价于vec[ival]<=vec[ival+1],++ival;
4.20
(a)合法。等价于*iter,iter++;
(b)非法。string类型不支持++运算。
(c)非法。先执行成员访问运算符,而iter没有empty这个成员,所以将报错。
(d)正确。等价于(*iter).empty()
(e)正确。等价于++(*iter)
(f)正确。等价于iter->empty(),iter++;
4.21
int main()
{
vector<int> vec;
int val;
while(cin>>val)
vec.push_back(val);
for(auto &i:vec)
)
i=i*;
for(auto i:vec)
cout<<i<<endl;
;
}
4.22
int main()
{
int val;
while(cin>>val)
{
)?<=val&&val<=)?)?"fail":"pass";
cout<<grade<<endl;
}
;
}
明显if语句更好懂
int main()
{
int val;
while(cin>>val)
{
) cout<<"high pass"<<endl;
) cout<<"fail"<<endl;
else
{
<=val&&val<=) cout<<"low pass"<<endl;
else cout<<"pass"<<endl;
}
}
;
}
4.23
由于加法运算优先级高于条件运算符,因此会先执行加法,得到一个string类型,而string与字符比较,会报错。
正解: string p=s+(s[s.size()-1]=='s'?"":"s");
4.24?
不是很懂结合律这块。留着以后研究。
4.25
不懂Latin-1字符集是什么。。
该表达式,第一步取反得到10001110
第二步左移6位得到10000000
4.26
unsigned int在不同机器上位数不同,不能确保一定可以表示30个学生
4.27
ul1=011
ul2=111
(a)011=3
(b)111=7
(c)1
(d)1
4.28
cout<<"short:"<<sizeof(short)<<endl;
cout<<"int:"<<sizeof(int)<<endl;
cout<<"long:"<<sizeof(long)<<endl;
cout<<"long long:"<<sizeof(long long)<<endl;
cout<<"float:"<<sizeof(float)<<endl;
cout<<"double:"<<sizeof(double)<<endl;
cout<<"char:"<<sizeof(char)<<endl;
这是在我的机器上的输出:
4.29
int main()
{
];
int *p=x;
cout<<sizeof(x)<<" "<<sizeof(*x)<<" "<<sizeof(x)/sizeof(*x)<<endl;
cout<<sizeof(p)<<" "<<sizeof(*p)<<" "<<sizeof(p)/sizeof(*p)<<endl;
;
}
sizeof(x)是一个大小为10的int数组的空间
sizeof(*x)是一个指向int的指针的空间
sizeof(p)是一个指向int的指针的空间
sizeof(*p)是一个int元素的空间
以上是输出
4.30
(a)sizeof (a+b)
(b)sizeof (p->mem[i])
(c)sizeof (a<b) 注意小于优先级比sizeof低
(d)sizeof (f())
4.31
后置会额外返回一个对象的副本,使用前置运算符更符合编程的初衷,效率也更高
4.32
遍历ia数组。
4.33
如果someValue为真,则++x,++y并返回自加以后的y。如果为假,则--x,--y并返回自减以后的y。
注意逗号运算符从左向右依次求值,最终返回右侧表达式的值
4.34
(a)float转为bool
(b)+:int转float,=float转double
(c)*:char转int,+int转double
4.35
(a)char转int,再转char?
(b)*int转double,-unsignedint转double,=double转float
(c)*unsignedint转float,float转double
(d)int转float,float转double,double转char
为避免精度损失,整型与浮点型计算,整型会被转化成浮点型
4.36
i*=(int)d;
4.37
(a)pv=static_cast<void*>(ps);
(b)i=static_cast<int*>(pc);
(c)pv=static_cast<void*>(&d);
(d)pc=static_cast<char*>(pv);
注意强转的数据类型要用<>扩起来,变量要用()括起来。
4.38
把j/i的结果强转成double赋值给slope
int main()
{
,j=;
double slope=static_cast<double>(j/i);
cout<<slope<<endl;
;
}
比如上面的结果,输出1
其他:
sizeof运算符不会对括号内的表达式求值
int main()
{
;
sizeof(++a);
sizeof(a++);
cout<<a<<endl;
;
}
输出0!
《C++primer》v5 第4章 表达式 读书笔记 习题答案的更多相关文章
- 《C++primer》v5 第1章 开始 读书笔记 习题答案
从今天开始在博客里写C++primer的文字.主要以后面的习题作业为主,会有必要的知识点补充. 本人也是菜鸟,可能有不对之处,还望指出. 前期内容可能会比较水. 1.1略 1.2略 1.3 cin和c ...
- 《C++primer》v5 第7章 类 读书笔记 习题答案
7.1.7.2.7.3 #include<iostream> #include<cstdio> #include<vector> #include<strin ...
- 《C++primer》v5 第6章 函数 读书笔记 习题答案
6.1 实参是在函数调用处填写的参数.形参是在函数体使用的参数. 实参是形参的初始值. 具体参见:http://blog.163.com/zhengguo_li/blog/static/7030148 ...
- 《C++primer》v5 第5章 语句 读书笔记 习题答案
5.1 空语句只有一个";".如果什么也不想做可以使用空语句. 5.2 用花括号{}括起来的叫块,也叫复合语句.有多条语句作用在同一个作用域时,需要用花括号括起来. 5.3 降低了 ...
- 《C++primer》v5 第8章 IO库 读书笔记 习题答案
8.1.8.2 这一章不咋会啊.. istream &read(istream &is) { int a; auto old_state=is.rdstate(); is.clear( ...
- 《C++primer》v5 第3章 字符串、向量和数组 读书笔记 习题答案
本章问题 1.char *p="hello world";与char p[]="hello world"的问题. 简单说前者是一个指向字符串常量的指针,后者是一 ...
- 《C++primer》v5 第2章 变量和基本类型 读书笔记 习题答案
2.1 int,long long ,short 可表示范围和占用内存空间不同.具体与计算机有关. 无符号类型只能表示0和正数,带符号类型可以表示负数,0,正数. float是单精度,一般占用4个字节 ...
- C++primer(第五版)读书笔记&习题解答---CHAPTER 3
C++标准库类型包括:string,vector和迭代器,其中string是可变长的字符序列,vector存放的是某种给定类型对象的可变长序列,迭代器是string和vector的配套类型,常被用于访 ...
- C++ Primer(第五版)读书笔记 & 习题解答 --- Chapter 3
Chapter 3.1 1. using声明具有如下的形式: using namespace::name; Chapter 3.2 1. C++标准一方面对库类型所提供的操作做了规定,另一方面也对库的 ...
随机推荐
- hive修改 表/分区语句
参考 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable% ...
- 什么是UART中的FIFO
FIFO是先进先出缓冲区的意思,即串口接收到的数据可以先进入FIFO,不必马上进入中断服务程序接收,这样可以节省CPU时间.对于发送数据也一样可以把要发送的数据一起写入FIFO,串口控制器按照写入的顺 ...
- 【转】 如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测
系统编程中一个重要的方面就是有效地处理与内存相关的问题.你的工作越接近系统,你就需要面对越多的内存问题.有时这些问题非常琐碎,而更多时候它会演变成一个调试内存问题的恶梦.所以,在实践中会用到很多工具来 ...
- 利用反射调用方法时,处理ref,out参数需要注意的问题(转)
转自:http://www.68idc.cn/help/buildlang/ask/20150318283817.html 项目中如下的泛型方法,因为要在运行时,动态指定类型参数,所以要利用反射来实现 ...
- Python’s SQLAlchemy vs Other ORMs[转发 4]peewee
peewee peewee is a small, expressive ORM. Compared to other ORMs, peewee focuses on the principal of ...
- Sql Server 删除所有表(转)
http://www.cnblogs.com/jys509/p/3589468.html 首先必须要清空所有表的外键 DECLARE c1 cursor for select 'alter tabl ...
- 前端常用的几个js判断(二)
10.鼠标悬停(hover)切换 class 属性假如当用户鼠标悬停在一个可点击的元素上时,你希望改变其效果,下面这段代码可以在其悬停在元素上时添加 class 属性,当用户鼠标离开时,则自动取消该 ...
- ACCESS导入CSV文件出现乱码解决办法
在ACCESS或Excel中导入CSV文件时常常出现乱码,这是因为简体中文版的windows操作系统及其应用软件默认都是ANSI/GBK编码,而导入的文件使用的编码与操作系统默认的编码不相符.出现这种 ...
- 安装LoadRunner提示缺少vc2005_sp1_with_atl..
装自动化负载测试工具LoadRunner前,需要预先安装其运行的基础环境.如:安装LoadRunner 11时就需要先安装Micrsoft Visual C++ 2005 SP1.C++ 2008运行 ...
- Dynamo分布式系统——「RWN」协议解决多备份数据如何读写来保证数据一致性,而「向量时钟」来保证当读取到多个备份数据的时候,如何判断哪些数据是最新的这种情况
转自:http://blog.jqian.net/post/dynamo.html Dynamo是Amazon开发的一款高可用的分布式KV系统,已经在Amazon商店的后端存储有很成熟的应用.它的特点 ...