B17
输入案例与交换两个变量
引入
章前总览 继续用 IPO 解题:先练“总分减语文得数学”;再学程序里超常见的操作——交换两个变量的值(像两个杯子对倒饮料,通常需要一个空杯)。
本节路线:
- 案例:输入总分与语文,求数学
- 交换法1:借助临时变量 t
- 交换法2:加减法(了解即可)
1 案例:求数学成绩(有输入)
输入 s(总分)和 a(语文),输出数学成绩 b = s − a。
参考代码
#include <iostream>
using namespace std;
int main() {
int a, b, s;
cin >> s >> a;
b = s - a;
cout << b << endl;
return 0;
}
- 样例:188 98 → 90;190 92 → 98。
- 注意输入顺序:先总分,后语文,和题目描述一致。
2 交换两个变量:临时变量法(推荐)
红杯可乐、黄杯果汁,对倒需要空杯。程序里空杯就是临时变量 t / tmp。
三步交换
t = u;先把 u 存起来(否则一会儿就被覆盖)。u = v;把 v 放进 u。v = t;把原来的 u 放进 v。
完整程序
#include <iostream>
using namespace std;
int main() {
int u, v;
cin >> u >> v;
int t;
t = u;
u = v;
v = t;
cout << u << " " << v << endl;
return 0;
}
- 样例:输入 5 7,输出 7 5。
- 若写成
u=v; v=u;两个都会变成原来的 v,交换失败。
补充说明
不推荐
u = v;
v = u; // 此时 u 已是原 v,原 u 丢了
问题:原 u 被覆盖,找不回来。
推荐写法
t = u;
u = v;
v = t;
优点:步骤清晰,考试最常用。
3 拓展:不用临时变量的加减交换
了解即可;初学优先用临时变量,更不容易错。
写法
u = u + v;
v = u - v; // 得到原来的 u
u = u - v; // 得到原来的 v
- 注意整数溢出风险;也有人用异或,一级不必纠结。
- 思考题:若改成乘除,还要小心除零与溢出,一般不推荐。
小结
两种交换都要会认;动手写优先临时变量。
推荐:t=u; u=v; v=t;
了解:u=u+v; v=u-v; u=u-v;
✓
里程碑达成:
下一节用 cin 重做净胜球、不上课人数、买铅笔找零三道练习。