簡介
流程圖是描述算法的工具之一。人教版高中數(shù)學(xué)課本上稱其為“程序框圖”。它是一種用規(guī)定的圖形、指向線及文字說明來準(zhǔn)確、直觀地表示算法的圖形。
目前最常用的流程圖的符號由美國國家標(biāo)準(zhǔn)學(xué)會(American National Standards Institute, ANSI)于20世紀(jì)60年代規(guī)范標(biāo)準(zhǔn),1970年,國際標(biāo)準(zhǔn)化組織(International Organization for Standardization, ISO)采納了ANSI制定的符號。目前的標(biāo)準(zhǔn)于1985年修改。
流程圖的基本符號
如果不包括流程線,有四大最基本的符號:
終端框(起止框):符號為膠囊狀矩形。表示一個算法的開始或結(jié)束。上面的文字一般只是“開始”或“結(jié)束”,也可以是觸發(fā)算法開始的操作或者是提交、傳值等將值傳給下一個算法的操作。

輸入、輸出框:符號為平行四邊形。表示一個算法輸入和輸出的信息。一般來說文字的開頭要注明“輸入”或“輸出”。

處理框(執(zhí)行框):符號為矩形。表示一個賦值、計算等操作。文字注明具體操作。

判斷框:符號為菱形。表示判斷某條件是否成立。一般來說,它有兩個分支,條件成立與否之后的流程在分支線處標(biāo)明“是”“否”或“Y”“N”。對于不是判斷某條件是否成立,而是判斷某個表達(dá)式的值的情況(如C、Javascript的switch語句),目前沒有規(guī)定的畫法。我一般的做法是在分支處標(biāo)明值。

流程線(指向線):流程圖各符號之間以有向單向線連接。線一般要求橫平豎直,可以有若干個90°的轉(zhuǎn)彎。流程線盡量不要交叉,當(dāng)兩條流程線不得已而交叉時,將其中一條流程線的交叉處用圓弧隔開。標(biāo)準(zhǔn)規(guī)定,如果不是從上到下、從左到右,流程線的箭頭是必需的。但是,一般來說,在任何情況下都要畫出流程線的箭頭。

此外還有一些不太常用的符號:
連接點/連接符/頁面內(nèi)引用:符號為圓形。用于將流程圖中的各個元素連接起來,可以在流程圖過于復(fù)雜、流程線過長或可能會發(fā)生混淆的情況下使用。

具體操作是:流程圖分裂開來,分裂時通常從流程圖的某一條流程線處分開,并在此流程線處標(biāo)注分裂號,同時在另一流程圖的入口位置標(biāo)注同樣的分裂號,以表示兩個流程圖在此標(biāo)號處連接。如圖:

跨頁引用/頁面外引用:符號為上面為方的五邊形。當(dāng)流程圖太長以至于需要斷開成多頁,可以在前頁的結(jié)尾和后頁的開頭插入。我沒找到它的詳細(xì)用法,可能和連接點的用法相似。事實上也有人使用連接點執(zhí)行上述職能。


注釋:如圖所示,為塊做注釋。

子流程/子程序/預(yù)定義流程:符號為左右各有一條豎線的矩形。這種符號一般用于比較龐大的工程中,用以分割基本功能。

此外還有一些極少用的符號,這里就不再贅述。一般來說,了解上面的符號,95%以上的流程圖就能夠掌握了。
流程圖的畫法
一般來說,流程圖是從上到下、從左到右畫的。豎版和橫版都可以,但豎版更為常見。
為了美觀大方,更能體現(xiàn)流程,流程圖應(yīng)該條理層次清晰,各塊不重疊、大小和間距盡量相同。流程線盡量不交叉,橫平豎直。
其實,在上面的“連接點用例”中,我們已經(jīng)看到了一個流程圖的例子。即使我沒有教后面的內(nèi)容,我想你們也能夠比較清楚它的執(zhí)行過程了吧(sqrt(x)是x的算術(shù)平方根,*是乘號,/是除號)。
一般來說,如果在紙上畫流程圖,最好事先打草稿,以免構(gòu)圖時遇到困擾。在電腦上畫流程圖有(但不限于)以下軟件或網(wǎng)站:
- Microsoft Visio(Windows,流程圖只是其功能之一)
- OmniGraffle(macOS)
- yEd(跨平臺)
- Inkscape(跨平臺,流程圖只是其功能之一)
- ProcessOn(網(wǎng)站)
我用過Visio和ProcessOn,感覺還行。
此外,一些使用Markdown的平臺(如Typora)有基于flowchart.js、mermaid的流程圖引擎,可以通過特定的語法生成流程圖。
我在這里以flowchart為例:
st=>start: 開始
e=>end: 結(jié)束
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 - Wikipedia
https://en.wikipedia.org/wiki/Flowchart - 普通高中課程標(biāo)準(zhǔn)實驗教科書(必修) 數(shù)學(xué)(A版) 必修3. 人民教育出版社
- 5.2.2 使用流程圖描述法 - 51CTO.COM
http://book.51cto.com/art/201411/456514.htm - 繼續(xù)在單獨的頁面上的流程圖 - Visio
https://support.office.com/zh-cn/article/%E7%BB%A7%E7%BB%AD%E5%9C%A8%E5%8D%95%E7%8B%AC%E7%9A%84%E9%A1%B5%E9%9D%A2%E4%B8%8A%E7%9A%84%E6%B5%81%E7%A8%8B%E5%9B%BE-6e21dd6a-06d0-4111-b3dc-8a2e8ec94fb9?ui=zh-CN&rs=zh-CN&ad=CN