### 3.2.1 神奇的++魔法
“小朋友们,现在我要教你们一个特别神奇的魔法!” 我神秘地从口袋里拿出一盒糖果,”看这个魔法:++”
“假设这盒糖果里有5颗糖,如果我用++魔法,就会神奇地变成6颗!就像变魔术一样!”
小朋友们都惊讶地睁大了眼睛。
{.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不需要呢?