返回 课程

模板 信奥AC之路(第一级)

0% 完成
0/0 步骤
  1. 第一课 开发环境与基础输出
    4 主题|小节
  2. 第二课 算数运算符
    6 主题|小节
  3. 第三课 输入与运算
    3 主题|小节
  4. 第四课 数值操作
    4 主题|小节
  5. 第五课 表达式与运算符
    3 主题|小节
  6. 第六课 三目运算与双分支(缺导语+本课目标)
    2 主题|小节
  7. 第七课 多分支结构(缺导语+本课目标)
    1 主题|小节
  8. 第八课 多if语句
    1 主题|小节
  9. 第九课 三种分支结构的比较
    1 主题|小节
  10. 第十课 巩固学习分支结构
    1 主题|小节
  11. 第十一课 switch与复合语句
    3 主题|小节
  12. 第十二课 while循环
    2 主题|小节
  13. 第十三课 while循环的简单条件输出
    1 主题|小节
  14. 第十四课 while循环的输入序列处理
    1 主题|小节
  15. 第十五课 while循环的复杂条件输出
    2 主题|小节
  16. 第十六课 while循环与数据统计
    1 主题|小节
  17. 第十七课 for循环结构
    3 主题|小节
  18. 第十八课 for循环的输入序列处理)
    1 主题|小节
  19. 第十九课 深入探索for循环
    2 主题|小节
  20. 第二十课 三种循环的对比
    2 主题|小节
  21. 第二十一课 程序调试(一)
    3 主题|小节
  22. 第二十二课 调试工具的使用
    2 主题|小节
  23. 第二十三课 综合复习
    2 主题|小节
  24. 第二十四课 学习评估
    1 主题|小节
课 21, 主题|小节 1
进行中

21.1 错误类型分析

2025年4月20日
课 进展
0% 完成

### 21.1.1 语法错误的识别

“小朋友们,写作文时会不会有错别字啊?” 我笑着问道,”比如把’学习’写成’学习’,把’高兴’写成’高心’。编程时也会有类似的错误,我们叫它’语法错误’。”

![21-1语法错误对比图](/wp-content/uploads/2025/01/21-1语法错误对比图.jpg){.alignnone}

🔬 **实验一:寻找错误**
“让我们来看看下面这段程序中藏着哪些错误:”

“`cpp
#include
using namespace std

int main() {
int age = 12 // 错误1:缺少分号
cout < "我的年龄是:" < age; // 错误2:输出符号写错了

if (age == 12 // 错误3:缺少右括号
{
cout << "我上六年级了!" << endl
} // 错误4:缺少分号

return 0
} // 错误5:缺少分号
“`

"就像找错别字一样,让我们一起来找出所有的错误:" 我拿起红笔,在黑板上标注起来。

1. 第1行错误:

“`cpp
using namespace std // 错误:缺少分号
using namespace std; // 正确:加上分号
“`

2. 第4行错误:

“`cpp
int age = 12 // 错误:缺少分号
int age = 12; // 正确:加上分号
“`

3. 第5行错误:

“`cpp
cout < "我的年龄是:" < age; // 错误:输出符号写错
cout << "我的年龄是:" << age; // 正确:使用<<
“`

4. 第7-10行错误:

“`cpp
if (age == 12 // 错误:结构不完整
{
cout << "我上六年级了!" << endl
}

if (age == 12) { // 正确:括号完整,语句加分号
cout << "我上六年级了!" < 💡 常见语法错误总结:
>
> 1. 忘记写分号(;)
> – 语句结束要加分号
> – 但花括号后不加分号
>
> 2. 括号使用错误
> – 小括号():用于条件判断
> – 大括号{}:用于代码块
> – 括号必须成对出现
>
> 3. 符号写错
> – 输出用< – 输入用>>
> – 判断相等用==
>
> 4. 拼写错误
> – cout不能写成Count
> – endl不能写成end
> – 注意大小写

![21-1错误语法速查表](/wp-content/uploads/2025/01/21-1错误语法速查表.jpg){.alignnone}

### 21.1.2 运行错误的判断

“小朋友们,” 我拿出一个计算器,”假设我们让计算器算10除以0,会发生什么?”

![21-1计算器显示error](/wp-content/uploads/2025/01/21-1计算器显示error.jpg){.alignnone}

“计算器会显示错误!这就是’运行错误’—程序能编译通过,但运行时会出错。”

🔬 **实验二:发现运行错误**

“`cpp
#include
using namespace std;

int main() {
int a = 10;
int b = 0;
cout << "准备做除法…" << endl;

int c = a / b; // 运行到这里会出错!

cout << "结果是:" << c << endl;
return 0;
}
“`

"这个程序看起来没有语法错误,但运行时会出错,因为任何数都不能除以0!"

我们再看一个常见的运行错误:

🔬 **实验三:输入类型不匹配**

“`cpp
#include
using namespace std;

int main() {
int age;
cout <> age; // 如果输入”abc”而不是数字,会出错

cout << "明年你" << age + 1 << "岁" < 💡 常见运行错误:
>
> 1. 除以零
> 2. 输入类型不匹配
> 3. 使用未赋值的变量

### 21.1.3 逻辑错误的发现

“最难发现的就是逻辑错误了,” 我在黑板上写道,”就像做数学题时,计算步骤都对,但是理解错了题意,所以答案是错的。”

![21-1一个数学题的解答过程](/wp-content/uploads/2025/01/21-1一个数学题的解答过程.jpg){.alignnone}

🔬 **实验四:找出逻辑错误**

“`cpp
#include
using namespace std;

int main() {
// 目标:计算1到5的和
int sum = 0;

// 错误:i从0开始,到4结束
for(int i = 0; i < 5; i++) {
sum = sum + i; // 0+1+2+3+4=10
}

cout << "1到5的和是:" << sum << endl;
// 输出10,但正确答案应该是15

return 0;
}
“`

让我们一步步分析错误:

1. 程序想要计算:1 + 2 + 3 + 4 + 5 = 15
2. 但实际计算了:0 + 1 + 2 + 3 + 4 = 10
3. 错误原因:
– 循环从0开始而不是1
– 循环到4结束而不是5

🔬 **实验五:修正逻辑错误**

“`cpp
#include
using namespace std;

int main() {
int sum = 0;

// 修正:i从1开始,到5结束
for(int i = 1; i <= 5; i++) {
cout << "正在加上:" << i << endl; // 输出中间步骤
sum = sum + i;
}

cout << "1到5的和是:" << sum < 💡 发现逻辑错误的方法:
>
> 1. 在纸上演算程序的执行过程
> 2. 输出中间计算步骤
> 3. 检查循环的起止条件
> 4. 验证程序是否满足题目要求

### 错误分析口诀

“`
查错口诀:
语法错误编译查,
分号括号细检查。
运行错误要当心,
除零数据需谨慎。
逻辑错误最难找,
输出调试记心头。

改错口诀:
发现错误莫着急,
一步一步找原因。
语法按规范改正它,
运行按逻辑想原委。
逻辑错误最费神,
草稿演算记得清。
“`