C++魔法代码学院:第 15 课——真题大闯关(二):终极模拟考
—— 战胜“沉默的评测机”与毕业典礼
- 课时时长:90 分钟
-
核心目标:
- 全真模拟:体验 GESP 一级完整的考试流程(选择+判断+编程)。
- 规则重塑(重中之重):理解 OJ(在线评测)机制——严禁输出多余提示语(如“请输入”)。
- 规范养成:掌握文件命名、保存格式、代码规范。
- 毕业时刻:建立通过考试的信心。
-
所需教具:
- 打印好的模拟试卷(笔试部分)。
- 模拟考场环境(倒计时钟、安静标识)。
- 毕业证书或奖状。
课程时间表
| 环节 | 时间 | 内容 | 教学隐喻/活动 |
|---|---|---|---|
| 考前 | 10 min | OJ 的沉默法则 | “冷面判官”的故事 |
| 笔试 | 20 min | 单选题(15道) + 判断题(10道) | 极速闯关 |
| 机试 | 40 min | 编程题 (2道真题) | 全封闭模拟考 |
| 复盘 | 15 min | 格式规范与易错点 | “满分代码为什么0分?” |
| 毕业 | 5 min | 总结与颁奖 | 授予“一级魔法师”头衔 |
详细教学流程
1. 考前:OJ 的沉默法则 (10分钟) <-- 观念大逆转
-
情景引入:
- “同学们,以前我们的程序是写给人用的,所以要礼貌地问‘请输入’。”
- “但考试时,批改卷子的不是人,是一个叫 OJ (Online Judge) 的冷面机器判官。”
-
判官的特点:
- 它是“瞎子”:它看不懂“请输入一个数”这种汉字。
- 它是“对比怪”:它手里有一张标准答案纸。它会把你输出的东西和答案逐字对比。
- 惨案演示:
- 标准答案要求输出:
10 - 小明输出了:
答案是:10 - 判官一看:
答!=1,❌ 0分!
- 标准答案要求输出:
-
新规则:
- 沉默是金!不要说话,不要提示,直接读入,直接输出结果。
- 就像间谍接头,对暗号时多说一个字就暴露了。
2. 笔试:极速闯关 (20分钟)
- 内容:GESP 一级真题混编(5道变量题 + 5道运算题 + 5道逻辑题 + 10道判断题)。
- 重点考察:
- 变量命名规则(哪个是错的?
1a,if,float)。 - 表达式计算(
10/3,10%3,true && false)。 - C++ 基础语法(每句话后面要加什么符号?)。
- 变量命名规则(哪个是错的?
3. 机试:全封闭模拟考 (40分钟)
- 氛围营造:全场肃静,禁止讨论,老师扮演监考官。
-
题目 A(基础运算):买文具
- 题目:一支笔 3 元,一个本子 5 元。输入笔的数量
a和本子的数量b,输出总共要多少钱。 - 样例输入:
2 1 - 样例输出:
11
- 题目:一支笔 3 元,一个本子 5 元。输入笔的数量
-
题目 B(逻辑循环):找幸运数
- 题目:输入一个正整数
n。输出 1 到n之间所有能被 3 整除的数。 - 样例输入:
10 - 样例输出:
(注意换行格式)
3 6 9
- 题目:输入一个正整数
4. 复盘:满分代码为什么0分? (15分钟)
-
现场演示(震撼教育):
- 老师把刚才某个同学写的“礼貌代码”投屏到 OJ 评测机(或模拟评测)。
-
代码:
int a, b; cout << "阿姨你好,请输入你要买几支笔: "; // ❌ 致命错误 cin >> a; cout << "请输入你要买几个本子: "; // ❌ 致命错误 cin >> b; cout << "一共需要: " << a*3 + b*5 << "元"; // ❌ "一共需要"和"元"都是多余的 -
评测结果:Wrong Answer (WA) —— 0 分。
-
满分修正:
int a, b; cin >> a >> b; // 沉默地读入 cout << a*3 + b*5; // 沉默地输出数字 cout << endl; // 换行是个好习惯(虽然不换行通常也不扣分,但建议加)
5. 毕业:授予头衔 (5分钟)
-
总结:
- 我们学会了控制变量、指挥循环、做出判断。
- 我们现在已经不是只会玩游戏的小学生,而是能创造规则的初级程序员。
-
仪式:
- 颁发结课证书(或者巧克力勋章)。
- 鼓励大家去参加 GESP 一级考试,那是成为真正“魔法师”的第一步。
附录:GESP 一级考前“救命”清单
(建议打印发给家长和学生,作为考前一晚的复习资料)
- 头文件背熟:
#include <iostream>和using namespace std;一个字母都不能错。 - 分号别漏:每行代码结束都要检查屁股后面有没有
;。 -
输入输出:
cin >>(漏斗进家)cout <<(喇叭向外)
-
千万别说话:题目没让你输出的文字,一个字都别写!
- ❌
cout << "ans=" << ans; - ✅
cout << ans;
- ❌
-
变量要清零:做累加题(求和)时,
int sum = 0;必须写。 - 保存要及时:写完一段代码就按
Ctrl + S,别等电脑死机了哭鼻子。 - 考试心态:遇到不会的别慌,先做下一题,编程题能写多少写多少(骗分技巧:如果实在算不出结果,直接按样例输出有时候也能拿 10% 的测试点分数,比如直接
cout << 11;,当然这是下下策)。
给教练的最后建议
- 关于 IDE:考试通常使用 Dev-C++ 或者 NOI Linux 环境。建议最后这节课确保学生使用的是Dev-C++,并教他们如何新建源文件(Source File)、如何编译运行(F11),而不是只会在在线网页编辑器里写。
-
关于换行:GESP 一级有时候要求输出多个数,中间用空格还是换行?一定要教学生仔细读题。
- “Space separated” ->
cout << i << " "; - “Line separated” ->
cout << i << endl;
- “Space separated” ->
-
未来的路:这只是开始。告诉孩子们,GESP 二级会有更厉害的魔法(数组、循环嵌套、更复杂的逻辑),期待在下一季课程见到他们!