变量
1.认识变量
变量是用来存储变化数据的量,变量必须先定义声明,才可以使用,同一个作用域里面变量不能重名。
可以把变量理解为一个箱子,数据赋值给变量就相当于把数据存进了箱子里面,变量的名字就相当于贴在箱子上面的说明或者标签,而不同类型的数据就好像是不同种类和大小的箱子,所以存储的数据也就各不相同。
定义变量的方式:类型 变量名;
若需要给变量赋初始值,则可以这样写:类型 变量名 = 值;
如果后续想改变变量的值,可以使用赋值符 =
,格式为 变量名 = 值;
2.常用变量类型
总览
此处只列举一些常见的变量类型。
整数类型
用于存储整数,此处只列举最常用的整数类型,其余的再后续补充。
类型 | 关键字 | 值 | 数据 | 占用字节数 |
---|---|---|---|---|
整型 | int | -21亿 ~ 21亿 | 4 | |
长整型 | long long | -9e18 ~ 9e18 | 8 |
浮点数类型
用于存储实数,此处只列举最常用的浮点数类型,目前最常用的是 double
。
类型 | 关键字 | 值 | 浮点数有效数字 | 占用字节数 |
---|---|---|---|---|
浮点型 | float | 6-9位有效数字 | 4 | |
双精度浮点型 | double | 15-17位有效数字 | 8 | |
扩展精度浮点型 | long double | 33-36位有效数字 | 16 |
字符类型
字符的底层存储方式仍然是数字,一般通过 ASCII编码 实现字符与整数的一一对应。
类型 | 关键字 | 值 | 占用字节数 |
---|---|---|---|
字符型 | char | 256个字符值 | 1 |
比较关键的字符与对应的 ASCII 码值:
字符 | ASCII码值 |
---|---|
0~9 | 48~57 |
A~Z | 65~90 |
a~z | 97~122 |
空格 | 32 |
布尔类型
一个 bool
类型的变量取值只可能为两种:true
和 false
。
类型 | 关键字 | 值 | 占用字节数 |
---|---|---|---|
布尔型 | bool | true/false | 1 |
3.课上例题
数据运算
1.算术运算符
运算符 | 描述 | 示例:int a=11, b=2; | 结果 |
---|---|---|---|
+ | 加法 | a + b | 13 |
- | 减法 | a - b | 9 |
* | 乘法 | a * b | 22 |
/ | 除法 | a / b | 5 |
% | 取模 | a % b | 1 |
- | 负 | -a | -11 |
前面五个运算符为双目运算符,指被操作对象有两个,例如 a + b
的被操作数就是 a
和 b
。
其中除法运算符 /
计算规则为下取整,即只取除法结果的整数部分,忽略小数部分。取模运算符 %
意为计算两个整数相除得到的余数,即求余数。
最后一个 -
是负值运算符,把数据的符号取反,它是一个单目运算符,即被操作对象只有一个。
变量在进行算术运算时,只会取出其存储的值来参与计算,在计算结束后,变量里的值不会发生改变,例如上述的几个计算式子完成后,a
和 b
的值保持不变。
在进行计算时,运算顺序遵循数学中的运算优先规则,先计算优先级高的运算,同优先级的则从左往右算,可以用括号提高优先级。
这里的优先级为:
优先级 | 运算符 |
---|---|
一级 | -(负值运算符) |
二级 | *, /, % |
三级 | +, - |
例如现在想计算一个数学表达式
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b, c, d, e, f;
cin >> a >> b >> c >> d >> e >> f;
cout << (a + b) * c - (d * e) / f;
return 0;
}
2.复合运算符
通常,我们想改变变量的值需要通过赋值运算符 =
,例如,把变量 a
的值增加 5
,可以写成:a = a+5;
这种写法可以通过复合运算符来缩写:
运算符 | 描述 | 示例 | 相当于 |
---|---|---|---|
+= | 加法 | a += 3 | a = a + 3 |
-= | 减法 | a -= 3 | a = a - 3 |
*= | 乘法 | a *= 2 | a = a * 2 |
/= | 除法 | a /= 4 | a = a / 4 |
%= | 取模 | a %= 5 | a = a % 5 |
3.课上例题
类型转换
1.隐式转换
此处只介绍比较简单的转换:
计算中的类型转换
对于双目运算符,当参与运算的两个变量类型不同时,会发生类型转换,使得两个计算的数据的类型一致,来得到结果。
计算时,范围小的数据会转换为范围大的数据,例如 char
和 int
计算时,会把 char
转为 int
类型再计算,得到的结果是 int
;int
和 double
计算时,int
转为 double
,得到的结果是 double
。
简单来说:char < int < long long < double
赋值时的类型转换
将一个值赋给一个变量时,会把这个值转为该变量的类型。
例如 int x = 13.4
,此时变量 x
中存储的是 13
。
2.强制转换
可以通过 (类型)(值)
将一个数据强制转换为对应的类型,例如:
(char)(97);
转为 ASCII 码值为 97 的字符,结果为 a
。
3.课上例题
格式化输出
目前重点需要的是保留浮点数位数和位宽。
1.保留浮点数位数
若使用 cout
的话,需要结合 fixed
语句和 setprecision
语句,格式为:
cout << fixed << setprecision(位数);
那么后面输出的所有浮点型数据都会以保留小数点后指定位数的形式输出,并且如果原小数位数多的部分,会按四舍五入进行舍入。其他类型输出不受影响。
下面是一个程序示例:
#include <bits/stdc++.h>
using namespace std;
int main() {
double a = 3.14159;
int b = 4;
cout << fixed << setprecision(3);
cout << a << '\n'; // 结果为 3.142
cout << b << '\n'; // 结果为 4
cout << fixed << setprecision(4); // 重新设置
cout << a << '\n'; // 结果为 3.1416
return 0;
}
可以尝试在程序中写出这段代码,并运行查看结果。
补充:
setprecision
属于头文件 iomanip
,如果导入了万能头文件 bits/stdc++.h
则不用在意 。
如果需要取消该精度设置,可以写 cout.unsetffloatfield;
。
2.设置输出位宽
通过 setw
语句可以设置输出数据时,一个数据至少占据的字符位宽,例如:
cout << setw(6) << 10;
那么在输出 10
时,它会占据六个字符的位置,向右对齐,并且空余的位用空格补齐,输出如下所示:
多余的左对齐、设置填充字符、C风格的输入输出等,会在后面补充文档中进行说明。