C++ Primer(第五版) 4.5--4.8节练习

本文详细解答了C++ Primer第五版的4.17至4.27节的练习题,涵盖了前置与后置递增运算符的使用、指针与迭代器的操作、条件运算符的理解、字符串处理和位操作等多个知识点,旨在帮助读者深入理解C++中的这些核心概念。

4.17    前置版本:先将运算对象加1,将改变后的对象作为求值结果;后置版本:将运算对象加1,但求值结果是运算对象改变之前的那个值的副本。

4.18    使用前置,pbeg先加1,再解引用,无法输出第一个元素,而且最后会越界。

4.19    (a)先判定ptr是否有效,有效则判定ptr指向的值是否为0,并递增ptr;
           (b)先判定ival是否为0,非0则继续检查(ival + 1)的值是否为0;如果改变了某个运算对象的值,再表达式其他地方不要再使用这个运算对象;
           (c)比较vec[ival]和vec[ival+1]的大小,是不好的写法,原因同(b)。

4.20    (a)合法,先解引用iter,再自增iter;
           (b)非法,(*iter)得到一个string,string没有后置递增操作;
           (c)非法,应该为iter->empty()或(*iter).empty();
           (d)合法;
           (e)非法,解引用iter得到string,string没有前置递增操作;
           (f)合法,先判定当前字符串是否为空,再自增iter。

4.21    

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	vector<int> ivec = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
	for (auto &i : ivec)
		i = (i % 2)? i*2 : i;
	for (auto i : ivec)
		cout << i << " ";
	cout << endl;
	
	return 0;
}

4.22    条件运算符版本:

#include <iostream>

using namespace std;

int main()
{
	unsigned grade;
	string finalgrade;

	while (cin >> grade) {
		finalgrade = (grade > 90)? "high pass" 
			     : (grade < 60)? "fail"
			     : (grade < 75)? "low pass": "pass";
		cout << finalgrade << endl;				
	}

	return 0;
}

              if语句版本:

#include <iostream>

using namespace std;

int main()
{
	unsigned grade;
	string finalgrade;

	while (cin >> grade) {
		if (grade > 90) {
			finalgrade = "high pass";
		} else if (grade > 75) {
			finalgrade = "pass";
		} else if (grade < 60) {
			finalgrade = "fail";
		} else {
			finalgrade = "low pass";
		}
		
		cout << finalgrade << endl;				
	}

	return 0;
}

4.23    题目意图是判断字符串是否以's'结尾,如果是,不做处理,如果不是则添加s。题目中运算优先级次序:加法,相等,条件,赋值,改写法将s加上s[s.size() - 1],得到一个新字符串,再与字符's'比较是否相等,类型不匹配,导致无法通过编译。修改为:
         string p1 = s + (s[s.size() - 1] == 's'? "" : "s");

4.24    如果为左结合,表达式 等价于:finalgrade = ((grade > 90)? "high grade" : (grade < 60)) ? "fail" : "pass"; 如果 grade > 90不成立,表达式值就成为grade < 60,无法通过编译。

4.25    ~‘q’: 11111111 11111111 11111111 10001110;
           ~'q' << 6: 11111111 11111111 11100011 10000000
4.26    unsigned int所占空间最少为16,在某些环境中无法存放全部信息。

4.27    (a) 3; (b) 7; (c)true; (d)true

第一章 快速入门 ..................................................................................................................................................... 2 第二章 变量和基本类型 ........................................................................................................................................... 7 第三章 标准库类型 ............................................................................................................................................... 13 第四章 数组和指针 ............................................................................................................................................... 21 第五章 表达式 ......................................................................................................................................................... 31 第六章 语句 ............................................................................................................................................................. 37 第七章 函数 ............................................................................................................................................................. 37 第八章 标准IO库 ................................................................................................................................................. 37 第九章 顺序容器 ..................................................................................................................................................... 43 第十章 关联容器 ..................................................................................................................................................... 60 第十一章 泛型算法 ............................................................................................................................................... 75 第十二章 类和数据抽象 ......................................................................................................................................... 86 第十三章 复制控制 ............................................................................................................................................... 94 第十四章 重载操作符与转换 ............................................................................................................................... 102 第十五章 面向对象编程 ........................................................................................................................................ 116 第十六章 部分选做习题 ....................................................................................................................................... 133 第十七章 用于大型程序的工具 ......................................................................................................................... 138 第十八章 特殊工具与技术 ................................................................................................................................. 138
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值