← 返回课程路线 第五阶段 · S5-03 · 60 分钟

崩溃之前,先认出这五个陷阱

这一课只练一件事:看到一段快出错的代码,先说出它属于哪一类语言层面的失分点,再选出正确修法。五类陷阱是、、、与混淆、以及没删干净的调试输出。必会:能识别这五类陷阱;能为大乘积选择;能检查数组访问是不是在 0 到 n-1 之内。最小示例:`int total = 50000 * 50000;` 编译能过,但 total 变成负数——这是溢出,不是越界。边界是范围表和精确位数是拓展,现在只要求先看规模。建议掌握:提交前删掉之外的调试文字并再测一遍。拓展:把五类陷阱整理成赛前检查清单,只是习惯,不是新语法。这里不会在浏览器里运行 C++。

必会:识别五类陷阱;选对 long long;检查数组范围 建议掌握:删干净调试输出并回归测试 拓展:整理成赛前检查清单

任务 1:诊断两张故障卡

先判断第一张故障卡是不是,再判断第二张是不是。点不认识的词可看基础解释。

必会:能说出为什么 `int` 乘积会变负数;能说出合法下标为什么是 0 到 n-1。这里不会在浏览器里运行 C++,只练习判断和选择。

常见的竞赛环境里 int 是 32 位。`int total = 50000 * 50000;` 编译能过,但 total 变成了负数,这是为什么?溢出 · 必会

数组 a 长度是 n,写成 `for (int i = 0; i <= n; i++) a[i] = i;`,跑到最后一次就崩溃,这是为什么?数组越界 · 必会