测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看
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 重做净胜球、不上课人数、买铅笔找零三道练习。