用計算機(jī)語言為計算機(jī)編寫程序,解決某種問題,我們也稱之為程序設(shè)計。程序設(shè)計需要有一定的方法來指導(dǎo),例如,前面我們提到的一元二次方程求解的算法簡單,而對于字符串的處理就要復(fù)雜一些,涉及到字符串的合并、拷貝、比較等,不是一個算法能夠表達(dá)的。也就是說,這需要對問題進(jìn)行分解。對問題如何進(jìn)行抽象和分解,對程序如何進(jìn)行組織,使得程序的可維護(hù)性、可讀性、穩(wěn)定性、效率等更好,是程序設(shè)計方法研究的問題。目前,有兩種重要的程序設(shè)計方法:結(jié)構(gòu)化的程序設(shè)計和面向?qū)ο蟮某绦蛟O(shè)計,下面分別作一個簡單的介紹。
什么是程序?
程序規(guī)定了計算機(jī)執(zhí)行的動作和動作的順序。如同開會的議程,每周的課程安排表一樣。一個程序應(yīng)包括以下兩方面的內(nèi)容:
(1) 對數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)。
(2) 對操作的描述。即操作步驟,也就是算法。
數(shù)據(jù)是操作的對象,操作的目的是對數(shù)據(jù)進(jìn)行加工處理,以得到期望的結(jié)果。作為程序設(shè)計人員,必須認(rèn)真考慮和設(shè)計數(shù)據(jù)結(jié)構(gòu)和操作步驟。的計算機(jī)科學(xué)家Nikiklaus Wirth提出了一個公式:
程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法。
程序設(shè)計和程序編碼
一些程序員,尤其是初學(xué)程序設(shè)計者,常常認(rèn)為程序設(shè)計就是用某種程序設(shè)計語言編寫代碼,這其實(shí)是錯誤的認(rèn)識。上述工作應(yīng)該被看成為編碼(coding),它是在程序設(shè)計完成之后才開始的。拿房屋設(shè)計的例子來講,房屋設(shè)計這個過程不涉及砌轉(zhuǎn)壘瓦的具體工作,這些工作是房屋施工階段進(jìn)行的。在完成了房屋設(shè)計,有了設(shè)計圖紙之后,施工階段才能開始。如果不作設(shè)計,直接施工,很難想象房屋能不能建造完成,或者建造的房屋合不合要求。同樣,程序設(shè)計一定要在具體的程序編碼之前完成。程序設(shè)計完成的好壞直接影響了后面的編碼質(zhì)量。
起止框 輸入輸出框 判斷框 注釋框
處理框 流程線 連接點(diǎn)
與房屋設(shè)計中有圖紙一樣,程序設(shè)計也有自己的表達(dá)方式。一種常用的程序設(shè)計表達(dá)方式是程序流程圖。流程圖也有不同的表示形式。我們只介紹傳統(tǒng)的流程圖。
流程圖用一些圖框表示各種操作,形象直觀,易于理解。ANSI(American National Standard Institute, 美國國家標(biāo)準(zhǔn)化協(xié)會)規(guī)定了一些常用的流程圖符號,已為世界各國程序工作者普遍采用。
我們以求n!為例說明流程圖如何表示程序流程,見圖1-4。
通過上面的例子,可以看出流程圖是表示算法的較好工具。一個流程圖包括以下幾部分:(1)表示相應(yīng)操作的框;(2)帶箭頭的流程線;(3)框內(nèi)外必要的說明文字。需要注意的是:流程線必須加箭頭,因?yàn)樗欠从吵绦虻膱?zhí)行先后次序的,如果不畫箭頭就難以判定各框的執(zhí)行順序了。
什么是程序?
程序規(guī)定了計算機(jī)執(zhí)行的動作和動作的順序。如同開會的議程,每周的課程安排表一樣。一個程序應(yīng)包括以下兩方面的內(nèi)容:
(1) 對數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)。
(2) 對操作的描述。即操作步驟,也就是算法。
數(shù)據(jù)是操作的對象,操作的目的是對數(shù)據(jù)進(jìn)行加工處理,以得到期望的結(jié)果。作為程序設(shè)計人員,必須認(rèn)真考慮和設(shè)計數(shù)據(jù)結(jié)構(gòu)和操作步驟。的計算機(jī)科學(xué)家Nikiklaus Wirth提出了一個公式:
程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法。
程序設(shè)計和程序編碼
一些程序員,尤其是初學(xué)程序設(shè)計者,常常認(rèn)為程序設(shè)計就是用某種程序設(shè)計語言編寫代碼,這其實(shí)是錯誤的認(rèn)識。上述工作應(yīng)該被看成為編碼(coding),它是在程序設(shè)計完成之后才開始的。拿房屋設(shè)計的例子來講,房屋設(shè)計這個過程不涉及砌轉(zhuǎn)壘瓦的具體工作,這些工作是房屋施工階段進(jìn)行的。在完成了房屋設(shè)計,有了設(shè)計圖紙之后,施工階段才能開始。如果不作設(shè)計,直接施工,很難想象房屋能不能建造完成,或者建造的房屋合不合要求。同樣,程序設(shè)計一定要在具體的程序編碼之前完成。程序設(shè)計完成的好壞直接影響了后面的編碼質(zhì)量。
起止框 輸入輸出框 判斷框 注釋框
處理框 流程線 連接點(diǎn)
與房屋設(shè)計中有圖紙一樣,程序設(shè)計也有自己的表達(dá)方式。一種常用的程序設(shè)計表達(dá)方式是程序流程圖。流程圖也有不同的表示形式。我們只介紹傳統(tǒng)的流程圖。
流程圖用一些圖框表示各種操作,形象直觀,易于理解。ANSI(American National Standard Institute, 美國國家標(biāo)準(zhǔn)化協(xié)會)規(guī)定了一些常用的流程圖符號,已為世界各國程序工作者普遍采用。
我們以求n!為例說明流程圖如何表示程序流程,見圖1-4。
通過上面的例子,可以看出流程圖是表示算法的較好工具。一個流程圖包括以下幾部分:(1)表示相應(yīng)操作的框;(2)帶箭頭的流程線;(3)框內(nèi)外必要的說明文字。需要注意的是:流程線必須加箭頭,因?yàn)樗欠从吵绦虻膱?zhí)行先后次序的,如果不畫箭頭就難以判定各框的執(zhí)行順序了。

