B38
案例:计算邮资与买文具
引入
章前总览 两道 GESP 真题:邮资用两个独立单分支;买文具用双分支,且每侧多条输出要用花括号包成语句块。
两道案例:
- 邮资:基础 8 + 超重向上取整×4 + 加急 5
- 文具:够则 Yes 与剩余,否则 No 与缺少
1 案例1:计算邮资
≤1000 克基础费 8 元;超出部分每 500 克加 4 元(不足按 500 计);加急(字符 y)再加 5 元。
思路
- 先
m = 8。 - 若
n > 1000:超重费 =(n-1000+499)/500 * 4(向上取整)。 - 若
c == 'y':再m += 5。 - 两个单分支前后独立,甚至调换顺序结果也对。
- 样例:1200 y → 17。
参考代码
#include <iostream>
using namespace std;
int main() {
int n; // 重量(克)
char c; // y 加急 / n 不加急
cin >> n >> c;
int m = 8;
if (n > 1000)
m += (n - 1000 + 499) / 500 * 4;
if (c == 'y')
m += 5;
cout << m << endl;
return 0;
}
2 案例2:买文具
签字笔 2 元、记事本 5 元、直尺 3 元。输入 x y z q(可多行),判断钱够不够。
输出规则
- 总价
s = x*2 + y*5 + z*3。 - 若
s <= q:第一行 Yes,第二行剩余q-s。 - 否则:第一行 No,第二行缺少
s-q。
参考代码
#include <iostream>
using namespace std;
int main() {
int x, y, z, q;
cin >> x >> y >> z >> q;
int s = x * 2 + y * 5 + z * 3;
if (s <= q) {
cout << "Yes" << endl;
cout << q - s << endl;
} else {
cout << "No" << endl;
cout << s - q << endl;
}
return 0;
}
- 每侧两条
cout,必须用{}组成语句块,否则编译报错。
小结
选单分支还是双分支?
条件不满足时什么都不做 → 单分支 if
条件不满足时要做另一件事 → if…else
✓
里程碑达成:
下一节学习语句块、逗号表达式和条件运算符 ?: 。