-
找出以下变量名中的错误项,并说明原因:
-
2things: 错误。变量名不能以数字开头。 -
my var: 错误。变量名不能包含空格。 -
double: 错误。double是 C/C++的关键字,不能用作变量名。 -
$price: 错误。变量名只能由字母、数字和下划线组成,不能包含$。 -
_sys_flag: 正确。虽然以_开头的名称通常为库或编译器内部使用,但语法上是合法的。
-
-
选择合适的数据类型定义变量来表示以下数据:
-
一个人的年龄:
unsigned int或int。
理论上char、short、long等等也可以,但是很少这么做
char显得意图不清晰;short、long用得少;而long long就太浪费了 -
圆周率 π:
double
理论上float、long double也可以,不过一般double是兼顾精度和占用的最优解 -
考试是否及格:
bool(C++) 或int(C) -
地球的人口数量 (约 80 亿):
long long或unsigned long long
因为 80 亿已经超过了int/long的 42 亿上限了 -
一个英文字母:
char。
理论上int等更大的亦可以,但是没必要浪费 -
银行系统的存款:
long long int(或者自定义的大整数类型)
是不是以为¥1145.14就要使用double?或许更熟悉的读者还会想到long double这种精度更高的类型。然而,这是一个经典的陷阱!
请回想一下浮点数的精度问题:
0.1 + 0.2 ≠ 0.3。这种微小的误差在科学计算中或许可以接受,但在金融系统中是 绝对致命 的。每天有数以亿计的交易,每一笔交易即使只产生微不足道的误差,累加起来也会造成巨大的、无法解释的资金缺口。此外,虽然现在有了符号化的数字表示(比如0.1存储为1/10),但是此方法因为约分、化简的过程,运算较慢,也不适合这种场景(想想证券交易所)因此,银行和金融系统的通用做法是:使用整数类型,以“分”(或者该货币的最小单位)为计量单位来存储金额。
-
114514.19元-> 存储为11451419(分) -
所有的加减乘除运算都在整数层面进行
-
只在最终需要显示给用户看的时候,才转换为带小数点的格式
很多时候,连
long long int的范围也不够用(想象一下国家级别的财政运算),这时开发者会使用 自定义的无限整数类(Class,可以理解为更强大的自定义类型)来处理。但无论如何,其核心依然是 整数,而非浮点数。 -
-
-
int a;和int a = 0;有什么区别?分作用域考虑。-
全局作用域:
-
int a;是 定义,编译器会将其置于静态存储区并 自动初始化为 0。 -
int a = 0;也是 定义,效果是 显式初始化为 0。两者在此作用域下最终效果相同,但显式初始化意图更清晰。
-
-
局部作用域 (例如在函数内部):
-
int a;是 定义,编译器将其置于栈上,不会对其进行初始化。它的值是 未定义的(垃圾值),使用它是危险的。 -
int a = 0;是 定义并初始化,将其 显式初始化为 0。这是一种安全且良好的编程习惯。
-
-
丙加·第2章·答案
·143 字·1 分钟·