栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ primer 练习题记录

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ primer 练习题记录

继续记录我的C++ 学习之路,本文是第四章的练习题,第三章的链接在这里:

https://mp.csdn.net/mp_blog/creation/editor/124473013https://mp.csdn.net/mp_blog/creation/editor/124473013 4.1.2节练习

练习4.1

105

练习4.2

(a) *(vec.begin())

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

4.1.3节练习

练习4.3

可以接受,允许编译器采用任何求值顺序,使编译器在优化中可以根据需要调整实现表达式求值的指令序列,以得到效率更高的代码。

4.2节练习

练习4.4

91

练习4.5

(a)  -86

(b)  -18

(c)  0

(d)  -2

练习4.6

int main()
{
	int i = 4;
	i % 2 == 0 ? cout << "even": cout << "odd";

}

练习4.7

溢出 :当计算的结果超出该类型所能表示的范围时就会产生

int main()
{
	short i = 32767;
	short j = i + 1;
	short a = i + 2;
	short b = i * 2;

}

4.3节练习

练习4.8

相等性运算符 > 逻辑与 > 逻辑或

练习4.9

cp为一个地址,不为0,所以继续执行逻辑与右侧部分,*cp为一个字符串,不为0,返回值为true。

练习4.10

int main()
{
	int a = 0;
	while(cin >> a && a != 42)
	{ }

}

练习4.11

int main()
{
	int a = 4, b = 2, c = 2, d = 1;
	a > b && b > c && c > d ? cout << "true" : cout << "false";

}

练习4.12

执行顺序为: i != (j < k) ; 先比较 j 和 k 的大小关系,j < k则为真,将结果转化为 1 ,然后判断 i 是否不等于 1.

4.4节练习

练习4.13

(a)  d  = 3 ; i = 3

(b)  d = 3.5 ; i = 3

练习4.14

if (42 = i)// 报错,表达式必须是可修改的左值

if (i = 42)// 42不为零,条件为真,执行 if 语句

练习4.15

不能将指针的值赋给int

dval = ival = *pi = 0;

练习4.16

(a)赋值运算符优先级较低,应该给需要赋值部分加上括号使其符合我们的原意。

(b)条件判断永远为真,若是想判断 i 和1024是否相等,应该用 “==”。

4.5节练习

练习4.17

前置递增/递减运算符首先将运算对象 ±1 ,然后将改变后的对象作为求值结果;后置版本也会将运算对象 ±1 ,但是求值结果是运算对象改变之前那个值的副本。

前置版本只储存改变后的值,后置版本既保存改变后的值也保存改变前的值。

练习4.18

无法输出第一个元素,而且若序列中没有负值,程序将可能试图引用一个根本不存在的元素。

练习4.19

(a)*ptr != 0 && *ptr++  // *ptr指向的指针不为0;

(b)判断 ival 和 ival + 1 的值是否都为零;

(c)该赋值语句是未定义的;vec[ival] <= vec[ival+1]

 4.6节练习

(a)合法,首先对iter加1,再输出iter指向的值;

(b)不合法,iter指向的是字符串,字符串没有加法运算;

(c)不合法,iter是一个指针,它没有名为empty的成员;

(d)合法,检查iter指向的对象是否为空;

(e)不合法,*iter得到iter指向的字符串,字符串没有加法运算;

(f)合法,检查iter指向的对象是否为空,然后iter加1。

4.7节练习

练习4.21

int main()
{
	vector vec{1,2,3,4,5,6,7,8,9};
	for (auto& a : vec)
	{
		a % 2 == 1 ? a *= 2 : a = a;
		cout << a << endl;
	}

}

练习4.22

纯条件运算符

int main()
{
	int grade;
	cin >> grade;
	(grade > 90) ? cout << "high pass" : (grade > 60 && grade < 75) ? cout << "low pass" : (grade < 60) ? cout << "fail" : cout << "pass";

}

+ if

int main()
{
	int grade;
	cin >> grade;
	if (grade > 60)
	{
		grade > 90 ? cout << "high pass" : grade < 75 ? cout << "low pass" : cout << "pass";
	}
	else
		cout << "fail";

}

练习4.23

?: 条件运算符优先级过低,导致该表达式的运算顺序为 字符串 s,加上s[3] 后的字符串与字符类型的 's' 进行比较,导致出错。改为:

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

练习4.24

加入条件运算符满足的是左结合律,则表达式可写为:
finalgrade = ((grade > 90) ? "high pass" : (grade < 60))?"fail":"pass";

首先判断grade的值是否大于90,成立则为 high pass ,不然表达式为 grade < 60,编译无法通过,即使通过,也无法得到high pass、pass 和 fail 三种情况。
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/892939.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号