第3章 数据类型、变量与常量

第3章 数据类型、变量与常量

程序处理的每一个数据都必须先"声明类型"。本章讲解 C++ 一级要求的基本数据类型、变量的定义与命名规则、常量的两种写法,以及字符背后的 ASCII 码。

3.1 变量是什么

变量是内存中一块用来存放数据的小空间,有一个名字(变量名)和一个类型。

note

数据必须"先定义,后使用"。定义变量时,计算机按类型分配固定大小的内存。例如 int a; 会分配 4 个字节给 a。

3.1.1 变量的定义与初始化

int age; // 只定义,值未知(垃圾值)
int num = 10; // 定义并初始化为 10
double pi = 3.14; // 浮点变量
char ch = 'A'; // 字符变量,用单引号

int a, b, c; // 一行定义多个同类型变量
int x = 5, y = 7; // 同时初始化
tip

养成"定义即初始化"的习惯,可以避免使用到不确定的垃圾值。

3.2 变量命名规则

  1. 只能由 字母、数字、下划线 _ 组成;
  2. 首字符必须是字母或下划线,不能是数字;
  3. 区分大小写:num 与 Num 是两个不同的变量;
  4. 不能使用关键字(如 int、if、for、while 等);
  5. 建议"见名知意",如 score、studentCount。

✅ 合法:name、_count、student1、maxValue ❌ 非法:123abc(数字开头)、int(关键字)、a+b(含非法字符)

int total_score = 0; // 推荐:下划线命名
int studentCount = 5; // 也常见:驼峰命名

3.3 基本数据类型

类型名称字节数典型取值范围
short (int)短整型2−32768∼32767-32768 \sim 32767
int整型4−231∼231−1-2^{31} \sim 2^{31}-1(约 ±21\pm 21 亿)
long long长整型8−263∼263−1-2^{63} \sim 2^{63}-1(约 ±9×1018\pm 9\times10^{18})
float单精度浮点4约 6~7 位有效数字
double双精度浮点8约 15~17 位有效数字
char字符型1−128∼127-128 \sim 127(或 0∼2550\sim255)
bool布尔型1true(1) / false(0)
caution

整数溢出:int 最大约 21 亿,如果题目数据可能超过它(如 10910^9 相加),应使用 long long。这是考试和竞赛中最常见的错误之一。

3.3.1 整型 int 与 long long

int a = 1000000000; // 10 亿,int 放得下
long long big = 5000000000LL; // 50 亿,必须用 long long

数字后加 LL 表示 long long 类型的字面量;加 L 表示 long。

3.3.2 浮点型 float 与 double

float f = 3.14f; // 单精度,数字后加 f
double d = 3.14159; // 双精度(默认推荐)
note

浮点数有精度误差,例如 0.1 + 0.2 在电脑里并不严格等于 0.3。判断两个浮点数是否相等要用误差范围,而不是直接 ==(更严谨的比较在更高阶学习)。一级阶段知道"浮点有误差"即可。

3.3.3 字符型 char 与 ASCII 码

char 占 1 字节,表面上存字符,本质存的是该字符对应的 ASCII 码(整数)。

字符ASCII
'0'~'9'48~57
'A'~'Z'65~90
'a'~'z'97~122
char c = 'A';
cout << c << " 的 ASCII 是 " << (int)c << endl; // 输出 A 的 ASCII 是 65
cout << (char)97 << endl; // 输出 a

// 大小写转换:小写字母 - 32 = 对应大写
char lower = 'b';
char upper = lower - 32; // 'b'(98) - 32 = 66 = 'B'
cout << upper << endl; // 输出 B
tip

记忆口诀:'a' - 'A' = 32;数字字符转数字用 '7' - '0' = 7。这在"数位分离"等题目中非常有用。

3.3.4 布尔型 bool

只有 true(真,值为 1)和 false(假,值为 0)。

bool isPass = true;
bool isOver = (3 > 5); // 关系表达式结果为 false
cout << isPass << " " << isOver << endl; // 输出 1 0

3.4 查看类型大小:sizeof

sizeof(类型或变量) 返回占用的字节数。

cout << sizeof(int) << endl; // 通常输出 4
cout << sizeof(double) << endl; // 通常输出 8
cout << sizeof(char) << endl; // 输出 1

3.5 常量

常量是在程序运行期间值不可改变的量。 两种写法:

3.5.1 const 定义(推荐,C++ 风格)

const int MAXN = 100; // 定义常量 MAXN
const double PI = 3.14159;
// MAXN = 200; // 错误!常量不能重新赋值

3.5.2 #define 宏定义(C 风格,预处理替换)

#define MAXN 100
#define PI 3.14159
caution

const 和 #define 区别:前者有类型、会做类型检查,作用域受限制;后者只是"文本替换",发生在编译前的预处理阶段,没有类型概念。一级阶段推荐用 const,更安全。

3.6 随堂检测

1. 下列合法的变量名是( )。

  • A. 2num
  • B. int
  • C. _score
  • D. a-b
查看答案

答案:C。A 数字开头;B 是关键字;D 含减号;C 以下划线开头合法。

2. 字符 '9' 减去字符 '0' 的结果是( )。

  • A. 9
  • B. '9'
  • C. 错误
  • D. 0
查看答案

答案:A。'9' 的 ASCII 是 57,'0' 是 48,57−48=957-48=9,得到整数 9。

3. 若要存储约 101210^{12} 的整数,应优先选用( )。

  • A. int
  • B. short
  • C. long long
  • D. char
查看答案

答案:C。int 约到 21 亿会溢出,101210^{12} 需用 long long。

SShowball OI知识手册