複製鏈接
請複製以下鏈接發送給好友

非結構化語言

鎖定
非結構化語言是高級語言發展的第一階段,編程風格比較隨意,只要符合語法規則即可。而且也沒有嚴格的規範要求,程序中的流程可以隨意跳轉。此外,很多開發人員為了追求程序執行的效率而採用了很多“小技巧”,使程序變得難以閲讀和維護。早期的BASIC、COBOL、FORTRAN等都是非結構化語言。
中文名
非結構化語言
外文名
Unstructured language
典    例
BASIC、COBOL、FORTRAN等語言
特    點
不能反映結構程序設計的思想
缺    點
程序的邏輯比較複雜
後一階段
結構化語言

非結構化語言定義

早期產生的語言,比如BASICCOBOLFORTRAN等,因為它們產生的年代比較早,語言在很多方面不能反映結構程序設計的思想,所以也稱它們為非結構化語言。 [1] 

非結構化語言結構程序設計方法

早期用這些語言編寫的程序結構性差,程序的邏輯就比較複雜,對這些語言進行結構程序設計的主要過程如下:

非結構化語言BASIC結構程序設計

用BASIC語言描述如下結構:
(1)順序結構。順序結構是一條解一條地執行的一組語句序列,語句的書寫順序就是它的執行順序。
(2)選擇結構。程序中具有兩個分支的結構稱為選擇結構,這種兩分支的結構,一般也稱為IF-THEN-ELSE結構。這種結構的偽代碼形式如下:
IF 條件
THEN
    語句序列 1
ELSE
    語句序列 2
ENDIF
如果選擇結構中不需要ELSE分支,即IF結構只有THEN分支。另外,在選擇結構中還可嵌入IF語句,但是為了提高程序的可讀性,一般程序中IF語句的嵌套不要超過三重。
(3)重複結構。重複結構又稱為循環結構,通常有WHIL和UNTIL兩種。用BASIC的IF語句和GOTO語句實現WHILE結構的一般形式如下:
200 REM WHILE 條件
300      IF (條件的否定) THEN 500
              {循環體}
400           GOTO   200
500 REM
注:這裏(條件的否定)是指採用了算法中的條件的否定形式。 [1] 
在UNTIL結構中,對循環控制條件的測試是在循環體執行之後進行的,因此這種結構的循環體至少要被執行一次。UNTIL結構用BASIC的IF語句和GOTO語句表示的一般形式如下:
200 REM UNTIL 條件
             {循環體}
300      IF (條件的否定) THEN 200
400 REM
注:這裏(條件的否定)是指採用了重複結構算法中條件的否定形式,使程序正文接近於偽代碼形式。
(4)多路選擇結構。程序中具有多個分支的結構稱為多路選擇(CASE)結構。CASE結構用標準BASIC語句的編碼如下:
    REM DOCASE
100 REM CASE 1
     IF (條件1的否定) THEN 200
            {編碼1}
     GOTO 900
200 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行左右。 [1] 
用COBOL語言描述如下結構:
(1)順序結構。順序結構是指按排列次序執行的一組語句序列,其中的語句可以是PERFORM語句或者CALL語句。但要求執行時能把控制返回到調用語句的後繼語句,這樣才能保持順序結構的要求。
(2)選擇結構。選擇結構一般用IF語句實現,IF語句的句法如下:
IF 條件
THEN
    語句序列 1
ELSE
    語句序列 2
ENDIF
(3)重複結構。重複結構有WHILEUNTIL兩種類型,它實現重複結構是很方便的。WHILE結構是一種基本的循環結構,這種結構是先測試條件,然後才執行循環體。如果最初測試條件為假時,就絕不會去執行循環體。當測試條件為真時,才去執行這個循環體。UNTIL結構是至少執行一次循環體的循環結構,在COBOL語言中的“PREFORM...UNTIL...”句型中,條件的測試是在循環體的執行之前,這和WHILE結構相同。 [1] 

非結構化語言結構化語言與非結構化語言的對比

非結構化語言發展階段

計算機語言的發展過程可以分為:機器語言彙編語言高級語言 [2] 
非結構化語言是高級語言發展的第一階段,編程風格比較隨意,只要符合語法規則即可,而且也沒有嚴格的規範要求,程序中的流程可以隨意跳轉。此外,很多開發人員為了追求程序執行的效率而採用了很多“小技巧”,使程序變得難以閲讀和維護。早期的BASIC、COBOL、FORTRAN等都是非結構化語言。 [2] 
為了解決非結構化語言帶來的問題,提出了結構化程序設計的方法,它規定程序必須由具有良好特性的基本結構(順序分支循環)構成,且程序中的流程不允許隨意跳轉,總是由上而下順序執行各個基本結構。這個階段編寫的程序結構清晰,易於閲讀和維護,C屬於結構化語言。 [2] 

非結構化語言結構化語言的優點

使用結構化語言進行程序設計時,主要有以下優點:
(1)自頂向下逐步求解的方法符合人類解決複雜問題的普遍規律,因此可以顯著提高軟件開發工程的成功率和出產率。
(2)用先全局後局部、先整體後細節、先抽象後具體的逐步求精過程開發出的程序有清晰地層次結構,因此容易閲讀和理解。
(3)不使用GOTO語句僅是使用單入口、單出口的控制結構,使得程序的靜態結構和它的動態執行情況比較一致。因此程序容易閲讀額理解,開發時也比較容易保證程序的正確性,即使出現錯誤也比較容易診斷和修正。
(4)控制結構有確定的邏輯結構,編寫程序代碼只限於很少幾種直截了當的方式,因此源程序清晰流暢,易讀易懂而且容易測試。
(5)程序清晰和模塊化使得修改和重新設計一個軟件時可重用的代碼量最大。
(6)程序的邏輯結構清晰,有利於程序正確性驗證。 [3] 

非結構化語言結構化語言的缺點

使用結構化語言進行程序設計時,主要有以下缺點:
(1)需要的存儲容量和運行時間都有一些增加,估計增加10%~20%。
(2)現有的許多程序設計語言是非結構化語言,並不提供上述的單入口、單出口的基本控制結構。 [3] 

非結構化語言非構化語言的優點

SQL語言為例:
(1)SQL是一個非過程化的語言,一次處理一個記錄,為數據提供自動導航。
(2)SQL允許用户在高層的數據結構上工作,可操作記錄集合而不對單個記錄進行操作。
(3)所有的SQL語句接收集合作為輸入,返回集合作為輸出。
(4)SQL的集合特性允許一條SQL語句的結果作為另一條SQL語句的輸入。
(5)SQL不要求用户指定數據的存放方法,這種特性使得用户更易集中精力於要得到的結果。
(6)所有SQL語句使用查詢優化器,它是關係型數據管理系統的一部分,由它決定對指定數據存取的最快速度的手段。 [4] 

非結構化語言非構化語言的缺點

(1)沒有嚴格的規範要求,程序中的流程可以隨意跳轉。
(2)很多開發人員為了追求程序執行的效率而採用了很多“小技巧”,使程序變得難以閲讀和維護
參考資料
  • 1.    施伯樂等編著.結構程序設計基礎 .浙江:浙江科學技術出版社 ,1988:241-281
  • 2.    董志鵬編著.Visual C++編程從基礎到應用.北京:清華大學出版社,2014:2-3
  • 3.    賴均編.軟件工程.北京:清華大學出版社,2016:134-135
  • 4.    劉貴國編著.Dreamweaver CS6網頁設計與網站建設課堂實錄.北京:清華大學出版社,2014:237-238