伪·从零开始学算法 - 1.3 流程图

简介

流程图是描述算法的工具之一。人教版高中数学课本上称其为“程序框图”。它是一种用规定的图形、指向线及文字说明来准确、直观地表示算法的图形。

目前最常用的流程图的符号由美国国家标准学会(American National Standards Institute, ANSI)于20世纪60年代规范标准,1970年,国际标准化组织(International Organization for Standardization, ISO)采纳了ANSI制定的符号。目前的标准于1985年修改。

流程图的基本符号

如果不包括流程线,有四大最基本的符号:

终端框(起止框):符号为胶囊状矩形。表示一个算法的开始或结束。上面的文字一般只是“开始”或“结束”,也可以是触发算法开始的操作或者是提交、传值等将值传给下一个算法的操作。

终端框

输入、输出框:符号为平行四边形。表示一个算法输入和输出的信息。一般来说文字的开头要注明“输入”或“输出”。

输入、输出框

处理框(执行框):符号为矩形。表示一个赋值、计算等操作。文字注明具体操作。

处理框

判断框:符号为菱形。表示判断某条件是否成立。一般来说,它有两个分支,条件成立与否之后的流程在分支线处标明“是”“否”或“Y”“N”。对于不是判断某条件是否成立,而是判断某个表达式的值的情况(如C、Javascript的switch语句),目前没有规定的画法。我一般的做法是在分支处标明值。

判断框

流程线(指向线):流程图各符号之间以有向单向线连接。线一般要求横平竖直,可以有若干个90°的转弯。流程线尽量不要交叉,当两条流程线不得已而交叉时,将其中一条流程线的交叉处用圆弧隔开。标准规定,如果不是从上到下、从左到右,流程线的箭头是必需的。但是,一般来说,在任何情况下都要画出流程线的箭头。

流程线

此外还有一些不太常用的符号:

连接点/连接符/页面内引用:符号为圆形。用于将流程图中的各个元素连接起来,可以在流程图过于复杂、流程线过长或可能会发生混淆的情况下使用。

连接点

具体操作是:流程图分裂开来,分裂时通常从流程图的某一条流程线处分开,并在此流程线处标注分裂号,同时在另一流程图的入口位置标注同样的分裂号,以表示两个流程图在此标号处连接。如图:

连接点用例

跨页引用/页面外引用:符号为上面为方的五边形。当流程图太长以至于需要断开成多页,可以在前页的结尾和后页的开头插入。我没找到它的详细用法,可能和连接点的用法相似。事实上也有人使用连接点执行上述职能。

跨页引用
跨页引用用例

注释:如图所示,为块做注释。

注释,从一处理框引出

子流程/子程序/预定义流程:符号为左右各有一条竖线的矩形。这种符号一般用于比较庞大的工程中,用以分割基本功能。

子流程

此外还有一些极少用的符号,这里就不再赘述。一般来说,了解上面的符号,95%以上的流程图就能够掌握了。

流程图的画法

一般来说,流程图是从上到下、从左到右画的。竖版和横版都可以,但竖版更为常见。

为了美观大方,更能体现流程,流程图应该条理层次清晰,各块不重叠、大小和间距尽量相同。流程线尽量不交叉,横平竖直。

其实,在上面的“连接点用例”中,我们已经看到了一个流程图的例子。即使我没有教后面的内容,我想你们也能够比较清楚它的执行过程了吧(sqrt(x)是x的算术平方根,*是乘号,/是除号)。

一般来说,如果在纸上画流程图,最好事先打草稿,以免构图时遇到困扰。在电脑上画流程图有(但不限于)以下软件或网站:

  • Microsoft Visio(Windows,流程图只是其功能之一)
  • OmniGraffle(macOS)
  • yEd(跨平台)
  • Inkscape(跨平台,流程图只是其功能之一)
  • ProcessOn(网站)

我用过Visio和ProcessOn,感觉还行。

Visio
ProcessOn

此外,一些使用Markdown的平台(如Typora)有基于flowchart.js、mermaid的流程图引擎,可以通过特定的语法生成流程图。

我在这里以flowchart为例:

st=>start: 开始
e=>end: 结束
input=>inputoutput: 输入a、b
output=>inputoutput: 输出max
cond1=>condition: a ≥ b?
op1=>operation: max = a
op2=>operation: max = b

st->input->cond1
cond1(yes)->op1->output
cond1(no)->op2->output
output->e
flowchart.js生成结果

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容

  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,601评论 1 180
  • 我在写1.1节的时候本来是要写这个的,但是突然就忘了……就作为一节来写吧。 顺便说一下,1946年的今天,世界上第...
    阿啊阿吖丁阅读 3,126评论 1 0
  • 最近,相信大家都被『23岁大学生李文星命丧传销组织』的消息给刷屏,正值花样年华,不禁让人惋惜。 截至目前涉案人员已...
    王姑酿阅读 510评论 0 1
  • 抑郁,,,,昨晚的10.35分就寝,早晨我的5.40分呢,,闹钟5.28响关掉继续睡,然而一觉睡到6.10,呀从睡...
    如风一般的女子阅读 121评论 0 1
  • 最近沿海地带的寒潮开始来袭,以此小诗解心愁! 雨落如酥润萋草, 沿海入春三月恼。 奈何春燕何其少? 疑恐潮袭潮遁巢!
    萧慕雨阅读 603评论 11 11