定義
結構程式設計方法
早期用這些語言編寫的程式結構性差,程式的邏輯就比較複雜,對這些語言進行結構程式設計的主要過程如下:
BASIC結構程式設計
用BASIC語言描述如下結構:
(1)
順序結構。順序結構是一條解一條地執行的一組語句序列,語句的書寫順序就是它的執行順序。
(2)
選擇結構。程式中具有兩個分支的結構稱為選擇結構,這種兩分支的結構,一般也稱為IF-THEN-ELSE結構。這種結構的偽代碼形式如下:
IF 條件THEN 語句序列 1ELSE 語句序列 2ENDIF
如果選擇結構中不需要ELSE分支,即IF結構只有THEN分支。另外,在選擇結構中還可嵌入IF語句,但是為了提高程式的可讀性,一般程式中IF語句的嵌套不要超過三重。
(3)重複結構。重複結構又稱為
循環結構,通常有WHIL和UNTIL兩種。用BASIC的IF語句和GOTO語句實現WHILE結構的一般形式如下:
200 REM WHILE 條件300 IF (條件的否定) THEN 500 {循環體}400 GOTO 200500 REM
註:這裡(條件的否定)是指採用了算法中的條件的否定形式。
在UNTIL結構中,對循環控制條件的測試是在循環體執行之後進行的,因此這種結構的循環體至少要被執行一次。UNTIL結構用BASIC的IF語句和
GOTO語句表示的一般形式如下:
200 REM UNTIL 條件 {循環體}300 IF (條件的否定) THEN 200400 REM
註:這裡(條件的否定)是指採用了重複結構算法中條件的否定形式,使程式正文接近於偽代碼形式。
(4)多路選擇結構。程式中具有多個分支的結構稱為多路選擇(CASE)結構。CASE結構用標準BASIC語句的編碼如下:
REM DOCASE100 REM CASE 1 IF (條件1的否定) THEN 200 {編碼1} GOTO 900200 REM CASE 2 IF (條件2的否定) THEN 300 {編碼2} GOTO 900 ...800 REM CASE n IF (條件n的否定) THEN 900 {編碼n}900 REM ENDCASE
COBOL結構程式設計
COBOL是面對過程的事務數據處理通用程式設計語言,COBOL程式的編寫接近於英語,直觀性強,具有結構模組化和自我說明的特點,便於學習和理解,也便於程式交流。
由頂向下程式開發過程中產生了程式的
模組化結構圖,每一個模組可編寫成一個COBOL程式,這些COBOL程式可以獨立編譯,主模組通過CALL語句實現對低層模組的控制,模組之間數據傳遞通過USING進行。一般一個模組用COBOL語言編寫時,可執行語句應限制在規定的一頁紙以內。如果模組較大,可以把模組分割成若干個部分(稱為“片”),每片的代碼不要超過60行。在實際編碼時,往往由於每片的功能較少,因此一般每片的代碼在30行左右。
用COBOL語言描述如下結構:
(1)順序結構。順序結構是指按排列次序執行的一組語句序列,其中的語句可以是PERFORM語句或者CALL語句。但要求執行時能把控制返回到調用語句的後繼語句,這樣才能保持順序結構的要求。
(2)選擇結構。選擇結構一般用IF語句實現,IF語句的句法如下:
IF 條件THEN 語句序列 1ELSE 語句序列 2ENDIF
(3)重複結構。重複結構有
WHILE和
UNTIL兩種類型,它實現重複結構是很方便的。WHILE結構是一種基本的循環結構,這種結構是先測試條件,然後才執行循環體。如果最初測試條件為假時,就絕不會去執行循環體。當測試條件為真時,才去執行這個循環體。UNTIL結構是至少執行一次循環體的循環結構,在COBOL語言中的“PREFORM...UNTIL...”句型中,條件的測試是在循環體的執行之前,這和WHILE結構相同。
結構化語言與非結構化語言的對比
發展階段
非結構化語言是高級語言發展的第一階段,編程風格比較隨意,只要符合語法規則即可,而且也沒有嚴格的規範要求,程式中的流程可以隨意跳轉。此外,很多開發人員為了追求程式執行的效率而採用了很多“小技巧”,使程式變得難以閱讀和維護。早期的BASIC、COBOL、
FORTRAN等都是非結構化語言。
為了解決非結構化語言帶來的問題,提出了結構化程式設計的方法,它規定程式必須由具有良好特性的基本結構(
順序、
分支和
循環)構成,且程式中的流程不允許隨意跳轉,總是由上而下順序執行各個基本結構。這個階段編寫的程式結構清晰,易於閱讀和維護,
C屬於結構化語言。
結構化語言的優點
使用結構化語言進行程式設計時,主要有以下優點:
(1)
自頂向下逐步求解的方法符合人類解決複雜問題的普遍規律,因此可以顯著提高軟體開發工程的成功率和出產率。
(2)用先全局後局部、先整體後細節、先抽象後具體的逐步求精過程開發出的程式有清晰地層次結構,因此容易閱讀和理解。
(3)不使用
GOTO語句僅是使用單入口、單出口的控制結構,使得程式的靜態結構和它的動態執行情況比較一致。因此程式容易閱讀額理解,開發時也比較容易保證程式的正確性,即使出現錯誤也比較容易診斷和修正。
(4)控制結構有確定的
邏輯結構,編寫程式代碼只限於很少幾種直截了當的方式,因此源程式清晰流暢,易讀易懂而且容易測試。
(5)程式清晰和模組化使得修改和重新設計一個軟體時可重用的代碼量最大。
(6)程式的邏輯結構清晰,有利於程式正確性驗證。
結構化語言的缺點
使用結構化語言進行程式設計時,主要有以下缺點:
(1)需要的
存儲容量和運行時間都有一些增加,估計增加10%~20%。
(2)現有的許多程式設計語言是非結構化語言,並不提供上述的單入口、單出口的基本控制結構。
非構化語言的優點
(1)SQL是一個非過程化的語言,一次處理一個記錄,為數據提供自動導航。
(2)SQL允許用戶在高層的數據結構上工作,可操作記錄集合而不對單個記錄進行操作。
(3)所有的SQL語句接收集合作為輸入,返回集合作為輸出。
(4)SQL的集合特性允許一條SQL語句的結果作為另一條SQL語句的輸入。
(5)SQL不要求用戶指定數據的存放方法,這種特性使得用戶更易集中精力於要得到的結果。
(6)所有SQL語句使用
查詢最佳化器,它是關係型數據管理系統的一部分,由它決定對指定數據存取的最快速度的手段。
非構化語言的缺點
(1)沒有嚴格的規範要求,程式中的流程可以隨意跳轉。
(2)很多開發人員為了追求程式執行的效率而採用了很多“小技巧”,使程式變得難以閱讀和維護