变量与运算
这是什么:变量 = 给数据起的名字,一个贴了标签的盒子;C++ 里它还必须先声明类型,盒子才有固定的大小。
为什么用:会打印只是开口说话,这一章让程序学会"记账"——把数据存进变量里做运算。Python 直接 age = 18,C++ 却得先说清是什么类型,不然编译器不知道该给你留多大格子。
如何用:先声明 int、double、char、bool 四个变量各打一次,再拿它们做算术、比较和赋值运算。
四大基本类型
Python 里 age = 18 直接用;C++ 必须先告诉编译器"这个盒子装什么类型":
#include <iostream>
int main() {
int age = 18; // 整数
double height = 1.75; // 小数(浮点数)
char grade = 'A'; // 单个字符,用单引号
bool isStudent = true; // 真 / 假
std::cout << "年龄: " << age << std::endl;
std::cout << "身高: " << height << std::endl;
std::cout << "等级: " << grade << std::endl;
std::cout << "是学生吗: " << isStudent << std::endl;
return 0;
}
你会看到
年龄: 18
身高: 1.75
等级: A
是学生吗: 1
注意 bool 打印出来是 1(真)或 0(假)——C++ 把逻辑值直接当数字看。
| 类型 | 装什么 | 写法示例 | 占用空间(示例) |
|---|---|---|---|
int |
整数 | int score = 95; |
通常 4 字节 |
double |
小数 | double pi = 3.14; |
通常 8 字节 |
char |
单个字符(单引号) | char c = 'A'; |
1 字节 |
bool |
真 / 假 | bool ok = true; |
1 字节 |
算术运算与"整除坑"
#include <iostream>
int main() {
std::cout << 5 + 2 << " " << 5 - 2 << " " << 5 * 2 << std::endl;
std::cout << 5 / 2 << std::endl;
std::cout << 5 % 2 << std::endl;
std::cout << 5.0 / 2 << std::endl;
return 0;
}
你会看到
7 3 10
2
1
2.5
| 表达式 | 结果 | 说明 |
|---|---|---|
5 + 2 |
7 |
加法 |
5 - 2 |
3 |
减法 |
5 * 2 |
10 |
乘法 |
5 / 2 |
2 |
两个整数相除直接砍掉小数——不是四舍五入,是硬砍 |
5 % 2 |
1 |
取余:5 除 2 余 1;判断奇偶、分组神器 |
5.0 / 2 |
2.5 |
只要有一边是小数,就按小数除法算 |
新手第一大坑:
5 / 2不等于 2.5!整数相除会"整除"。想要小数,就让其中一边带上小数点。
比较与逻辑运算
比较的结果是一个 bool:
#include <iostream>
int main() {
std::cout << (3 > 2) << " " << (3 == 2) << " " << (3 != 2) << std::endl;
std::cout << ((3 > 2) && (5 > 4)) << " " << ((3 < 2) || (5 > 4)) << std::endl;
std::cout << !(3 > 2) << std::endl;
return 0;
}
你会看到
1 0 1
1 1
0
| 运算符 | 意思 | 例子 | 结果 |
|---|---|---|---|
== |
等于 | 3 == 2 |
false (0) |
!= |
不等于 | 3 != 2 |
true (1) |
> |
大于 | 3 > 2 |
true (1) |
< |
小于 | 3 < 2 |
false (0) |
>= |
大于等于 | 3 >= 3 |
true (1) |
<= |
小于等于 | 2 <= 3 |
true (1) |
&& |
与(两边都真才真) | true && false |
false (0) |
|| |
或(一边真就真) | false || true |
true (1) |
! |
非(真假对调) | !true |
false (0) |
一个
=是赋值,两个==才是"等于"——写混了编译器多半会拦住你。
赋值运算与复合赋值
#include <iostream>
int main() {
int x = 10;
x += 3; // 等价于 x = x + 3,x 变成 13
x -= 2; // 等价于 x = x - 2,x 变成 11
x *= 2; // 等价于 x = x * 2,x 变成 22
x /= 4; // 等价于 x = x / 4,x 变成 5
std::cout << x << std::endl; // 5
return 0;
}
+=, -=, *=, /= 是常用的简写,和 Python 用法一致。
自增自减
#include <iostream>
int main() {
int a = 5;
int b = 5;
std::cout << a++ << std::endl; // 先用后加:打印 5,然后 a 变成 6
std::cout << a << std::endl; // 打印 6
std::cout << ++b << std::endl; // 先加后用:b 先变成 6,打印 6
return 0;
}
你会看到
5
6
6
a++:先拿出 a 的旧值用,再把 a 加 1++a:先把 a 加 1,再拿新值用
❓ 常见问题
Q1:char 可以存汉字吗?
不能。char 只存一个字节,一个 UTF-8 汉字通常占 3 个字节,装不下。存汉字请用 std::string(下一章或 STL 的 string 章节会讲)。
Q2:int 能存多大的数?
通常 int 是 4 字节,范围大约是 -21 亿到 +21 亿。超过这个范围需要用 long long(8 字节)。
Q3:bool 为什么打印成 1 和 0 而不是 true/false?
C++ 的 std::cout 默认把 bool 当整数输出。如果想看到 true/false,可以加 std::boolalpha:std::cout << std::boolalpha << isStudent;
⚠️ 新手翻车现场
翻车一:5 / 2 期待 2.5 结果得到 2
// 错误期望:整数相除也得到小数
std::cout << 5 / 2; // 打印 2,不是 2.5
问题:两个整数相除,C++ 直接砍掉小数部分(向零取整)。
修正:5.0 / 2 或 5 / 2.0,只要一边是小数,就按浮点除法算,结果是 2.5。
翻车二:= 和 == 写混
// 错误:if 里用了一个等号,变成了赋值
if (a = 5) { ... }
问题:a = 5 是赋值表达式,值为 5(非零即真),if 永远成立,而且把 a 顺手改成了 5。
修正:比较要用 ==:if (a == 5) { ... }。
🎯 什么时候用哪种类型
| 场景 | 推荐类型 | 原因 |
|---|---|---|
| 年龄、人数、分数 | int |
整数,不需要小数 |
| 身高、体重、价格 | double |
需要小数精度 |
| 性别 M/F、等级 A/B | char |
单个字符 |
| 是/否、开/关 | bool |
两种状态 |
📝 本章小结
- C++ 变量必须先声明类型,再使用
int整数、double小数、char单字符、bool真假- 整数相除会硬砍小数(
5/2 = 2),想要小数让一边带小数点 - 比较用
==,赋值用=,别混 +=/-=/*=//= 是复合赋值简写;a++先用后加,++a先加后用- 记忆口诀:类型先声明,整除硬砍零(5/2 得 2),等于是双等。
动手改
- 声明一个
double存你自己的身高,打印出来 - 先笔算
7 % 3和10 / 3,再写代码验证——和直觉一致吗? - 把
5.0 / 2改成5 / 2.0,看看结果变不变 - 写一段代码:判断一个整数
n是否是偶数,用%运算符
下一章:流程控制,让程序学会"看情况办事" 🐸