一、為什么C/C用順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)就能實(shí)現(xiàn)所有功能
其實(shí)只是說結(jié)構(gòu)化語言,可以用順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)來描述全部的算法而已。
順序結(jié)構(gòu):從頭到尾一句接著一句的執(zhí)行下來,直到執(zhí)行完最后一句;
選擇結(jié)構(gòu):到某個節(jié)點(diǎn)后,會根據(jù)一次判斷的結(jié)果來決定之后向哪一個分支方向執(zhí)行;
循環(huán)結(jié)構(gòu):循環(huán)結(jié)構(gòu)有一個循環(huán)體,循環(huán)體里是一段代碼。對于循環(huán)結(jié)構(gòu)來說,關(guān)鍵在于根據(jù)判斷的結(jié)果,來決定循環(huán)體執(zhí)行多少次;
注:在邏輯上有一種bool類型(也叫boolean類型,布爾類型),只有兩個值,即真和假。C語言的判斷表達(dá)式最終的值就是一個bool類型,這個判斷表達(dá)式的bool值就決定了選擇結(jié)構(gòu)如何選擇,循環(huán)結(jié)構(gòu)如何循環(huán)。
需要編程解決的問題邏輯紛繁復(fù)雜,程序設(shè)計語言里面為什么只有三種基本的程序結(jié)構(gòu)就夠用了?
對于程序設(shè)計語言中的三種基本結(jié)構(gòu):順序、選擇、循環(huán),大家應(yīng)該都比較熟悉了,確實(shí)也只有這些。
其實(shí),這個問題是經(jīng)過嚴(yán)格證明過的。1966年,計算機(jī)科學(xué)家 Bohm 和 Jacopini 證明了這樣的事實(shí):任何簡單或復(fù)雜的算法都可以由順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)這三種基本結(jié)構(gòu)組合而成。所以,這三種結(jié)構(gòu)就被稱為程序設(shè)計的三種基本結(jié)構(gòu)。也是 結(jié)構(gòu)化程序設(shè)計 必須采用的結(jié)構(gòu)。想詳細(xì)了解的可以去看下論文:Bohm C., Jacopini G. “Flow diagrams, Turing machines and languages with only two formation rules.” Communications of the Association for Computing Machinery, Vol.9, pp. 366–371. 1966.
荷蘭學(xué)者Dijkstra1968年提出了“結(jié)構(gòu)化程序設(shè)計”的思想,它規(guī)定了一套方法,使程序具有合理的結(jié)構(gòu),以保證和驗證程序的正確性,這種方法要求程序設(shè)計者不能隨心所欲地編寫程序,而要按照一定的結(jié)構(gòu)形式來設(shè)計和編寫程序,它的一個重要目的是使程序具有良好的結(jié)構(gòu),使程序易于設(shè)計,易于理解,易于調(diào)試修改,以提高設(shè)計和維護(hù)程序工作的效率。
結(jié)構(gòu)化程序規(guī)定了以下三種基本結(jié)構(gòu)作為程序的基本單元: 以上三種基本結(jié)構(gòu)可以派生出其它形式的結(jié)構(gòu).由這三種基本結(jié)構(gòu)所構(gòu)成的算法可以處理任何復(fù)雜的問題.所謂結(jié)構(gòu)化程序就是由這三種基本結(jié)構(gòu)所組成的程序.可以看到,三種基本結(jié)構(gòu)都具有以下特點(diǎn):①有一個入口.②有一個出口.③結(jié)構(gòu)中每一部分都應(yīng)當(dāng)有被執(zhí)行到的機(jī)會,也就是說,每一部分都應(yīng)當(dāng)有一條從入口到出口的路徑通過它(至少通過一次).④沒有死循環(huán)(無終止的循環(huán)).
按結(jié)構(gòu)化程序設(shè)計方法設(shè)計出的程序優(yōu)點(diǎn)是:結(jié)構(gòu)良好、各模塊間的關(guān)系清晰簡單、每一模塊內(nèi)都由基本單元組成。這樣設(shè)計出的程序清晰易讀,可理解性好,容易設(shè)計,容易驗證其正確性,也容易維護(hù)。同時,由于采用了“自頂向下、逐步細(xì)化”的實(shí)施方法,能有效地組織人們的智力,有利于軟件的工程化開發(fā)。
延伸閱讀:
二、goto語句
C語言提供了可以使用的goto語句和標(biāo)記跳轉(zhuǎn)的標(biāo)號。理論上goto語句沒有使用必要(容易代碼邏輯錯造成隨意跳轉(zhuǎn)),但在深層循環(huán)嵌套使用break達(dá)不到目的。而可以使用goto可以解決
語法
標(biāo)號:
??語句;
if(表達(dá)式)
??goto 標(biāo)號;
標(biāo)號:表達(dá)需要跳轉(zhuǎn)的位置
goto 標(biāo)號:跳到哪個標(biāo)號去