跳转至

变量与运算

变量类型

变量用来存放数据,存什么样的数据,要选择对应的类型。

C++ 的变量类型有很多种,我们学习必要的几种。

整型,存放整数

int x;

整数较大,int 放不下时,可以考虑 long long。

long long x;

浮点型,可以存放小数

double x;

字符类型,存放一个字符,这里先存英文字母、数字、符号,用单引号括起来

char c;

布尔类型,表示真(true)或假(false)

bool flag;

常用场景举例:

int a, b;
cin >> a >> b;

int x = 10;

double y = 1.5;

char c = 'A';

bool flag = false;

变量的赋值

int x = 10;

int 是类型,x 是变量名,定义时给它一个初始值 10,叫作初始化。

int x;  // 先定义变量
x = 10; // 再赋值
x = 20; // 重新赋值,原来的10被替换

= 是赋值,先算右边,再把结果存到左边的变量里。

int x = 10;
x = x + 1; // 先算10 + 1,再存回x,x变成11

这里不是数学里的等式。判断是否相等,用 ==,后面讲。

变量使用前,要有确定的值。

写在函数里的 int x; 不会自动变成 0。要先赋值,或者通过 cin 输入,再参与计算。

变量的运算

常用的运算符号

符号 运算 例子
+ 加 3 + 2 得到 5
- 减 3 - 2 得到 1
* 乘 3 * 2 得到 6
/ 除 6 / 2 得到 3
% 取余,只适用于整数 7 % 3 得到 1

除法和取余,除数都不能是 0。

先乘、除、取余,再加、减;同一级的这些运算,按从左到右的顺序结合。有括号,先算括号里的。

cout << 2 + 3 * 4;   // 14
cout << (2 + 3) * 4; // 20
cout << 8 / 2 * 3;   // 12

取余经常用来判断整除、奇偶:n % 3 == 0 表示 n 能被 3 整除,n % 2 == 0 表示 n 是偶数。

运算简写

x += 2; // 相当于 x = x + 2;
x -= 2; // 相当于 x = x - 2;
x *= 2; // 相当于 x = x * 2;
x /= 2; // 相当于 x = x / 2;
x %= 2; // 相当于 x = x % 2;
x++; // x增加1
x--; // x减少1

整数除以整数

整数除以整数,会舍去商的小数部分,不是四舍五入。

cout << 1 / 2;  // 输出0
cout << 5 / 2;  // 输出2
cout << -5 / 2; // 输出-2,叫作“向0取整”
int x = 1, y = 2;
cout << x / y; // 输出0

如何得到小数结果

做除法之前,让至少一个参与除法的数变成 double。

int x = 1, y = 2;
cout << 1.0 * x / y; // 输出0.5

也可以转换类型:

int x = 1, y = 2;
cout << (double)x / y; // 输出0.5

注意转换的时机:

int x = 5, y = 2;
double a = x / y;       // 先算整数除法,a的值是2.0
double b = 1.0 * x / y; // 先转成小数再除,b的值是2.5

x / y * 1.0 也晚了,前面的整数除法已经把小数部分舍去了。

double 可以存放小数,但许多小数只能近似存储。

小数转整数

如果计算结果是小数,想取整数部分,怎么办呢?

double x = 1.5;
int y = x; // y是1,小数部分直接舍去

也可以在输出时转换:

double x = 1.5;
cout << (int)x; // 输出1

负数也一样,-1.5 转成 int 得到 -1。这也是向 0 取整,不是四舍五入。

类型能存放的数有范围,计算结果和转换后的值都不能超出对应类型的范围。

常用变量命名

变量命名,十分重要。

有一些名字,做题时经常这样用,咱们先保持一致,方便他人阅读你的代码。

有一些变量命名,是特殊情况,我们用英文简写,这样可提高代码的可读性。

切忌使用奇奇怪怪的命名,搞得代码不对电脑加密,代码对人“加密”。

变量名可以使用字母、数字、下划线,但不能以数字开头,不能使用 int、double 这样的关键字。

大小写有区别,a 和 A 是两个名字。

通用命名

这些变量命名,把名字抄一遍,都要熟悉。

变量名称 单词全拼 使用场景
a, b, c 通用变量名,也常用来给数组命名
n, m n 个数,n 行 m 列
x, y 未知数,坐标,行列坐标
maxn, minn 最大值、最小值(maxn 也常表示数组容量上限)
i, j, k for 循环结构使用
last 上一个访问的元素
ans answer 答案
ret result 答案
cnt count 计数器,int cnt = 0;(注意初始化成0)
sum summation 求和,int sum = 0;(注意初始化成0)
num number 数字
tmp temporary 存储临时数据
s string 字符串
c char 字符
pos position 位置
dis distance 距离
cur current 当前的
now 当前的
st start 开始
ed end 结束