C++Primer第五版 第四章习题答案(21~30)

1:关于条件运算符最主要的两点:cond ? exp1 : exp2

条件运算符的优先级很低,嵌套使用时最好加上括号

两个表达式的类型需要相同

#include 
#include 
#include 
using namespace std;
void main()
{	
	int a[10] = {0,1,2,3,6,5,4,7,8,9};
	vector v1(a,a+10);
	cout<<"Original vector"<<"\t";
	for (int i=0;i<10;i++)
	{
		cout<


2:简单的嵌套使用

#include 
#include 
#include 
using namespace std;
void main()
{	
	int grade;
	cout << "Please Input the grade :";
	cin >> grade;
	string finalgrade;
	finalgrade = (grade > 90) ? "high" : (grade > 70) ? "pass" : (grade > 60) ? "Low pass" : "fail";//条件运算符的嵌套
	cout << finalgrade;
}

if版本

#include 
#include 
#include 
using namespace std;
void main()
{	
	int grade;
	cout << "Please Input the grade :";
	cin >> grade;
	if (grade <= 90)
	{
		if (grade <= 75)
		{
			if (grade > 60)
			{
				cout<<"low pass"<

if语句虽然较为直观,但是不够简洁,而条件运算符的嵌套次数如果过多,则会影响到代码的可读性


3:此处即为条件运算符的优先级过低引起的问题

改为

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


4:自己代如一个数验证一下就会发现,如果是左结合律会引起矛盾。


5:位运算符还是要搞清楚

>> 右移   ——对象是无符号数,左侧插入值为0的二进制位 ; 对象是有符号数,左侧插入符号位的副本或0,视情况而定。

<< 左移   —— 右侧插入值为0的二进制位

(箭头指向那边,就往哪运动)

~ 位求反


注意题目要求,最后问的是“值”而不是字符了。所以应该由8位转向32位

最后的结果为:1111 1111 1111 1111 1110 0011 1000 0000   值为:-7296


6:因为老师学生有31个,所使用的类型最少需要有32位吧,但是在某些机器上,unsigned int 可能就不是32位了


7:注意一个和两个符号的区别,单符号&、 | 指的是位运算与、或 。

(a) 3

(b) 7

(c)  (d)  true


8:

#include 
#include 
#include 
using namespace std;
void main()
{	
	cout<

9:这里主要考察sizeof函数的使用辨析

在对数组使用时,返回的是数组的大小;

在对指针使用是,返回的是指针本身的大小,32位机器的话就是1;

所以输出结果为10 ; 1


10:主要就是使用运算符优先级的知识点

(a)  (sizeof x) +y

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

(c)  (sizeof a) < b

(d)  无需改变。


也没有必要背下整个优先级表,暂时记住一些常用的就够用了

你可能感兴趣的:(【C++Primer习题】,C++Primer,第五版习题答案详解)