C++ 函数总结与测验

章节回顾

内存的最小单位是二进制位,又称位(bit)。能够直接寻址(访问)的最小内存单位是字节(byte)。现代标准规定 1 字节 = 8 位。

数据类型用于告知编译器如何按有意义的方式解释内存内容。

C++ 原生支持众多基本数据类型,包括浮点数、整数、布尔值、字符、空指针以及 void。

void 表示“无类型”,主要用于说明某个函数不返回值。

不同类型占用的内存大小各异,且具体大小可能随机器而异。

相关内容

参见 课程对象大小与 sizeof 运算符 中的表格,了解各基本类型的最小尺寸。

sizeof 运算符可返回某类型占用的字节数。

有符号整数(signed integers)用于存放包含正负号及 0 的整数。某一特定数据类型可表示的值的集合称为其范围(range)。使用整数时,需留意溢出(overflow)及整数除法问题。

无符号整数(unsigned integers)仅存放非负数(含 0),通常应避免使用,除非进行位级操作。

定宽整数(fixed-width integers)具有保证的大小,但并非在所有架构上均存在。fast 与 least 整数是指“至少达到某一位宽”的前提下最快或最小的整数类型。std::int8_t 与 std::uint8_t 通常应避免使用,因为它们往往表现为字符而非整数。

size_t 是一种无符号整型,用于表示对象的大小或长度。

科学计数法(scientific notation)是书写冗长数字的简写形式。C++ 支持将其与浮点数联合使用。有效数字(significand,e 之前部分)中的各位称为有效位(significant digits)。

浮点类型(floating point)用于存放实数(含小数部分)。精度(precision)指在不丢失信息的情况下可表示的有效位数。当有效位数超出浮点类型可承载的精度时,将发生舍入误差(rounding error)。此类误差极其常见,即使 0.1 这类简单数字亦不例外。因此,切勿直接比较浮点数。

布尔类型(Boolean)用于存储 true 或 false。

if 语句允许在某个条件为真时执行一条或多条语句。if 语句的条件表达式被解释为布尔值。else 语句可在先前 if 条件求值为假时执行相关语句。

char 用于存储被解释为 ASCII 字符的值。使用 char 时,切勿混淆 ASCII 码值与数字。若要以整数值形式打印 char,需使用 static_cast。

尖括号(angled brackets)在 C++ 中通常用于表示需要参数化类型之处。static_cast 亦采用该语法指定转换目标类型(例如 static_cast(x) 将返回 x 的 int 值)。

测验时间

问题 1

为以下各种场景选择最合适的数据类型。尽可能具体。若答案为整数且尺寸不重要,请选 int;若尺寸重要,请选特定定宽整数类型(如 std::int16_t)。

a) 用户的年龄(以年计)(假设类型尺寸不重要)

b) 用户是否希望程序检查更新

c) π(3.14159265)

d) 教科书的页数(假设尺寸不重要)

e) 沙发长度(以英尺计),保留两位小数(假设尺寸重要)

f) 你出生以来眨眼的总次数(答案以百万计)

g) 用户通过字母从菜单中选择选项

h) 某人出生的年份(假设尺寸重要)

问题 2

作者注

自本测验起,题目难度将提升。要求编写程序的测验旨在检验你能否综合已学多概念。请做好投入时间的准备;若你是编程新手,无需期望立即得出答案。

目标在于帮你明确已知内容,以及哪些概念需额外学习。若略感吃力,实属正常。

提示:

  • 勿图一次性写完整个方案。先写一个函数,测试无误后再继续。
  • 善用调试器定位问题。
  • 回顾本章先前测验答案,其中常含相似概念。
  • 若真遇困境,可查看解答,但务请逐行理解后再前进。只要最终理解了概念,能否独立写出并非关键。

编写以下程序:
提示用户输入 2 个浮点数(使用 double)。随后要求用户输入下列数学符号之一:+、-、* 或 /。程序对输入的两数执行相应运算并打印结果。若用户输入非法符号,程序不应输出任何内容。

Enter a double value: 6.2  
Enter a double value: 5  
Enter +, -, *, or /: *  
6.2 * 5 is 31

问题 3

附加题:本题稍有难度。

编写小程序模拟小球自塔顶自由下落。首先询问用户塔高(米)。假设重力加速度为常规值 9.8 m/s²,且小球初速度为 0。程序依次输出小球在 0、1、2、3、4、5 秒时距地面的高度;球不可低于地面(高度 0)。

使用函数计算 x 秒后小球的高度。用以下公式计算下落距离:
distance fallen = gravity_constant * x_seconds² / 2

预期输出:
Enter the height of the tower in meters: 100
At 0 seconds, the ball is at height: 100 meters
At 1 seconds, the ball is at height: 95.1 meters
At 2 seconds, the ball is at height: 80.4 meters
At 3 seconds, the ball is at height: 55.9 meters
At 4 seconds, the ball is at height: 21.6 meters
At 5 seconds, the ball is on the ground.

注意:根据塔高不同,球可能在 5 秒内未落地——这并无问题。后续我们学习了循环后会改进此程序。
注意:C++ 中 ^ 并非指数运算符。请用乘法实现公式,勿用指数运算。
注意:请使用 double 字面值,例如 2.0 而非 2。

关注公众号,回复"cpp-tutorial"

可领取价值199元的C++学习资料

公众号二维码

扫描上方二维码或搜索"cpp-tutorial"