C++ Primer第5版 第四章课后练习答案

摘要:
练习4.412/3*4+5*15+24%4/2/*结果是91*/12/3*(4+5)*15+24%4/2/*成绩是540*/12/3*(4+5)*%4/2/**结果是0*/练习4.5-86-3780-2练习4.6inti;cin˃˃i;如果(i&1){cout˂˂“奇数”;}否则{cout˂˃i&&i!“lowpass”:“fail”;cout˂˂finalgrade˂˂endl;}while{stringfinalgrad;iffinalgrade=“highpass”;elseiffinalgrade=“pass”练习4.23条件运算符stringp1=s+s[size()-1]=='s'的低优先级?“”:“s”);练习4.24条件运算符条件?

练习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*/
12
/ 3 * (4 + 5) * 15 + 24 % 4 / 2;/*结果是540*/
12 / 3 * (4 + 5) * (15 + 24) % 4 / 2;/*结果是0*/

练习4.5

(a) -86

(b) -378

(c) 0

(d) -2

练习4.6

    int i ;
    cin >> i;
    if (i & 1) {
        cout << "奇数";
    }
    else {
        cout << "偶数";
    }

练习4.7

int i = INT_MAX + 1;
int j = INT_MIN - 1;
unsigned k = -1;

练习4.8

逻辑与运算符:左侧运算对象为真时才对右侧运算对象求值

逻辑或运算符:左侧运算对象为假时才对右侧运算对象求值

相等性运算符:从左到右

练习4.9

cp为指向字符串的字符指针,*cp为cp所指向字符串的值,若两者都不为空则正确

练习4.10

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

练习4.11

int a = 10, b = 9, c = 8, d = 7;
if (a > b && b > c && c > d);

练习4.12

i!=j<k 等价于i!=(j<k),先比较j是否小于k,然后再比较i是否不等于j<k小于运算符返回的布尔值

练习4.13

d=i=3.5 I=3 d=3.0

i=d=3.5 i=3 d=3.5

练习4.14

错误,字面值是右值

正确,if语句的条件部分把42赋给i,然后检查赋值的结果是否为真

练习4.15

不能把指针的值赋给int,而且局部变量pi如果未初始化也无法赋值

练习4.16

判断getPtr函数返回值与0,然后把计算出的布尔值返回给p,应改为if((p=getPtr()!=0)

if语句的条件部分把1024赋给i,然后检查赋值的结果是否为真

练习4.17

前置递增运算符把值加一后直接返回改变了的运算对象

后置递增运算符则需要将原始版本存储起来以便返回这个未修改的内容

练习4.18

将无法输出v.begin()的值,而且会输出尾后指针的内容

练习4.19

(a)判断ptr指针地址是否为null_ptr,若是则指针向前移动一个元素

(b)判断ival的值加1后返回的值和初始值是否都为真

(c)判断vector对应ival下标的元素是否小于等于对应ival+1下标的元素·

练习4.20

(a)合法,iter指向下一个元素,解引用iter的结果

(b)不合法,iter所指元素的值加1,但iter所指元素类型是string,无法执行递增

(c)不合法,iter是一个指针,没有empty成员

(d)合法,判断iter所指元素是否为空

(e)不合法,字符串无法自增

(f)合法,将iter指向下一个元素,并判断iter的初始值所指元素是否为空

练习4.21

for (auto iter = v.begin(); iter != v.end(); ++iter) {
    if ((*iter) & 1)*iter *= 2;
}

练习4.22

int main()
{
    int grade;
    while ((cin >> grade) && grade <= 100 && grade >= 0) {
        string finalgrade = (grade > 90) ? "high pass" : (grade > 75) ? "pass" : (grade >= 60) ? "low pass" : "fail";
        cout << finalgrade << endl;
    }
    while ((cin >> grade) && grade <= 100 && grade >= 0) {
        string finalgrade;
        if (grade > 90)finalgrade = "high pass";
        else if (grade > 75)finalgrade = "pass";
        else if (grade >= 60)finalgrade = "low pass";
        else finalgrade = "fail";
        cout << finalgrade << endl;
    }
}

练习4.23

条件运算符优先度低

string p1 = s + s[s.size() - 1] == 's' ? "" : "s"; 等比为    string p1 = (s + s[s.size() - 1] == 's') ? "" : "s";

应该改成string p1 = s + ((s[s.size() - 1] == 's') ? "" : "s");

练习4.24

条件运算符 条件 ? 表达式1 : 表达式2 ,先对条件判断,为真,对表达式1进行计算,为假,对表达式2进行计算,又有赋值运算符("=")是右结合的,所以如果条件运算符满足的是左结合则会有问题

练习4.25

Latin-1字符集是单字节8位,因此'q'<<6就等于01000000,查表可知为'@'

练习4.26

由于int只能保证最少有16位,因此在有的电脑上无法满足30个学生的要求

练习4.27

(a)3

(b)7

(c)true

(d)true

练习4.28

cout << "sizeof(char) = " << sizeof(char) << endl;
cout << "sizeof(wchar_t) = " << sizeof(wchar_t) << endl;
cout << "sizeof(char16_t) = " << sizeof(char16_t) << endl;
cout << "sizeof(char32_t) = " << sizeof(char32_t) << endl;
cout << "sizeof(short) = " << sizeof(short) << endl;
cout << "sizeof(int) = " << sizeof(int) << endl;
cout << "sizeof(long) = " << sizeof(long) << endl;
cout << "sizeof(long long) = " << sizeof(long long) << endl;
cout << "sizeof(float) = " << sizeof(float) << endl;
cout << "sizeof(double) = " << sizeof(double) << endl;
cout << "sizeof(long double) = " << sizeof(long double) << endl;
cout << "sizeof(bool) = " << sizeof(bool) << endl;
cout << "sizeof(string) = " << sizeof(string) << endl;

sizeof(char) = 1
sizeof(wchar_t) = 2
sizeof(char16_t) = 2
sizeof(char32_t) = 4
sizeof(short) = 2
sizeof(int) = 4
sizeof(long) = 4
sizeof(long long) = 8
sizeof(float) = 4
sizeof(double) = 8
sizeof(long double) = 8
sizeof(bool) = 1
sizeof(string) = 28

练习4.29

10 返回数组x的元素个数

32位环境为1,64位环境为2,因为指针长度在不同环境不同,64位环境为8字节,32位环境为4字节

练习4.30

(a)sizeof(x)+y

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

(c)sizeof(a)<b

(d)sizeof(f())

练习4.31

前置递增运算符把值加一后直接返回改变了的运算对象

后置递增运算符则需要将原始版本存储起来以便返回这个未修改的内容

    for (vector<int>::size_type ix = 0, cnt = ivec.size(); ix != ivec.size();)
    {
        ivec[ix++] = cnt--;
    }

练习4.32

ptr移动了ix(0到size-1)个位置

练习4.33

someValue是否为真,若为真x和y分别加一,若不为真,x和y分别减一

练习4.34

(a)float转化为bool

(b)ival转换成float,将fval+ival的结果转化为double

(c)cval转化为int,将ival*cval的结果转化为double

练习4.35

(a)cval = 'a' + 3; //'a'提升为int,然后'a'+3的结果给cval赋值的时候转化为char

(b)fval = ui - ival * 1.0; // ival转换为double, ui也转换为double。然后将double转换为float

(c)dval = ui * fval; // ui提升为float,然后这个float转换为double。

(d)cval = ival + fval + dval; // ival转换为float,得到ival和fval的和,然后ival和fval的和转换为double
// 最后,double被强制类型转换成char

练习4.36

i *= static_cast<int>(d);

练习4.37

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

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

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

(d)pc=reinterpret_cast<char*>(pv)

练习4.38

j/i的int型的值被强制转化为double,并赋给了slope

免责声明:文章转载自《C++ Primer第5版 第四章课后练习答案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇利用Layer组件弹出多个对话框(非嵌套)与关闭及刷新原装js轮播图,鼠标移入停止轮播,移出继续轮播下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

20、Windows内核函数(1)Windows驱动开发详解笔记,字符串

1、字符串 1)两种字符串,一种是char型,记录ansi字符集。每个字符一个字节。以0标志结束。在KdPrint中用%s输出。 宽字符型,wchar_t,描述unicode字符集的字符串,每个字符两个字节,以0标志结束。通过L来体现。在KdPrint中用%S输出。 如CHAR *string = "Hello"; WCHAR *string2 = L"...

如何使用jQuery向asp.net Mvc传递复杂json数据

前言 jQuery提供的ajax方法能很方便的实现客户端与服务器的异步交互,在asp.net mvc 框架使用jQuery能很方便地异步获取提交数据,给用户提供更好的体验!调用jQuery的ajax方法时,jQuery会根据post或者get协议对参数data进行序列化; 如果提交的数据使用复杂的json数据,例如: {userId:32323,userN...

Pike学习笔记

  Pike的安装(Ubuntu环境)    pike的语法非常像C++,但是它也是脚本语言,所以具有一般脚本语言的特性。一个简单的pike程序,hello world: 1 int main() 2 { 3 write("Hello world! "); 4 return 0; 5 }    string的用法,及命令行参数的例子: #!...

Jackson 通过自定义注解来控制json key的格式

Jackson 通过自定义注解来控制json key的格式 最近我这边有一个需求就是需要把Bean中的某一些特殊字段的值进行替换。而这个替换过程是需要依赖一个第三方的dubbo服务的。为了使得这个转换功能更加的通用,我们采用了下面的方式: client端使用自定义的注解(假设为@Dimension)标记Bean中所有的「特殊字段」 client端把bea...

GeeTest 极验验证

 前台Html页面 <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> <script src="http://static.geetest.com/static/tools/gt.js"></script>...

【Rdeis 30】Redis常见面试题

介绍:Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库。 传统数据库遵循 ACID 规则。而 Nosql(Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称) 一般为分布式而分布式一般遵循...