CC++ & Algorithm

赋值运算与自增自减

中等7
语言版本:C++
概述:学会给变量“赋值”和让变量自动加1减1的快捷写法。

赋值运算与自增自减:让变量“听话”地变化

程序里经常需要改变变量的值,比如记录游戏分数、统计排队人数、计算零花钱余额。赋值运算符就是用来给变量“装新值”的工具,而自增自减则是让变量自动加1或减1的快捷写法。学会了它们,你的代码会更简洁、更高效。

基本赋值:把值“放进盒子”

最简单的赋值是用 = 号,比如 x = 10; 就是把数字10放进变量 x 的盒子里。注意:这里的 = 不是数学上的“等于”,而是把右边的值复制一份给左边。可以看成向盒子里放入新东西,原来的旧东西被覆盖掉。

int score = 0;        // 定义分数变量,初始0
score = 100;          // 把100赋值给score,现在score是100
score = score + 20;   // 先把score的旧值100取出来加20,再放回去 → score变成120

复合赋值:省去重复写变量名

当我们要对变量自身做加减乘除时,比如 x = x + 3,可以简写为 x += 3。这种写法叫复合赋值运算符,常见的有:

  • +=:加后赋值,x += 3 等价于 x = x + 3
  • -=:减后赋值,x -= 2 等价于 x = x - 2
  • *=:乘后赋值,x *= 4 等价于 x = x * 4
  • /=:除后赋值,x /= 2 等价于 x = x / 2
  • %=:取余后赋值,x %= 7 等价于 x = x % 7

生活例子:小明每周零花钱是50元,他花掉了8元买零食,那现在余额就是 money = money - 8,写成复合赋值就是 money -= 8,更直观。

int money = 50;          // 初始零花钱50元
money += 30;             // 妈妈又给了30元 → money = 80
money -= 8;              // 买零食花掉8元 → money = 72
money *= 2;              // 爸爸说考100分奖励翻倍 → money = 144
money /= 3;              // 和两个朋友平分花费 → money = 48 (整数除法)
cout << "现在有 " << money << " 元" << endl; // 输出48

自增与自减:让变量“自动”走一步

想让变量加1或减1,最直接的写法是 x = x + 1x = x - 1。但C++提供了更简短的运算符:

  • x++++x:把 x 增加1(自增)
  • x----x:把 x 减少1(自减)

它们有两种形式:后缀x++)和前缀++x)。区别在于什么时候改变变量的值

写法执行顺序例子
x++(后缀)先使用 x 的当前值,然后 x 加 1int b = a++; → b得到a原来的值,a再增加
++x(前缀)先把 x 加 1,然后使用新值int c = ++a; → a先增加,c得到新值

生活例子:排队时,队伍人数 people 每来一个人就加1。如果记下“现在的人数”叫 now

  • 后缀:now = people++; 意思是“先记录当前人数,然后再来一个人”,所以 now 记录的是加人之前的人数。
  • 前缀:now = ++people; 意思是“先来一个人,再记录现在的人数”,所以 now 记录的是加人之后的人数。
int a = 5;              // a初始5
int b = a++;            // 后缀:b先得到5,然后a变成6
cout << "a = " << a << ", b = " << b << endl; // a=6, b=5

int c = ++a;            // 前缀:a先变成7,然后c得到7
cout << "a = " << a << ", c = " << c << endl; // a=7, c=7

记住:单独写 a++;++a; 效果完全一样(都是让 a 加 1),区别只在表达式里的使用顺序

新手容易犯的三个错误

错误1:把 === 搞混

= 是赋值,== 是判断是否相等。写条件时容易写成 if (x = 5),这会把5赋值给x,而且条件永远为真(因为赋值表达式的值就是5,非0即真)。正确写法if (x == 5)

错误2:在同一个表达式里多次修改同一个变量

比如 x = x++ + ++x; 这种写法在不同编译器里结果可能不同,属于“未定义行为”。建议:不要在一句话里对同一个变量多次自增自减,拆开写清楚。

错误3:忘记复合赋值与普通赋值的等价关系

x *= y + 2 等价于 x = x * (y + 2)不是 x = x * y + 2。因为复合赋值运算符的优先级低于乘除,但高于逗号,所以要特别注意括号。

int x = 10, y = 3;
x *= y + 2;        // 等价于 x = x * (y + 2) = 10 * 5 = 50
// 如果写 x = x * y + 2 则等于 10*3+2 = 32,不一样!

完整可运行示例:模拟考试成绩变化

下面的程序模拟一个学生考试后的分数变化,展示赋值、复合赋值和自增自减的使用。

#include <iostream>
using namespace std;

int main() {
    int score = 60;          // 初始成绩60分
    cout << "初始成绩: " << score << endl;

    // 老师加了5分平时分
    score += 5;              // score = 65
    cout << "平时分+5后: " << score << endl;

    // 因为作弊被扣了3分
    score -= 3;              // score = 62
    cout << "扣分后: " << score << endl;

    // 老师决定翻倍奖励积极发言
    score *= 2;              // score = 124
    cout << "翻倍后: " << score << "(但满分100!)" << endl;

    // 改正:重新赋值
    score = 100;             // 直接设为满分
    cout << "改为满分: " << score << endl;

    // 模拟自增:每答对一题加1分
    int answerCorrect = 0;   // 答对的题数
    cout << "\n开始答题..." << endl;
    answerCorrect++;         // 第一题答对
    cout << "答对第一题,题数: " << answerCorrect << endl;
    answerCorrect++;         // 第二题答对
    cout << "答对第二题,题数: " << answerCorrect << endl;

    // 演示前缀后缀区别
    int n = 10;              // 初始人数
    cout << "\n演示前缀后缀:" << endl;
    cout << "n初始值: " << n << endl;
    n += 5;
    cout << "n += 5 后: " << n << endl;
    cout << "n++ = " << n++ << " (此时n = " << n << ")" << endl;
    cout << "++n = " << ++n << " (此时n = " << n << ")" << endl;

    return 0;
}

运行结果(注释说明执行顺序):

初始成绩: 60
平时分+5后: 65
扣分后: 62
翻倍后: 124(但满分100!)
改为满分: 100

开始答题...
答对第一题,题数: 1
答对第二题,题数: 2

演示前缀后缀:
n初始值: 10
n += 5 后: 15
n++ = 15 (此时n = 16)    // 先输出15,然后n变为16
++n = 17 (此时n = 17)    // n先变为17,再输出17

相关知识点指引

掌握了赋值和自增自减,下一步可以学习:

  • 运算符优先级:弄懂 *=++ 和其他运算符谁先算,避免踩坑。
  • for 循环:循环里经常用 i++ 来计数,是自增的经典应用。
  • 输入输出:用 cin 读取变量值,结合赋值运算处理数据。
  • 关系运算符==!=<> 等,用来比较变量值,常与控制结构(if、while)配合使用。

赋值运算和自增自减是C++编程的“基本动作”,就像走路一样简单但必须熟练。多写几行代码,自然就能分清前缀后缀,轻松驾驭变量的变化。

例题精讲

1单选题

在C++中,执行以下代码后,变量a和b的值分别是多少?\nint a = 5;\nint b = a++ + ++a;

Aa=7, b=12
Ba=6, b=11
Ca=7, b=13
Da=6, b=12
2单选题

下列选项中,不能将变量x的值增加3的语句是?

Ax = x + 3;
Bx += 3;
Cx++ + 2;
Dx = 3 + x;
3判断题

在C++中,语句“int a = 5, b = a--;”执行后,a和b的值分别为4和5。

4填空题
以下程序实现变量b取变量a的值,然后将a自增1。请补充完整。\nint a = 10;\nint b = ___;
5填空题
以下代码段执行后,最终输出结果为:0 1 0。请补充循环体中的语句。\nint x = 0;\nfor(int i = 0; i < 2; i++) {\n    cout << ___ << " ";\n}