c語言控制流主要是順序,分支,迴圈。這三種方式基本上是語言學上必須提供的三種方式,還有一種特殊的方式是在函式層面,就是遞迴。
本以為控制流部分其實沒有什麼好說的,三種基本控制方式都是顯而易見的,但是,最近一直研究nfa,發現真是難懂,但是**寫出來就是基本的控制流組成的,後來又想起kmp演算法,排序演算法,發現這些都是基本控制流組成的。於是我猜想控制流不是簡單的表面上的東西,這東西和演算法是緊密相關的。
在沒有展開說之前,我想說一句我一直以來覺得非常有哲學的一句話「計算機是簡單的」!
你仔細想想,如果去除所有這些複雜邏輯,計算機本身就是乙個電子與器件的組合,他能做的事情也是0 1 的輸出。至於為什麼有些人包括本人都覺得計算機學習來總是有障礙,主要的原因還是思維的方式問題。
我們很容易思考乙個順序執行過程的演算法,比如說今天做什麼,明天做什麼,後天做什麼等等。但是分支和迴圈,就很難理解了,尤其是迴圈和分支組合的時候。
首先我們要明白為什麼我們很容易理解乙個順序過程的演算法,因為這種思維方式是線性的,畫個圖就明白了
熟悉線性表的同學肯定熟悉這樣的結構。對於這樣的結構我們還是很容易理解的。
如果單純的是分支結構,我們也是很好理解的,因為分支結構雖然說是一種類似於樹狀的一種圖狀結構,但是單純的某乙個分支其實還是線性的結構。
123, 124, 125 都是線性的,所以這個還好理解。這也符合我們的日常思維,比如說天氣晴朗,我們去哪玩,天氣不好,我們去哪玩!
迴圈結構的特點是迭代行為
1212121, 從某種意義上說這是線性的執行過程,但是從形象化的表示可以看出只是乙個具有迴路的圖。我們對於迴路的邏輯思維是及其不擅長的。還記得1+2+…+100d的求和公式嗎?為了解決這個求和問題,我們是不是還找了一些規律,用來簡化計算。其實,對於計算機來說這就是乙個迭代的加法操作的過程。計算機很容易解決這個問題,也不需要什麼計算公式,我只要依據簡單的加法規則,迭代執行加法操作就行了。所以當你的計算機老師說寫乙個1到n值求和的函式,你也不需要使用什麼計算公式,你直接利用迴圈具有迭代這一特徵就能很好的解決這個問題。
然而,還是我說的,我們及其不適應這種思考問題的方式,因為迭代的過程是個多步的線性過程,我們不知道這個多步執行的過程中前乙個過程的狀態值是多少,我們很難有乙個確定性的輸入,如果配合上分支結構, 這裡的不確定性就更大了,但是,這對於計算機來說確實輕而易舉的,不論你是什麼執行方式,我都是一步一狀態,我能很好的確定下一步執行之前,我的輸入是個什麼狀態。
遞迴其實也是一種迭代,對於c語言遞迴的表現是基於函式的,迭代的變現是基於迴圈的。遞迴的難以理解的主要原因是遞迴中的過程的狀態更是匪夷所思,不好理解。尾遞迴其實可以直接使用迴圈迭代實現。
順序結構類似線性表,分支類似樹形結構,迴圈類似圖狀結構
如果你學過資料結構,你就能明白為什麼樹形結構和圖論那部分的內容那麼難以理解,或者說不好理解,就是這個原因。
C語言《三》 控制流
就說說switch語句吧,老不用,都快忘了 switch語句是一種多路判定語句,它測試表示式是否與一些常量整數值中的某乙個值匹配,並執行相應的分支動作,形式如下 switch 表示式 while c getchar c n c t for i 0 i i 其中由於 while中沒有初始化或重新初始化...
C語言控制流
if else語句 include intmain if else語句,先判斷括號內語句,再執行對應內容 switch語句 include intmain return0 for迴圈 include intmain for 表示式1,表示式2,表示式3 等價於while 表示式2 while先計算表...
C語言 控制流
0715 一 三大控制結構簡介 順序結構 選擇結構 if if else if else if else if else switch case 迴圈結構 while do while for 二 語句和塊 每乙個語句都是以 結束,獨佔一行。空語句 語句塊 用 包圍的部分。三 選擇結構 注意 if....