• 《C++Primer》第五版习题解答--第四章【学习笔记】


    【C++Primer】第五版习题解答--第四章【学习笔记】

    ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考。
    作者:cosefy
    Date: 2020/1/11

    第四章:表达式

    练习4.6:

    判断奇数:if num%2!=0

    练习4.9:

    const char* cp = "hello world";
    if (cp && *cp)
    

    if语句判断cp表示的字符串以及* cp指向的第一个字符是否都为空。

    练习4。10:
    实现:为while循环写一个条件,使其从标准输入中读取整数,遇到42时停止。

    #include<iostream>
    using namespace std;
    int main() 
    {
    	int i;
    	while (cin >> i&&i!=42)	;
    	return 0;
    }
    

    练习4.11:

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

    练习4.12:
    先判断i<k,返回bool类型,然后判断i是否不等于返回的布尔类型,由于i是整数,故在返回布尔类型和i的比较中,布尔类型会转换为0或1,进行判断,最终返回bool类型的结果。

    练习4.13:

    赋值运算符运算顺序是从右向左。
    (a):值3.5先赋值给int型的i,则i=3,再把i的值赋值给double型d,d=3.0.
    (b):值3.5先赋值给double型d,d=3.5,再把d的值赋值给int型i,i=3。

    练习4.14:

    if(42=i) //字面值不能作为左值,程序将会出错
    if(i=42) //i被赋值42,由于i不等于0,故将会执行if块内的程序

    练习4.15:
    不可以将指针值赋值给int和double型数据。

    dval=ival=(* pi)=0;
    

    练习4.16:
    (a):赋值运算符的优先级低于关系运算符的优先级。可以给赋值部分语句加上括号。
    (b):==写成了=。

    练习4.19:
    a: 指针ptr不为空,并且ptr指向的值也不为0。
    b: ival的值是否为0,同时ival加一后是否为0。
    c: 此处求值的顺序是任意的,可能先访问vec[ival],也有可能先进行vec[ival++],得到的判定形式不同。

    练习4.20:
    a: 合法,先解引用,后自增地址。
    b: 不合法,字符串类型无法自增
    c: 不合法,iter无法调用empty()
    d: 合法,判断iter指向的对象是否为空
    e: 不合法,字符串无法自增
    f: 合法,先判断所指对象是否为空,再自增地址。

    练习4.21:
    实现:使用条件运算符从vector中找出奇数并翻倍。

    #include<iostream>
    #include<vector>
    using namespace std;
    
    int main() 
    {
    	vector<int>v1{ 1,2,3,4,5,6,7,8,9 };
    	for (auto& i : v1)
    	{
    		i = i % 2 ? i * i : i;
    		cout << i << endl;
    	}
    	return 0;
    }
    

    练习4.22:

    实现:输入一个分数,用条件运算符判断分数属于哪个层级。

    #include<iostream>
    #include<vector>
    using namespace std;
    
    int main() 
    {
    	unsigned grade;
    	cin >> grade;
    	cout << ((grade > 90) ? "high pass" : (grade > 75) ? "pass" : (grade > 60) ? "low pass" : "failed");
    	return 0;
    }
    

    实现:输入一个分数,用一个或多个if语句判断分数属于哪个层级。

    #include<iostream>
    #include<vector>
    using namespace std;
    
    int main() 
    {
    	unsigned grade;
    	cin >> grade;
    	if (grade > 90)
    		cout << "high pass";
    	else if (grade > 75)
    		cout << "pass";
    	else if (grade > 60)
    		cout << "low pass";
    	else
    		cout << "failed";
    	return 0;
    }
    

    练习2.23:
    因为条件运算符的优先级很低,所以需要给条件运算符的表达式加上括号。

    练习4.26:
    由于int型在不同机器上位数不同,所以在这个例子中,可能会出现数据溢出的问题。

    练习4.27:

    a: 3
    b: 7
    c: 1
    d: 1

    练习4.29:

    #include<iostream>
    using namespace std;
    int main() 
    {
    	int x[10];
    	int* p = x;
    	cout << sizeof(x) / sizeof(*x) << endl;
    	cout << sizeof(p) / sizeof(*p) << endl;
    	return 0;
    }
    

    运行结果:

    原因:数组占据空间大小除以每个元素空间大小(40/4=10);指针所占空间大小除以指向元素所占空间大小(4/4=1)。

    练习4.33:
    someValue为真时,执行

    ++x,++y;
    

    someValue为假时,执行

    --x,--y;
    

    练习4.34:

    a: fval转换为bool类型。
    b: fval和ival都转化double类型。
    c: cval先转化为int型,得到的乘积再转化为double型。

  • 相关阅读:
    Frameset 框架
    FHS 文件层次标准
    history 命令
    QT基础走起
    Android中导入jar包v4的错误
    Android工具Eclipse点击卡死或者无响应情况
    让程序飞起来
    Android中报错
    【2019.9.23】NOIP2017 practice exam
    【技巧】时间复杂度
  • 原文地址:https://www.cnblogs.com/cosefy/p/12180515.html
Copyright © 2020-2023  润新知