【C Primer Plus第六版中文】 课后习题 第三章 3.10复习题(个人总结版)

哔哩哔哩   2023-07-30 19:33:57

(前言:本文章由个人收集相关资料且撰写而成,初心是在学习中做笔记,供个人学习使用)

1. 指出下面各种数据使用的合适数据类型(有些可使用多种数据类型)

a. East Simpleton的人口

b. DVD影碟的价格


(资料图)

c. 本章出现次数最多的字母

d. 本章出现次数最多的字母次数

解答:

a. East Simpleton的人口:使用整数型数据类型int,因为人口通常是一个整数值,不需要小数部分;也可以用short或unsigned short类型。

b. DVD影碟的价格:使用浮点型数据类型floatdouble,因为价格通常是一个带有小数的实数值;通常用float,实际上不需要double那么高的精度。

c. 本章出现次数最多的字母:使用字符型数据类型char,因为字母是单个字符。

d. 本章出现次数最多的字母次数:使用整数型数据类型int,因为次数是一个整数值,不需要小数部分,也可以是unsigned类型。

2. 在什么情况下要用long类型的变量代替int类型的变量呢?

a. 在系统中要表示的数超过了int可表示的范围,这时要使用long类型,防止数据溢出

b. 如果要处理更大的值,那么使用 一种在所有系统上都保证至少是32位的类型,可提高程序的可移植性。

3. 使用哪些可移植的数据类型可以获得32位有符号整数?选择的理由是什么?

在C语言中,可以使用int32_t和int_least32_t这两个可移植的数据类型来获得32位有符号整数。

a. int32_t:这是一个固定大小的数据类型,保证其大小为32位。在大多数平台上,`int32_t`被定义为`int`类型,大小为32位。如果存在的话,它是最直接的选择,因为它确保了固定的大小。

b. int_least32_t:这是一个最小大小的数据类型,至少保证其大小为32位。如果平台上没有32位的整数类型,`int_least32_t`会选择最小的可以容纳32位整数的整数类型。这样,即使平台不支持32位的`int`类型,也可以保证至少有一个32位的整数类型。

c. 如果要为32位整数提供最快的计算速度,可以选择int_fast32_t类型(假设你的系统已定义了上述类型)

选择使用这三个可移植的数据类型的理由是,它们能够确保在各种平台上都能得到32位的有符号整数,避免了平台之间数据类型大小不一致的问题,增强了代码的可移植性和可靠性。使用这些数据类型可以让代码在不同的编译器和计算机上都能正常工作,而不需要关心平台的底层实现细节。

4. 指出下列常量的类型和含义(如果有的话):

a. ‘\b’

b. 1066

c.

d. 0XAA

e.

解答:

a. ‘\b’:char类型常量(但是储存为int类型)

b. 1066:这是一个整数常量,类型为`int`,表示十进制数值1066。

c. :这是一个浮点数常量,类型为`double`,表示浮点数值。

d. 0XAA:unsigned int 类型常量,十六进制格式,

e. :这是一个浮点数常量,类型为`double`,表示科学计数法表示的浮点数值乘以10的30次方。

5. Dottie Cawm编写了一个程序,请找出程序中的错误。

……

第一行:改为 #include<>

第二行:改为int main()

第三行:把(改为{

第四行:g和h之间的;改为,

第五、六行:没问题

第七行:在e前面至少有个数字,例如1e21

第八行:没问题

第九行:把(改为{

除此之外,还缺少一些内容。首先,没有给rate变量赋值;其次未使用h变量;而且程序不会报告计算结果。虽然这些错误不会影响程序的运行(编译器可能给出未被使用的警告),但是它们确实与程序设计的初衷不符合。另外,在该程序的末尾应该有一个return语句。

修正后:

6、7常量、类型及其转换说明

8. 假设程序的开头有下列声明:int imate = 2……

%d   %ld   %f   %c

其中第二个,为long类型而非long double 则用十进制%d,中间再加上类型首字母long的“l”即%ld

9. 假设ch是char类型的变量。分别使用转义序列、十进制值、八进制字符常量和十六进制字符常量把回车字符赋给ch(假设使用ASCII码)

首先:ASC码是指ASCII码(American Standard Code for Information Interchange),它是一种用于表示字符的编码标准。

转义序列:ch = ‘\n’;

十进制值:ch = 10;

八进制字符:ch = ‘\012’

十六进制字符:ch = ‘\xOA’

或者

转义序列:ch = ‘\r’;

十进制值:ch = 13;

八进制字符:ch = ‘\015’

十六进制字符:ch = ‘\xd’

两种写法是由于:

在C语言中,`\n`和`\r`都是转义字符,用于表示特殊的控制字符。

1. `\n`:代表换行符(Newline)

- 在输出中,`\n`会使得光标移到下一行的行首,相当于按下回车键换行。

- 在字符串中,使用`\n`可以换行,使得文本更加清晰易读。

2. `\r`:代表回车符(Carriage Return)

- 在输出中,`\r`会使得光标移到本行的行首,相当于将光标移至最左边,但不会换行。

- 在字符串中,使用`\r`可以实现在当前行内的文本覆盖,常用于文本动画或覆盖输出。

在大多数情况下,使用`\n`来表示换行更为常见,而`\r`常用于特殊需求,如在Windows系统中,文本的换行通常是由两个字符组成:`\r\n`,即先回车再换行。而在Unix/Linux系统中,则通常只使用`\n`来表示换行。

10. 修正下面的程序(在C中,/表示除以)

前面缺少一行#include<>

第一行:使用/* 和 */将注释括起来,或者在注释前面用//

第三行:改为 int cows, legs;

第四行:在\n后加”

第五行:把%c改为%d,把legs改为&legs

第七行:把%f改为%d

11. 指出下列转义序列的含义:

a. \n      b. \\      c. \”      d. \t

解:a. 换行字符      b. 反斜杠字符      c. 双引号字符       d. 制表字符