C++PRIMER第四章练习

来源:互联网 发布:四轴飞行器控制算法 编辑:程序博客网 时间:2024/05/19 19:33

4.1 先乘除后加减,105

4.2

a)*(vec.begin())

b)(*(vec.begin()))+1

4.3

可以接受,可以提高编译器效率,潜在缺陷只要注意不让表达式指向并修改同一对象就可以忽略

4.4

((12/3)*4)+(5*15)+((24%4)/2)=91

4.5

a)-86

b)-18

c)0

d)-2


4.6

if(ival%2)为真时奇数,为假时偶数

4.7

当计算的结果超出该类型的范围就会溢出;

4.8

逻辑与,仅当左侧为真时计算右侧;

逻辑或,仅当左侧为假时计算右侧;

相等性,按照提升转化

4.9

先判断cp是否是个空指针,再判断cp指向的字符是否为空,如果都不是则条件为真

4.10

while(cin>>i&&i!=42)

4.11

a>b&&b>c&&c>d

4.12

先判断表达式i!=j的值,如果为真,则转化为1与k比较,否则转化为0与k比较

4.13

a)d=3,i=3;

b)d=3.5,i=3;

4.14

第一个非法,试图给数值常量赋值,第二个条件恒为真

4.15

连续赋值满足右结合律,最右边的pi=0,此时代表的是一个指针,然后试图给整型常量ival赋一个指针的值,

dval=ival=0;pi=nullptr;

4.16

a)!=优先级优于=,改为if((p=getPtr())!=0)

b)条件恒为真,明显与预期不符,改为if(1024==i)

4.17

前置版本返回原对象引用,后置版本返回原对象副本

4.18

先将pbeg+1,然后对pbeg+1解引用,这样会导致不输出第一个数,而试图对超尾地址解引用,导致非法

4.19

a)ptr非空指针,且指向的值不为0,然后将ptr指针向前移动一个位置

b)左边表达式改变ival的值,而右边表达式又要使用ival,这将引发错误或产生未定义的行为~~改为ival++即可

c)如果ival下标合法,该表达式恒为真,然后将ival加1

4.20

a)合法,对iter解引用,然后将iter+1

b)合法,对iter解引用,然后将解引用后的数据+1

c)非法,iter 是一个迭代器,它没有名为empty的成员

d)合法,iter指向的字符串是否为空

e)合法,先对iter解引用,然后将解引用后的数据+1

f)合法,先看iter是否指向空串,然后再将iter+1

4.21

for(auto& val:vec)

val=val%2?val*2:val;

4.22

finalgrade=grade>90?"high pass"

:grade>75?"pass"

:grade>60?"low pass":"fail";

if语句更容易理解

4.23

无法将string与bool值相加;

string pl=s+(s[s.size()-1]=='s'?"":"s");

4.24

(grade<60)?”fail”:(grade>90)?”high pass”:”pass”;

4.25

先提升为int  0x00000071

然后求反为0xffffff8d,往左移6位后11 11111111 11111111 10001110 000000

4.26

int在有些机器上是16位的,而 quizl要至少27位

4.27

a)011&111=011,为3

b)011|111=111,为7

c)3&&7为bool值,true

d)3||7为bool值,true

4.28

cout<<sizeof(int)...

4.29

10

1

4.30

a) sizeof(x)+y

b)sizeof(p->mem[i])

c)sizeof(a)<b

d)sizeof(f())

 4.31

效率问题,一个返回左值,一个返回副本

4.32

遍历数组同时指针ptr移到超尾位置

4.33

条件运算优先级比逗号高

(someValue?++x,++y:--x),--y

4.34

a)fval转化为bool

b)ival转化为float,然后相加的值转化为 double

c)cval转化为int,然后相乘的值转化为double

4.35

a)有,'a'转化为int,然后值转为char

b)有,ui转为double然后转到float

c)有,float转为double

d)有,ival先转为float,然后跟fval相加后转为double,最后值再转回char

4.36

 i*=static_cast<int>(d)

4.37

a)pv=const_cast<void *>(ps)

b)i=static_cast<int>(*pc)

c)pv=static_cast<void*>(&d)

d)pc=reinterpret_cast(char*)pv

4.38

将j/i的值强制转化为double型赋给slope

原创粉丝点击