🐸 青蛙编程网
首页 / C++ / C++ 基础 / 3. 变量与运算

变量与运算

这是什么:变量 = 给数据起的名字,一个贴了标签的盒子;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),等于是双等。

动手改

  1. 声明一个 double 存你自己的身高,打印出来
  2. 先笔算 7 % 3 和 10 / 3,再写代码验证——和直觉一致吗?
  3. 把 5.0 / 2 改成 5 / 2.0,看看结果变不变
  4. 写一段代码:判断一个整数 n 是否是偶数,用 % 运算符

下一章:流程控制,让程序学会"看情况办事" 🐸

📥 下载本章代码

ZIP 内含本章全部代码文件与说明,解压即用,与教程内容同步生成。