# 编程基础

> CIE A-Level 计算机科学 · 9618
> 来源: https://www.owlsprep.com/zh/study/cie-9618-u11-programming-fundamentals/

本子主题介绍了CIE 9618 A-Level所有编程的核心术语、结构和基础关键概念。你将学习试卷1和试卷2中经常考察的核心区分点。

**先修:** 基础逻辑推理和问题解决能力

## 学习目标

- 区分编译器和解释器
- 识别三种核心结构化编程结构
- 区分语法错误和语义（逻辑）错误
- 比较命令式和声明式编程范式
- 解答考试中关于核心编程概念的常见选择题和简答题

## 核心翻译器术语

所有高级语言代码都必须转换为计算机可以执行的机器码。CIE 9618考试中最常考察的两种翻译器是编译器和解释器，二者的区别是高频考点。

**编译器** — 一次性处理完整源程序，生成可独立后续运行的独立可执行机器码文件的翻译器。

*例:* 用于构建桌面生产软件的C语言编译器。

**解释器** — 在执行过程中逐行处理源代码，一次转换一行，不会生成永久可执行文件的翻译器。

*例:* 一边输入一边运行代码的在线Python编辑器。

> **tip**
>
> CIE阅卷官始终要求你明确转换发生时机的核心区别：编译器在执行*之前*转换，解释器在执行*过程中*转换。

**例题:** 说明对于商业软件，使用编译器比解释器的一个优势。

1. 记住编译器在任何执行开始前就一次性完成了转换。
2. 编译器生成的可执行文件可以直接在CPU上运行，不需要额外转换。
3. 写出答案：编译后的软件比解释型软件运行更快，因为转换只发生一次，而不是每次启动程序都要转换。

## 核心结构化编程结构

所有结构化程序都仅由三种核心控制结构构建，无论使用哪种编程语言。结构化编程避免了混乱的非结构化跳转（如`goto`语句），让代码更易阅读和调试。

1. **顺序结构**: 代码严格按照编写顺序逐行执行。
2. **选择结构**: 程序根据布尔条件在不同代码块之间做出选择（例如`if`/`else`、`switch`语句）。
3. **迭代（循环）**: 一个代码块被重复执行多次（也称为循环，例如`for`和`while`循环）。

**例题:** 以下伪代码展示了哪种核心结构？
```
FOR count FROM 1 TO 10
  OUTPUT count * count
NEXT count
```

1. 检查代码是否逐行运行，没有选择或重复：那是顺序结构，所以本题不是这种情况。
2. 检查代码是否根据条件选择代码路径：那是选择结构，本题没有这种情况。
3. 检查代码是否多次重复一个代码块：`FOR`循环将输出行重复了10次。
4. 结论：这是迭代的例子。

## 语法错误 vs 语义（逻辑）错误

考试中非常常见的问题要求你区分代码中两大类错误。二者的区别在选择题和简答题中反复考察。

**语法错误** — 违反编程语言语法规则的错误。翻译器无法处理该代码，因此程序根本无法运行。

**逻辑（语义）错误** — 代码遵循所有语言规则（因此没有语法错误）可以运行，但因为程序底层逻辑错误，产生了错误输出的错误。

**例题:** 以下代码的目的是如果输入数字大于零则输出`Positive`，否则输出`Non-positive`。代码包含哪种类型的错误？
```
INPUT number
IF number < 0 THEN
  OUTPUT "Positive"
ELSE
  OUTPUT "Non-positive"
ENDIF
```

1. 首先检查是否违反语法：所有关键字拼写正确，`IF`块格式正确，因此代码可以运行。
2. 用样例输入测试：输入`5`（正数），条件`5 < 0`为假，因此代码输出`Non-positive`，这是错误的。
3. 代码可以运行，但产生错误结果，因此这是逻辑（语义）错误。

## 编程范式简介

编程范式是编程的风格或方法。CIE 9618要求你区分两种最常见的范式：命令式（过程式）和声明式。

- **命令式**: 代码描述*如何*解决问题，是一系列改变程序状态的步骤。Python、Java、C等大多数通用语言都是命令式的。
- **声明式**: 代码描述你想要*什么*结果，而不是如何得到结果。解释器会推导出生成结果的步骤。SQL和HTML是声明式语言的常见例子。

**例题:** 将以下代码分类为命令式还是声明式：`SELECT product FROM stock WHERE price > 100;`

1. 检查代码描述的内容：它说明我们想要价格超过100的产品名称，没有解释如何在库存表中搜索这些产品。
2. 记住声明式代码描述需要什么结果，而不是如何得到结果。
3. 结论：这是声明式代码的例子。

## 常见错误

- **错误做法:** 认为解释器会生成可执行机器码文件。
  - 原因: 这是本知识点最常见的错误，阅卷官明确考察这个区分点。
  - 正确做法: 只有编译器会生成独立的可执行机器码；解释器在执行过程中逐行转换，不会保存永久可执行文件。
- **错误做法:** 将固定命名值称为变量。
  - 原因: 变量的定义要求它能够在执行过程中改变值，固定值是常量。
  - 正确做法: 仅将变量这个术语用于可变命名存储；固定值称为常量。
- **错误做法:** 认为所有运行时错误都是语法错误。
  - 原因: 学生经常将所有终止执行的错误归为一类，但CIE按错误原因区分类型。
  - 正确做法: 语法错误由违反语言规则导致；运行时错误（如除以零）发生在符合语法的代码执行过程中。
- **错误做法:** 在分类题中混淆选择结构和迭代结构。
  - 原因: 学生经常在简答题回答中混淆这两种结构。
  - 正确做法: 选择结构 = 在路径之间选择，迭代 = 重复执行代码块。
- **错误做法:** 认为一种语言只能属于一种范式。
  - 原因: 许多现代语言支持多种范式，因此分类取决于代码的编写方式。
  - 正确做法: 根据给出的代码示例分类：逐步执行的Python程序是命令式的，即使Python支持其他范式。

## 速查表

| 术语 | 核心定义 |
| --- | --- |
| 编译器 | 一次性转换完整源代码，生成可执行文件 |
| 解释器 | 执行过程中逐行转换 |
| 变量 | 已命名的可变内存存储 |
| 常量 | 已命名的固定内存存储 |
| 语法错误 | 违反规则，阻止程序运行 |
| 逻辑错误 | 程序可运行，输出错误结果 |
| 顺序结构 | 代码按编写顺序执行 |
| 选择结构 | 根据条件选择代码块 |
| 迭代 | 多次重复执行代码块 |
| 命令式 | 告诉计算机*如何*解决问题 |
| 声明式 | 告诉计算机需要*什么*结果 |

## 下一步

编程基础是CIE 9618所有编程工作的基石。你在这里学到的每个概念都会在你编写代码、调试问题和解答考试题时反复应用。编译器vs解释器、语法vs逻辑错误这些核心区分点是试卷1选择题的常规考点，因此在继续学习前请务必记住这些定义。接下来，你将在这些基础之上学习数据类型、更高级的控制结构和调试技术，这些都会用于你的实践编程工作。

- [控制流结构](https://www.owlsprep.com/zh/study/cie-9618-u11-control-flow-structures/)
- [过程、函数与参数](https://www.owlsprep.com/zh/study/cie-9618-u11-procedures-functions-and-parameters/)
- [文件处理](https://www.owlsprep.com/zh/study/cie-9618-u11-file-handling/)

---

来自 [OwlsPrep](https://www.owlsprep.com) —— A-Level / IB / AP / IGCSE 免费学习指南，依据官方考纲编写。原页面：https://www.owlsprep.com/zh/study/cie-9618-u11-programming-fundamentals/
