第二章 变量和基本类型

2.1

它们占据的最小比特数(最小存储空间)不同,分别为16位、 32位、64位和16位。一般而言,short 类型为半个机器字(word)长,int 类型为一个机器字长(一般编译器会将 int 的位数设置为32位) long 类型为一个或两个机器字长(在32 位机器中,int 类型和 long 类型的字长通常是相同的),而 long long 类型为两个机器字长。因此,它们的表示范围不同(分别用于表示不同尺寸的整数)。

无符号类型只能表示大于或等于 0 的数;带符号类型则可以表示正数、负数和 0。

二者的存储位数不同(一般而言,float 类型为 32 个二进制位,double 类型为 64 个二进制位),因而取值范围不同;此外两者的精度也不同(float 类型只能保证 6 位有效数字,而 double类型至少能保证 10 位有效数字),然而大多数编译器都实现了更高的精度(一般来说,类型 float 和 double 分别有7和16个有效位)。 

2.8

1 #include <iostream>
2 
3 int main() 
4 {
5     //2的ASCII码为50,转换为八进制就为062,M的ASCII码为77,转换为十六进制就为0x4d 
6     std::cout << "62x4d
";
7     std::cout << "62	x4d
";
8     return 0;
9 }
2.8 

2.9

(a)(c)非法,其中(c)的报错信息为“wage未定义”!

(b)(d)谈不上非法(因为编译器没报错),只是i的值都被强制类型转换为3了。

补充:一般列表初始化都不可以涉及强制类型转换!!

2.30

顶层const:v2、p3

底层const:p2、p3、r2

2.31

r1 = v2:合法,因为v2是顶层const,所以执行对象的拷贝时不受影响

p1 = p2:非法,p2是底层const,而p1不是;又因为p2是常量,所以不满足“非常量可以转换成常量”,故非法

p2 = p1:合法,尽管p1和p2不同时具备底层const,但是,非常量可以转换成常量(即int *可以转换成const int*)

p1 = p3:非法,尽管p3既是顶层const也是底层const,但拷贝时我们更在乎它是一个底层const,所以原因和第二题一样

p2 = p3:合法,p2是底层const,而p3包含底层const的定义,即p2和p3同时具备底层const

2.32

非法,不能将变量赋给指针(变量)。

改正:constexpr int null = 0;  int *p = null;

2.33

a = 42;  因为a是一个int 型变量,所以a的值变为42

b = 42;  同a

c = 42;  同a

d = 42;  因为d是一个指向int型的指针,故不可赋值为一个整型数

e = 42;  e是一个指向整数常量的指针,同d

g = 42;  不可行,因为g绑定了一个整型常量,不可以修改g的值

2.35

i是int型常量,j是int型变量,k是const int &(绑定到一个int型变量),p是指向int型常量的指针(const int *),j2是int型常量(const int),k2是整型常量引用(const int &,不可以通过k2修改变量的值)。

2.36

变量名 变量类型 最终值
a int 4
b int 4
c int 4
d int & 4

2.37

变量名 变量类型 最终值
a int 3
b int 4
c int 3
d int & 3

2.38

auto:依据初始值来推算变量的类型,即必须初始化;还有使用引用对象的类型以及忽略顶层const

decltype:依据表达式的类型推算变量的类型,可不初始化(引用除外);还有使用引用类型以及保留顶层const;再者就是表达式可产生引用的两种情形(解引用和括号())

2.40

struct Sales_data {
	string isbn;				//书的ISBN 
	unsigned num = 0;	//售出的本数 
	double earn = 0.0;		//销售收入 
};

 

2.41

(1.20)

 1 #include <iostream>
 2 #include <string>
 3  
 4 using namespace std;
 5 
 6 struct Sales_data {
 7     string bookNo;                //书的ISBN 
 8     unsigned units_sold = 0;    //售出的本数 
 9     double revenue = 0.0;        //销售收入 
10 };
11 
12 int main()
13 {
14     Sales_data book;
15     while (cin >> book.bookNo >> book.units_sold >> book.revenue) {
16         cout << book.bookNo << " " << book.units_sold << " " << book.revenue << endl;
17     }
18     return 0;
19 }
View Code

(1.21)

 1 #include <iostream>
 2 #include <string>
 3  
 4 using namespace std;
 5 
 6 struct Sales_data {
 7     string bookNo;                //书的ISBN 
 8     unsigned units_sold = 0;    //售出的本数 
 9     double revenue = 0.0;        //销售收入 
10 };
11 
12 int main()
13 {
14     Sales_data book1, book2;
15     cin >> book1.bookNo >> book1.units_sold >> book1.revenue;
16     while (cin >> book2.bookNo >> book2.units_sold >> book2.revenue) {
17         if (book1.bookNo == book2.bookNo)
18             cout << book1.bookNo << " " << book1.units_sold + book2.units_sold << " " << book1.revenue + book2.revenue << endl;
19         else    cout << "两本书的ISBN必须相同!
";
20     }
21     return 0;
22 }
View Code

(1.22)

 1 #include <iostream>
 2 #include <string>
 3  
 4 using namespace std;
 5 
 6 struct Sales_data {
 7     string bookNo;                //书的ISBN 
 8     unsigned units_sold = 0;    //售出的本数 
 9     double revenue = 0.0;        //销售收入 
10 };
11 
12 int main()
13 {
14     Sales_data book, total;
15     cin >> total.bookNo >> total.units_sold >> total.revenue;
16     while (cin >> book.bookNo >> book.units_sold >> book.revenue) {
17         if (book.bookNo == total.bookNo) {
18             total.revenue += book.revenue;
19             total.units_sold += book.units_sold;
20         }
21         else     break;
22     }
23     cout << total.bookNo << " " << total.units_sold << " " << total.revenue << endl;
24     return 0;
25 }
View Code

其他的意义同上。

 

 

原文地址:https://www.cnblogs.com/xzxl/p/7620365.html