欢迎来到算法表示的世界!

你好,未来的计算机科学家们!在上一章中,我们了解到算法其实就是解决问题的一系列指令(就像一份详细的食谱!)。
但是,我们该如何写下这些指令,以便人类程序员或计算机本身能够完美理解呢?
这正是本章的主题!我们将探讨表示算法的两种主要方式:伪代码(Pseudocode)和流程图(Flowcharts)。

为什么这很重要? 如果你能清晰地表示出一个算法,你就已经成功了一半,离编写出无错误的计算机代码不远了!


1. 结构化英语(伪代码)

什么是伪代码?

伪代码(Pseudocode,发音为“SUE-doh-code”)意为“虚构代码”。它是一种使用日常英语词汇和标准编程关键字混合编写算法的方法。
不是真正的编程语言,但它遵循了编程语言的逻辑结构。

伪代码的目标是既能让人们轻松理解,又足够规范,从而让程序员可以将其直接翻译成 Python、Java 或任何其他语言。

优秀伪代码的关键特征:
  • 使用常见的编程术语(例如:INPUT, OUTPUT, IF, WHILE)。
  • 使用缩进(空格)来展示结构和代码块。
  • 必须没有歧义(只有一种可能的含义)。

记忆小贴士: 可以把伪代码看作是你实际程序的草稿蓝图

算法的三种基本结构

所有的算法,无论多么复杂,都是由三种基本结构构建而成的。你必须掌握如何在伪代码中表示这三种结构。

A. 顺序结构 (Sequence)

顺序结构是最基本的结构。它仅仅意味着按照指令书写的顺序,一条接一条地执行。
例子: 泡茶。烧开水,把茶包放进杯子,倒入热水,加入牛奶。

伪代码示例(顺序结构):

1. INPUT student_name
2. INPUT score_1
3. INPUT score_2
4. total_score = score_1 + score_2
5. OUTPUT total_score

B. 选择结构 (Selection)

选择结构(或称分支结构)允许算法根据某个条件(一个真/假问题)做出决策。这通常使用 IF...THEN...ELSE 结构来实现。

类比: 当你穿衣服时,你就在使用选择结构:
IF (正在下雨) THEN 穿雨衣,ELSE 穿轻便夹克。

伪代码示例(选择结构):

INPUT age
IF age >= 18 THEN
    OUTPUT "你符合投票资格"
ELSE
    OUTPUT "你还不符合资格"
ENDIF

重要提示: 请始终记住使用 ENDIF 来闭合你的结构。缩进对于代码的可读性至关重要!

C. 循环结构 (Iteration)

循环结构意味着重复执行一组指令,直到满足特定条件为止。
这可以避免你重复编写相同的代码。

你在 GCSE 中会遇到的两种主要循环类型是:
1. 计数循环 (FOR 循环): 重复固定的次数。
2. 条件循环 (WHILE 循环): 只要条件为 TRUE,就一直重复。

伪代码示例(WHILE 循环 - 条件控制):

password = ""
WHILE password != "secret"
    INPUT password
ENDWHILE
OUTPUT "访问已授权"

伪代码示例(FOR 循环 - 计数控制):

FOR counter = 1 TO 5
    OUTPUT "你好!"
NEXT counter


快速回顾:伪代码关键词

  • INPUT/OUTPUT: 输入数据,输出结果。
  • IF/THEN/ELSE/ENDIF: 选择(决策)。
  • WHILE/ENDWHILE: 基于条件进行循环。
  • FOR/TO/NEXT: 重复固定次数。


2. 流程图

什么是流程图?

流程图是一种使用标准形状和连接箭头来直观表示算法的方法。与阅读文本相比,流程图通常更容易让你看清结构的逻辑流向(各步骤是如何连接在一起的)。

你知道吗? 流程图早在几十年前、在现代编程语言出现之前,就被用于规划业务流程和逻辑了!

必要的流程图符号

你必须了解以下五个核心符号的作用和形状:

1. 终端框 (开始/结束)

形状: 椭圆形或圆角矩形。
作用: 标记算法的开始 (START) 和结束 (STOP)。每个流程图必须有一个 START 和一个 STOP。

2. 处理框 (Process)

形状: 矩形。
作用: 表示更改数据的操作、计算或指令(例如:设置变量、计算总和)。
示例: Total = Price * Quantity

3. 输入/输出框

形状: 平行四边形。
作用: 表示进入系统的数据 (INPUT) 或显示/打印出来的数据 (OUTPUT)。
示例: Input NameOutput Result

4. 判断框 (选择)

形状: 菱形。
作用: 表示必须用 YES/TRUENO/FALSE 回答的条件或问题。这就是选择结构 (IF...THEN...ELSE) 发生的地方。
关键规则: 判断框必须有 一个箭头进入两个箭头离开(一个指向 YES,一个指向 NO)。

5. 流程线

形状: 箭头。
作用: 连接各形状,并准确显示算法遵循的方向或路径。

流程图形状记忆技巧:
Oval(椭圆)用于结束流程(O 代表 Oval/Out)。
Parallelogram(平行四边形)用于 Putting(输入/输出)数据。
Rectangle(矩形)用于 Routine(常规)计算(处理过程)。
Diamond(菱形)用于做 Decision(决策)。

构建一个简单的流程图(示例)

让我们用流程图来表示“询问分数并检查其是否合格”的顺序结构(包含选择结构)。

(1) 椭圆:START
(2) 向下箭头指向
(3) 平行四边形:Input Score
(4) 向下箭头指向
(5) 菱形:Is Score > 50?
     (a) 标有 'YES' 的箭头指向平行四边形:Output "Pass"
     (b) 标有 'NO' 的箭头指向平行四边形:Output "Fail"
(6) 从 "Pass" 和 "Fail" 引出的箭头汇合指向
(7) 椭圆:STOP

如果一开始画图觉得困难,不要担心。 把重点放在符号及其用途上。如果你连接了错误的形状,逻辑就会中断!例如,永远不要画一条从处理框引出后,在没有经过判断框的情况下直接又回到同一个处理框的箭头,因为那将构成无限循环!


3. 比较两种表示法

伪代码和流程图都是在编写最终代码之前设计算法的绝佳工具。

表示方法 优点 缺点
伪代码
  • 易于直接转换为真实代码。
  • 处理极其复杂的结构和长算法更简单。
  • 比画流程图节省时间。
  • 逻辑流(路径)不如直观的图表那样直接清晰。
  • 仅阅读文本时,有时可能会忽略逻辑错误。
流程图
  • 极佳的逻辑流可视化表示。
  • 易于发现复杂的循环或不合理的顺序。
  • 适合向非程序员解释算法。
  • 对于巨大的算法,图表会变得非常庞大、复杂且难以管理。
  • 准确绘制可能比较耗时。

表示法的关键要点

无论我们用哪种方式表示算法,算法本身并不会改变,改变的只是我们交流它的方式。请确保你选择的方法能清晰展示:
1. 顺序结构: 步骤的固定顺序。
2. 选择结构: 所有的决策点(IF/菱形)。
3. 循环结构: 所有算法发生循环的点(FOR/WHILE/构成循环的菱形)。


持续练习将简单问题转换为伪代码和流程图,你一定能掌握这项核心技能!