返回 课程

模板 信奥AC之路(第一级)

0% 完成
0/0 步骤
  1. 第一课 开发环境与基础输出
    4 主题|小节
  2. 第二课 算数运算符
    6 主题|小节
  3. 第三课 输入与运算
    3 主题|小节
  4. 第四课 数值操作
    4 主题|小节
  5. 第五课 表达式与运算符
    3 主题|小节
  6. 第六课 三目运算与双分支(缺导语+本课目标)
    2 主题|小节
  7. 第七课 多分支结构(缺导语+本课目标)
    1 主题|小节
  8. 第八课 多if语句
    1 主题|小节
  9. 第九课 三种分支结构的比较
    1 主题|小节
  10. 第十课 巩固学习分支结构
    1 主题|小节
  11. 第十一课 switch与复合语句
    3 主题|小节
  12. 第十二课 while循环
    2 主题|小节
  13. 第十三课 while循环的简单条件输出
    1 主题|小节
  14. 第十四课 while循环的输入序列处理
    1 主题|小节
  15. 第十五课 while循环的复杂条件输出
    2 主题|小节
  16. 第十六课 while循环与数据统计
    1 主题|小节
  17. 第十七课 for循环结构
    3 主题|小节
  18. 第十八课 for循环的输入序列处理)
    1 主题|小节
  19. 第十九课 深入探索for循环
    2 主题|小节
  20. 第二十课 三种循环的对比
    2 主题|小节
  21. 第二十一课 程序调试(一)
    3 主题|小节
  22. 第二十二课 调试工具的使用
    2 主题|小节
  23. 第二十三课 综合复习
    2 主题|小节
  24. 第二十四课 学习评估
    1 主题|小节
课 3, 主题|小节 2
进行中

3.2 自增自减运算

2025年4月20日
课 进展
0% 完成

### 3.2.1 神奇的++魔法

“小朋友们,现在我要教你们一个特别神奇的魔法!” 我神秘地从口袋里拿出一盒糖果,”看这个魔法:++”

“假设这盒糖果里有5颗糖,如果我用++魔法,就会神奇地变成6颗!就像变魔术一样!”

小朋友们都惊讶地睁大了眼睛。

![3-2描述盒子与糖果](/wp-content/uploads/2025/01/3-2描述盒子与糖果.jpg){.alignnone}

> 💡 自增运算符(++):
>
> – 让数字增加1
> – 可以放在前面或后面
> – 常用于计数

🔬 **实验四:糖果盒子魔法**
“让我们用这个神奇的++魔法来玩个糖果游戏!” 我拿出一盒糖果,”每次使用魔法,糖果就会变多一颗!”

**问题描述:**
使用自增运算符模拟往糖果盒子里添加糖果的过程。每次使用++,就代表放入一颗糖果。

**预期输出:**

“`
原本有5颗糖果
放入一颗后变成了6颗糖果
再放入一颗后变成了7颗糖果
最后盒子里有7颗糖果
“`

“`cpp
#include
using namespace std;

int main() {
int candies = 5; // 糖果盒子里最开始有5颗糖果
cout << "原本有" << candies << "颗糖果" << endl;

// 使用后缀++,先输出当前值,再加1
candies++; // 放入第一颗糖果
cout << "放入一颗后变成了" << candies << "颗糖果" << endl;

// 使用前缀++,先加1,再输出
++candies; // 放入第二颗糖果
cout << "再放入一颗后变成了" << candies << "颗糖果" << endl;

cout << "最后盒子里有" << candies << "颗糖果" < 💡 自减运算符(–):
>
> – 让数字减少1
> – 可以放在前面或后面
> – 常用于倒计时

🔬 **实验五:消失的星星**
“现在让我们玩个星星消失的游戏!” 我指着黑板上画的星星说,”每次使用–魔法,就会有一颗星星消失不见。”

**问题描述:**
使用自减运算符模拟星星逐个消失的过程。每次使用–,就代表一颗星星消失了。要注意观察前缀–和后缀–的区别。

**预期输出:**

“`
天上有10颗星星
用后缀–:现在还有9颗星星(输出10后减1)
用前缀–:现在还有8颗星星(先减1后输出8)
最后剩下8颗星星
“`

“`cpp
#include
using namespace std;

int main() {
int stars = 10; // 开始时有10颗星星
cout << "天上有" << stars << "颗星星" << endl;

// 使用后缀–,先输出,再减1
cout << "用后缀–:现在还有" << stars– << "颗星星(输出"
<< stars + 1 << "后减1)" << endl;

// 使用前缀–,先减1,再输出
cout << "用前缀–:现在还有" << –stars << "颗星星(先减1后输出"
<< stars << ")" << endl;

cout << "最后剩下" << stars << "颗星星" < 💡 前缀和后缀的区别:
>
> – 前缀形式(++n):先加1,再使用
> – 后缀形式(n++):先使用,再加1
> – 单独使用时,两种形式效果相同
> – 在表达式中使用时会有区别

🔬 **实验六:魔法时机的秘密**
“让我们通过一个有趣的实验,来看看这两种魔法的区别吧!”

“`cpp
#include
using namespace std;

int main() {
int n = 5; // 初始值是5

cout << "实验前:n = " << n << endl;

// 使用前缀形式
cout << "使用++n的结果:" << ++n << endl; // 先加1再输出
cout << "此时n的值:" << n << endl;

n = 5; // 重置为初始值

// 使用后缀形式
cout << "使用n++的结果:" << n++ << endl; // 先输出再加1
cout << "此时n的值:" << n << endl;

return 0;
}
“`

**预期输出:**

“`
实验前:n = 5
使用++n的结果:6
此时n的值:6
使用n++的结果:5
此时n的值:6
“`

"看到区别了吗?" 我指着黑板上的结果说,"这就像是两个不同的魔法师:

– 前缀魔法师(++n):先施法改变数字再告诉我们结果
– 后缀魔法师(n++):先告诉我们原来的数字,再偷偷施法改变它"

小明举手说:"哦!我明白了!就像是吃糖果的时候:

– 前缀就是先把糖果放进嘴里,再说'我吃了一颗糖'
– 后缀就是先说'我要吃一颗糖',再把糖果放进嘴里"

"说得太对了!" 我为小明的理解鼓掌。

### 本节回顾

📌 我们学会了:

– 区分前缀和后缀形式
– 理解两种形式的执行时机
– 在表达式中正确使用前缀和后缀

## 趣味实验时间

"小朋友们,让我们今天学到的知识来做些有趣的实验吧!" 我兴奋地说道。

🔬 **实验七:小小图书管理员**
**预期输出:**

“`
图书馆现有图书:100本
借出2本后剩余:98本
还回1本后剩余:99本
“`

“`cpp
#include
using namespace std;

int main() {
int books = 100; // 初始图书数量
cout << "图书馆现有图书:" << books << "本" << endl;

// 模拟借出两本书的过程
books–; // 第一个同学借走一本
books–; // 第二个同学借走一本
cout << "借出2本后剩余:" << books << "本" << endl;

// 模拟归还一本书
++books; // 有同学还回一本书
cout << "还回1本后剩余:" << books << "本" << endl;

return 0;
}
“`

🔬 **实验八:小小售票员**
"让我们来玩一个售票员的游戏!" 我拿出一叠彩色的门票,"想象你是游乐园的售票员,要帮助游客买票。"

**问题描述:**
你是游乐园的售票员,需要记录剩余票数。使用自减运算记录售出票数,并在票数不足时提醒补票。

**预期输出:**

“`
当前剩余票数:5
售出一张票,还剩4张
售出一张票,还剩3张
售出一张票,还剩2张
注意:票快卖完了,请及时补票!
售出一张票,还剩1张
注意:票快卖完了,请及时补票!
售出一票,还剩0张
票已售罄!
“`

“`cpp
#include
using namespace std;

int main() {
int tickets = 5; // 初始票数设置为5张
cout << "当前剩余票数:" << tickets < 0) { // 当还有票时继续售票
// 使用前缀–,这样输出时就是减去1后的结果
cout << "售出一张票,还剩" << –tickets << "张" << endl;

// 当票数小于等于2张时,提醒补票
if(tickets <= 2) {
cout << "注意:票快卖完了,请及时补票!" << endl;
}
}

cout << "票已售罄!" << endl;
return 0;
}
“`

🔬 **实验九:小小计算器**
"让我们做一个简单的计算器,帮助小明完成数学作业!" 我笑着说,"这个计算器不仅要会算,还要很聪明,能处理各种特殊情况。"

**问题描述:**
编写一个程序,让用户输入两个数字,然后显示它们的和、差、积、商。要注意:

1. 处理输入错误的情况
2. 防止除数为0
3. 给出友好的提示信息

**预期输出:**

“`
欢迎使用小小计算器!
请输入第一个数字:10
请输入第二个数字:5
— 计算结果 —
10 + 5 = 15
10 – 5 = 5
10 * 5 = 50
10 / 5 = 2

— 特殊情况处理 —
请输入第一个数字:abc
输入有误,请输入正确的数字!

请输入第一个数字:10
请输入第二个数字:0
10 + 0 = 10
10 – 0 = 10
10 * 0 = 0
除数不能为0!
“`

“`cpp
#include
using namespace std;

int main() {
int num1, num2;
cout << "欢迎使用小小计算器!" << endl;

// 循环直到获得有效输入
while(true) {
cout <> num1;
cout <> num2;

// 检查输入是否有效
if(cin.fail()) {
cout << "输入有误,请输入正确的数字!" << endl;
cin.clear(); // 清除错误状态
cin.ignore(1000, '\n'); // 清空输入缓冲区
continue; // 重新开始循环
}

// 输出计算结果
cout << "— 计算结果 —" << endl;
cout << num1 << " + " << num2 << " = " << num1 + num2 << endl;
cout << num1 << " – " << num2 << " = " << num1 – num2 << endl;
cout << num1 << " * " << num2 << " = " << num1 * num2 << endl;

// 检查除数是否为0
if(num2 != 0) {
cout << num1 << " / " << num2 << " = " << num1 / num2 << endl;
} else {
cout << "除数不能为0!" << endl;
}

break; // 计算完成,退出循环
}

return 0;
}
“`

## 🤔 思考题

"小朋友们,让我们一起来思考一下今天学到的知识吧!" 我笑着说道。

1. 如果我们想要输入一个人的姓名和年龄,应该如何设计程序呢?试着写出来看看。

2. ++n 和 n++ 的结果有什么不同?请设计一个小实验来验证你的想法。

3. 如果要制作一个简单的计算器,让用户输入两个数字,你会如何设计程序?需要注意什么?

4. 想一想,为什么我们在使用scanf时需要加上&符号,而cin不需要呢?