备战大晨7月 GESP C++ 1级(三):分支结构,拿下 5.3 电影票

备战大晨7月 GESP C++ 1级(三):分支结构,拿下 5.3 电影票

前两篇(一)(二)打完地基:变量、cin、顺序结构都熟了。这一篇加一个关键的”转弯”——分支结构 if,并且直接拿下大晨目前学到的进度点:《一本通•编程启蒙C++版》3020练 5.3 电影票

为什么需要”分支”

顺序结构是”一路直走”,但现实问题经常是:满足条件走 A,不满足走 B

比如电影票:买得多有没有优惠?年龄够不够免票?这种”看情况”的逻辑,C++ 用 if 来表达。

if 的基本长相

1
2
3
4
5
if (条件) {
// 条件成立时执行
} else {
// 条件不成立时执行
}

大晨第一反应是:”这不就是如果……否则……嘛,和说话一样!” 对,if 就是把日常的判断翻译成代码

关系运算:怎么表达”大于/等于”

if 括号里放的是”条件”,靠关系运算符拼出来:

运算符 意思 例子
> 大于 age > 18
< 小于 price < 50
>= 大于等于 score >= 60
<= 小于等于 cnt <= 0
== 等于 a == b
!= 不等于 a != b

⚠️ 陪跑重点坑:判断相等是 ==(两个等号),不是 =(一个等号是赋值)。大晨第一次写 if (a = 5) 编译器没报错但逻辑全错, debug 了十分钟。这种坑早点踩,考试就不踩。

落地:5.3 电影票(实战)

书里 3020练 5.3 电影票,常见题意是这类(具体数字按书上的来,这里用典型版本讲思路):

电影票单价 p 元,大晨带了 n 个人去看。如果总人数达到某个门槛(比如满 10 人)打 9 折,否则不打折。求总花费。

思路拆解:

  1. 读入人数 n 和单价 p
  2. 先算原价 n * p
  3. if 判断人够不够多,够了就乘 0.9(注意类型!);
  4. 输出结果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;

int main() {
int n; // 人数
double p; // 单价(用 double 防小数)
cin >> n >> p;

double total = n * p; // 原价
if (n >= 10) { // 满 10 人优惠
total = total * 0.9; // 打 9 折
}
// 不满 10 人不打折,total 保持原价

cout << total << endl;
return 0;
}

大晨跑了一遍:9 个人原价,10 个人立刻便宜一截,他乐了:”原来电影院的数学题是这么算的。”

书上那道”电影票”可能细节不同(比如儿童免票、会员价),但骨架永远是:读入 → 算原价 → if 判断优惠 → 输出。换数字不换逻辑,这就是 GESP 一级分支题的套路。

再加一点:逻辑运算

有时候条件不止一个,比如”年满 18 并且 是学生”才优惠,用 &&(并且);”会员 或者 满 10 人”优惠,用 ||(或者);”不是会员”用 !(取反)。

1
2
if (age >= 18 && isStudent) { ... }   // 并且
if (isVip || n >= 10) { ... } // 或者

这块是 GESP 一级的进阶考点,先认识符号,后面刷题再熟。

小结(三)

起步篇(三)三件事:学会 if/else 分支、搞懂 === 的区别、用分支结构拿下 5.3 电影票。

到这篇为止,大晨已经把顺序 + 分支这两块 GESP 一级最核心的逻辑走通了。接下来就是循环(下个阶段),以及拿真题刷题巩固。

起步三篇到此收尾。后面我会按大晨学循环、刷真题的节奏继续更新这个系列,争取 9 月 GESP 一级稳稳拿下心心念念的路标。

本系列按《一本通•编程启蒙C++版》进度记录,当前学到 3020练 5.3 电影票。陪学经验仅代表我们家庭实践,不构成培训承诺。