流程图与算法描述 知识点讲解

信息学竞赛(CSP-J/S、NOIP、GESP)高频考点精讲:从基础规则到推演与易错点,配真题例题。学完可一键去 OI伴学在线刷题。

去 OI伴学在线练习 →

本讲学习目标

🎯 先搞清楚它是什么

把「怎么解决这个问题」说给别人听,可以有很多种说法:用嘴描述、画一张图、写一段像代码又不是代码的草稿。算法描述就是这件事的正式说法,最常用的三种方式是:自然语言描述、流程图描述、伪代码描述。

程序流程图(简称流程图):用统一规定的标准符号,描述程序运行具体步骤的图形表示。它是程序设计最根本的依据——一张流程图把「先做什么、再做什么、什么条件下做什么」画得清清楚楚,符号和画法都有约定,谁画出来的意思都一样。

为什么值得单独学一节?因为:

按「认识符号 → 三种描述方式怎么选 → 三种基本结构怎么画 → 完整画一张」的顺序,本讲分四个知识块:

1. 流程图符号——六种标准符号,各画各的形状,不能混用;

2. 三种算法描述方式的取舍——自然语言 / 流程图 / 伪代码,各有优劣,看场景选;

3. 三种基本结构的画法——顺序、分支、循环,所有流程图都由它们搭出来;

4. 完整例子——把同一个算法用三种方式各描述一遍,一一对应着看。

⚠️ 只认识符号还不够:流程图题考的是顺着箭头把流程走一遍,把每走一步变量的值记下来,图读对了,答案自然出来。

🧩 关键规则与结论

六种标准符号(形状是约定,不能换)

流程图符号

符号名称功能记忆点
圆角矩形起止框表示流程的开始或结束一张图里「开始」「结束」各一个
平行四边形输入输出框表示输入输出功能数据进出程序都走它
矩形处理框表示一般的处理功能(计算、赋值)最常见,一个框干一件事
菱形判断框对一个给定条件判断,按条件是否成立决定走哪个分支一定有两个出口:是 / 否
带箭头线流程线表示流程的路径和方向箭头指明「下一步去哪」
小圆圈连接点把画不下的流程接到另一处图太大、跨页时用它对接

三种算法描述方式,各有优劣

描述方式优点缺点适合场景
自然语言通俗易懂,不用学任何记号算法一含判断、循环,或步骤一多,就冗长、容易产生歧义向完全不懂的人解释思路
流程图清晰地展现完整操作过程,方便在工作中检查和修改算法有一套约定符号,绘制过程比较繁琐梳理控制流程、初赛读图题
伪代码结构清晰、代码简单、可读性好;不用拘泥于具体语言的语法限制,书写格式自由,意思表达清楚即可不能直接运行;关键语句一般用英文单词,需要一点约定俗成竞赛中快速打草稿、写题解

伪代码不必编译通过,也不属于任何一种编程语言:表达关键字的语句一般用英文单词(if、while、for、return),其他语句可以用英文句子也可以用中文句子。

三种基本结构的流程图画法

三种基本结构

所有流程图都由三种基本结构搭出来,每种结构都只有一个入口、一个出口:

两个画图细则:

🔍 看一个例子

例 1(循环结构):输入 n,求 1 + 2 + 3 + … + n 的和——三种描述方式各走一遍。

第一步:自然语言描述。

把计数器 i 置为 1,把累加器 s 置为 0。判断 i 是否不超过 n:如果不超过,把 i 加进 s,然后 i 增加 1,回到刚才的判断;如果超过,输出 s,结束。

读一遍就能感觉到:判断和循环一出现,纯文字已经开始绕了。

第二步:流程图描述。

        ┌──────────┐
        │  开 始    │                      ← 起止框
        └────┬─────┘
             ▼
      ┌─────────────┐
      │ 输入 n       │                   ← 输入输出框
      └──────┬──────┘
             ▼
      ┌─────────────┐
      │ i=1, s=0    │                   ← 处理框
      └──────┬──────┘
             ▼
        ◇ i≤n ? ◇──否──→ ┌─────────┐
             │是           │ 输出 s   │──→ ┌──────┐
             ▼             └─────────┘    │ 结 束 │
      ┌─────────────┐                     └──────┘
      │  s = s + i  │  ←┐
      └──────┬──────┘   │  循环体,执行完
             ▼          │  绕回判断框
      ┌─────────────┐   │
      │  i = i + 1 ─┼───┘
      └─────────────┘

菱形判断框两个出口一个标「是」一个标「否」;循环体处理完 i=i+1 后,流程线绕回判断框——这就是当型循环。

第三步:伪代码描述。

读入 n
i ← 1, s ← 0
while i ≤ n:
    s ← s + i
    i ← i + 1
输出 s

第四步:翻译成 C++。

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;              // 输入输出框
    int i = 1, s = 0;      // 处理框:初始化
    while (i <= n) {       // 判断框(当型循环)
        s = s + i;         // 处理框:累加
        i = i + 1;         // 处理框:计数器加一
    }
    cout << s << endl;     // 输出输出框
    return 0;
}

三张「图」逐块对应:伪代码的 while 对应流程图的菱形,s ← s + i 对应一个矩形处理框,cin >> n 对应平行四边形。会读图的人,看见流程图就能模拟出程序输出——初赛「读流程图求输出」的题就是这么做的:拿一张草稿纸,给每个变量开一列,顺着箭头一格一格走,循环几轮就把表填出来。

例 2(分支结构):输入两个整数 a、b,输出其中较大的那个。

流程图:开始 → 输入输出框「输入 a, b」→ 判断框 a ≥ b ? → 「是」出口接输出 a,「否」出口接输出 b → 两路汇合到结束。伪代码:

读入 a, b
if a ≥ b:
    输出 a
else:
    输出 b

注意流程图里两条路是二选一的:走完其中一条,另一条碰都不碰。初赛题最爱在这里做文章——把「是 / 否」的标号对调,模拟时一走反,整道题的输出全错。

🔧 编程题里怎么考、怎么用?

流程图本身不进复赛机考,但它出现在两处实打实的得分点上:

1. CSP-J 初赛与部分省市笔试的「流程图认读」:题目给一张流程图,问「输入某值时输出是多少」或「这个流程图算的是什么」。做法就是上面的填表模拟法,判断框的「是/否」出口千万别走反。

2. 编程题的打草稿方法:拿到一道顺序 / 分支 / 循环结构的入门题(比如下面练单里的「温度转换」「买文具」「手机电量显示」),先别急着写代码——先用三种方式各描述一遍:自然语言说步骤,画一张小流程图定分支和循环,再写成伪代码,最后翻译成 C++。练熟这条链路,写代码时就不会漏初始化、漏输出。

下面两个子模型给出符号细节和三种结构的画法,并配了对应结构的入门题,做完一题就回头看:这道题的流程图长什么样?

🪤 常见错误

1. 判断框没标「是 / 否」两个出口:判断框必须有两个出口且各标明走向,只画一条线、或两条线都不标,读图的人不知道条件成立走哪条——考试里也最容易顺着箭头走错分支。

2. 符号混用:起止框画成矩形、输入输出画成矩形、判断画成矩形——形状是约定,混用等于说错话。最常犯的是把「输出 s」画成处理框:数据从程序里出来,要用平行四边形。

3. 流程线忘画箭头:没有箭头就分不清「往回绕(循环)」还是「往下走(顺序)」,循环结构直接失效。

4. 循环画成死循环:循环体执行完忘了让流程线绕回判断框,或绕回了但判断条件永远成立——检查每张循环流程图,确认存在一条「能走出循环」的路(如 i = i + 1 让 i ≤ n 终有一天不成立)。

5. 一个框塞好几件事:i=1, s=0 写在一个框里没问题,但把「输入、计算、输出」全塞进一个大矩形,流程图就失去了「一步一步看得清」的意义。一个框尽量只做一件事。

✅ 自测

1. 六种流程图符号各自的形状是什么?「输入一个数」和「计算 a+b」分别该用哪种框?

2. 自然语言、流程图、伪代码三种描述方式各有一个主要缺点,分别是什么?写题解打草稿时一般选哪种?

3. 当型循环和直到型循环的判断时机有什么不同?为什么说「先判断」的循环可能一遍都不执行循环体?

4. 画出「输入两个数,输出其中较大的那个」的流程图:用了几个判断框、几条流程线?

5. 下面这段伪代码对应的是哪种基本结构?它有什么问题?

```

i ← 1

while i ≤ 10:

输出 i

```

(提示:顺着流程走一遍,程序会停吗?)

① 流程图符号与三种描述方式

六种符号,一个都不能画错

符号名称功能常见错画
圆角矩形起止框流程的开始 / 结束画成直角矩形
平行四边形输入输出框数据的输入、输出画成矩形(和处理框混淆)
矩形处理框计算、赋值等一般处理把输入输出塞进来
菱形判断框按条件是否成立选路,两个出口标「是 / 否」少画一个出口、不标是/否
带箭头线流程线流程的路径和方向只画线忘画箭头
小圆圈连接点图太大跨页时,把断开的两处接起来和别的符号混用

记忆口诀:圆头圆尾、菱形做主、方框干活、斜框进出——起止框两头圆,菱形负责判断,矩形负责计算,斜的(平行四边形)负责数据进出。

同一个算法,三种说法

以「输入三角形三边 a、b、c,输出是否构成三角形」(条件:任意两边之和大于第三边)为例:

自然语言: 先读入三个数。如果 a 加 b 大于 c,并且 a 加 c 大于 b,并且 b 加 c 大于 a,三个条件都成立就输出「能」,否则输出「不能」。三个条件缺一不可,说的时候容易漏说、说歧义——这是自然语言的通病:判断一多就冗长、易歧义。

流程图: 一个输入输出框 → 一个判断框(条件 a+b>c 且 a+c>b 且 b+c>a,两个出口)→ 「是」出口接一个输出「能」的输入输出框,「否」出口接输出「不能」,两路汇合到结束。整体过程一图看清,也方便检查和修改,代价是画起来繁琐。

伪代码:

读入 a, b, c
if a+b>c 且 a+c>b 且 b+c>a:
    输出 "能"
else:
    输出 "不能"

结构清晰、格式自由,不拘泥任何一种编程语言的语法;表达关键字的语句(if / else / while)一般用英文单词,其余可以用中文句子。竞赛里写题解、打草稿,伪代码最常用;真正落成代码前,先用它把逻辑走通。

怎么选?

场景推荐
向完全没学过编程的人解释自然语言
想看清分支与循环的走向、初赛读图题流程图
写题解草稿、理思路伪代码

练手题

下面三道题都是纯「输入 → 处理 → 输出」或带一个判断的入门题,做完每道题,回头把它对应的三种描述补全:

1. [B4062 温度转换](GESP 2024-12 一级):标准的顺序结构——一个输入框、一个处理框(套公式换算)、一个输出框。

2. [B3863 买文具](GESP 2023-09 一级):算总价、算找零,处理框连着处理框。

3. [B4409 商店折扣](GESP 2025-09 一级):总价达到门槛打折扣——一个判断框两个出口的分支结构。

② 顺序、分支、循环的流程图画法

任何流程图,无论多大,都由三种基本结构搭出来。每种结构都只有一个入口、一个出口——这是结构化程序设计的底线,保证了图不会绕成一团乱麻。

顺序结构:一个框接一个框

┌──────┐    ┌──────┐    ┌──────┐    ┌──────┐
│ 开 始 │──→│输入 a,b│──→│ c=a+b │──→│输出 c │──→│ 结 束 │
└──────┘    └──────┘    └──────┘    └──────┘    └──────┘

框自上而下排列,执行完上一个顺着流程线进入下一个,不需要判断框。日常的换算题(温度转换、单位换算、单价×数量)都是纯顺序结构。

分支结构:菱形一进两出

             ┌──────────┐
        ──→ │  n ≥ 60 ? │
             └──┬────┬──┘
           是   │    │   否
                ▼    ▼
        ┌────────┐  ┌────────┐
        │输出「及格」│  │输出「不及格」│
        └───┬────┘  └───┬────┘
            └─────┬─────┘
                  ▼   (两路汇合,一个出口)

要点三条:判断框必须有两个出口;每个出口标注条件成立(是)与否(否);两条路最终汇合到同一出口,不能一条路通向结束、另一条路悬空。

多分支(如按分数段输出等级)就是多个菱形串联或嵌套,画的时候先把每个判断框的「是 / 否」写清楚,再连线。

循环结构:流程线必须绕回去

当型(while):先判断,再干活。

        ┌──────┐
        │ 开 始 │
        └──┬───┘
           ▼
     ┌─────────┐
  ──→│ i ≤ 100 ?│────否──→(出口,去输出)
  │   └────┬────┘
  │      是
  │        ▼
  │  ┌───────────┐
  │  │ s = s + i │
  │  └────┬──────┘
  │       ▼
  │  ┌─────────┐
  └──┤ i = i+1 │
     └─────────┘

直到型(do-while):先干活,再判断。 循环体在判断框之前,条件不成立时才跳出(注意和当型相反:直到型是「满足就继续」还是「不满足就继续」取决于写法,do-while 是条件成立继续循环、不成立跳出时按「直到条件成立为止」的语义读题)。

两者最本质的区别是判断时机:当型先判断,条件一开始就不成立时,循环体一遍也不执行;直到型先执行,循环体至少跑一遍。 画循环图必须自查两件事:

1. 有没有一条流程线从循环体绕回判断框(没有就不叫循环);

2. 循环体里有没有让条件终有一天不成立的语句(如 i = i+1),否则是死循环。

读流程图题的标准动作

初赛给图问输出,按三步走:

1. 给每个变量在草稿纸上开一列(值变了就新写一行,别覆盖);

2. 从「开始」顺着箭头走,每经过一个框就更新表格;

3. 走到「结束」,取输出变量的最后一行值。

循环多转几轮不可怕,表格不会骗人;最容易错的是判断框「是 / 否」走反,落笔前先圈出每个菱形的两个出口。

练手题

1. [B3847 当天的第几秒](GESP 样题 一级):给时、分、秒算当天第几秒——纯顺序结构。

2. [B4446 手机电量显示](GESP 2025-12 一级):按电量区间显示不同符号——多分支串联的判断框。

3. [B3923 小杨做题](GESP 2023-12 二级):做题数量逐天增长直到达标——当型循环,先判断再累加。

4. [B4574 棋盘上的奖赏](GESP 2026-09 一级):循环里套判断——循环体中含菱形,综合画一画。

学完这个考点,用历年真题检验一下

OI伴学 把「流程图与算法描述」在 CCF-GESP / CSP / NOIP 真题里出现过的题目汇总到一页,可按考点横向刷;每题都带答案、解题思维和常见错误。

看 流程图与算法描述 历年真题汇总 → 去平台刷题 →