变量与数据类型¶
什么是变量?¶
程序要处理数据,数据就要有个「家」。变量就是一个带名字的盒子,用来存放数据。
比如我们要计算两个数的和,就要先把这两个数放进盒子,再取出来运算:
#include <iostream>
using namespace std;
int main() {
int a = 3; // 定义一个叫 a 的盒子,放入 3
int b = 5; // 定义一个叫 b 的盒子,放入 5
int sum = a + b; // 把 a 和 b 里的值相加,放进新盒子 sum
cout << sum << endl;
return 0;
}
运行输出 8。
int a = 3; 这句话做了两件事:
- 声明:向系统申请一个能放整数的盒子,取名
a - 赋值:把
3放进去
常用数据类型¶
盒子有不同规格——放整数、放小数、放字符,用的类型不一样:
| 类型 | 用途 | 举例 | 大小 | 范围(约) |
|---|---|---|---|---|
int |
普通整数 | 10, -7, 0 |
4 字节 | \(-2.1 \times 10^9\) ~ \(2.1 \times 10^9\) |
long long |
大整数 | 12345678901234 |
8 字节 | \(-9.2 \times 10^{18}\) ~ \(9.2 \times 10^{18}\) |
double |
小数 | 3.14, -0.5 |
8 字节 | 约 15~16 位有效数字 |
char |
单个字符 | 'A', '+' |
1 字节 | 一个字符 |
bool |
真假 | true, false |
1 字节 | 只有两种值 |
int age = 11;
long long bigNum = 3000000000LL; // 超过 21 亿,必须用 long long
double pi = 3.14159;
char grade = 'A';
bool isOK = true;
竞赛第一坑:整数溢出
int 最大只能存约 21 亿。两道 10 亿级别的数相加,int 就装不下了,
结果会「绕回去」变成一个离谱的负数——这叫溢出。
经验法则:题目中数据超过 \(10^9\)、或涉及乘法时,果断用 long long。
这是 CSP 每年都有人栽跟头的地方。
标识符命名规则¶
给盒子(变量)起名字有规矩:
- 只能由字母、数字、下划线组成,且不能以数字开头
- 区分大小写:
sum和Sum是两个变量 - 不能用关键字(如
int、return)
好的命名让人一看就懂:score(分数)、maxLen(最大长度);坏的命名过两天自己都看不懂:a1、tmp2。
常量:不会变的盒子¶
有些量整个程序运行期间都不变,比如圆周率。可以用 const 修饰:
const 变量不能再被修改,这样能防止手滑改错。
例题:交换两个变量¶
题目描述 读入两个整数 \(a\) 和 \(b\),把它们交换后输出。
输入格式 一行两个整数 \(a\)、\(b\)。
输出格式 一行两个整数,用空格分隔,即交换后的结果。
数据范围 \(0 \le a, b \le 10^9\)。
样例输入 / 样例输出
思路分析 就像两杯水交换要先借第三个空杯子:先把 \(a\) 存进临时变量 \(t\),再把 \(b\) 装进 \(a\),最后把 \(t\) 装回 \(b\)。
参考代码
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
int t = a; // 空杯子先装下 a
a = b; // b 的值装进 a
b = t; // 杯子里原来的 a 装进 b
cout << a << " " << b << endl;
return 0;
}
顺手记一个工具
C++ 还自带交换函数 swap(a, b);(需 #include <algorithm>),效果一样。
但借杯子交换的原理必须懂,笔试会考。
动手试一试¶
- 定义变量保存你的年龄和身高,输出一句话介绍自己
- 计算 \(1000000 \times 1000000\),分别用
int和long long存结果,观察区别 - 思考:
char c = 'A';之后执行c = c + 1;,c变成了什么字符?(提示:字符在电脑里是数字)
下一课,我们让程序学会「对话」:输入与输出。