最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解C語言的邏輯控制

 更新時間:2014年07月04日 17:31:03   投稿:shichen2014  
這篇文章主要介紹了C語言的邏輯控制,對C語言的邏輯控制有較為深入的剖析,需要的朋友可以參考下

本文對C語言的邏輯控制做一番較為深入的探討,一般來說C語言的邏輯控制語句主要有如下的7種:

1、 goto 最強大,但一般只在特殊環(huán)境下使用。
2、 if else
3、 ?:
4、 switch case
5、 for
6、 while
7、 do while

自從dijkstra的論文Go To Statement Considered Harmful以后,C語言代碼很少看到goto了。(一般用在多次資源分配的錯誤處理上)
但,從計算機的角度來說,缺少goto(jmp指令)還真沒法干活。其實,goto是最符合我們的設(shè)計流程圖的。
將一個流程圖用goto來實現(xiàn)也最直觀。goto能真正讓我們做到心之所動,劍之所至。

接下來,分別考慮將2-7轉(zhuǎn)化為對應(yīng)的goto語言版本(等價于轉(zhuǎn)化為對應(yīng)匯編版本)。

2、if語句

if (條件1)
//代碼塊1
else
//代碼塊2

對應(yīng)goto:

t = 條件1;
if (t為真)goto true;
//代碼塊2
goto finish
true:
//代碼塊1
finish:

3、?: 和if else是等價的

只不過if語句為代碼塊,?:為表達(dá)式。

變量= (條件1)? 表達(dá)式1:表達(dá)式2;

goto版本:

t = 條件1;
if (t為真)
goto true;
//變量=表達(dá)式2
goto finish;
true:
//變量=表達(dá)式1
finish:

注意:?:里面的表達(dá)式盡量簡單,過于復(fù)雜的話,改用if語句實現(xiàn),這樣方便調(diào)試。

4、switch-case

switch (條件取值變量)
case 元素1 :
//語句塊1;
break;
case 元素2:
//語句塊2;
break;
...
case 元素N
//語句塊N;
break;
default:
//默認(rèn)處理。
break;
}

goto版本:

跳轉(zhuǎn)表={標(biāo)簽1,標(biāo)簽2,...,標(biāo)簽N }
goto 跳轉(zhuǎn)表[元素index]
//標(biāo)簽1:
//語句塊1
goto Finish
//標(biāo)簽2:
//語句塊2
goto Finish
...
//標(biāo)簽N:
//語句塊N
goto Finish
default:
//默認(rèn)處理。
Finish:

5、for語句

for (初始化語句;判斷語句;迭代語句)
//循環(huán)語句塊

goto版本:

//初始化語句;
if (判斷語句為否)
goto Finish;
loop:
//循環(huán)語句塊
//迭代語句
if (判斷語句為真)
goto loop;
Finish:

6、while語句

while(條件為真)
//代碼塊
//迭代塊

對應(yīng)goto版本:

loop:
t = 條件
if (不為真) goto Finish;
//代碼塊
//迭代塊
Finish:

7、do-while語句

do {
//語句塊1
//迭代塊1
} while (條件為真)

goto版本:

loop:
//語句塊1
//迭代塊1
if (條件為真) goto loop;

C語言的goto同匯編語句jmp系列指令邏輯上是完全一致的。

注意:

1、 關(guān)于條件,有個經(jīng)典的邏輯代數(shù)公式:
摩根公式:
!(A && B) = (!A) || (!B)
建議,對復(fù)雜邏輯,手動畫代數(shù)運算表
A B 結(jié)果
0 0 ?
0 1 ?
1 0 ?
1 1 ?
并保證單體測試的全覆蓋。

2、 邏輯操作和位操作是2組,需要區(qū)分開來。
與 或 反
邏輯: && || !
位: & | ~ ^ (異或)

3 強烈推薦在寫代碼前,在紙上畫完整的流程圖,梳理自己的設(shè)計思路。

相關(guān)文章

  • C++ abs函數(shù)實際應(yīng)用詳解

    C++ abs函數(shù)實際應(yīng)用詳解

    本文我們來講C++的abs函數(shù)以及實戰(zhàn)運用,C++中的abs函數(shù)。在C++中使用abs函數(shù)要注意存在兩種版本,一種是在stdlmb.h中定義的版本,另一個是在cmath頭文件中定義的。夷實上在stdlib.h文件是C的函數(shù),而cmath中的是C++版本
    2022-08-08
  • C++ I/O文件讀寫操作的示例代碼

    C++ I/O文件讀寫操作的示例代碼

    這篇文章主要介紹了C++ I/O文件讀寫操作的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 一文帶你快速了解C/C++標(biāo)準(zhǔn)庫中的ptrdiff_t

    一文帶你快速了解C/C++標(biāo)準(zhǔn)庫中的ptrdiff_t

    ptrdiff_t是C/C++標(biāo)準(zhǔn)庫中定義的一個與機器相關(guān)的數(shù)據(jù)類型,ptrdiff_t類型變量通常用來保存兩個指針減法操作的結(jié)果,下面這篇文章主要給大家介紹了關(guān)于C/C++標(biāo)準(zhǔn)庫中ptrdiff_t的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 深入淺析C語言與C++的區(qū)別與聯(lián)系

    深入淺析C語言與C++的區(qū)別與聯(lián)系

    這篇文章主要為大家介紹了深入的分析了C語言與C++的區(qū)別與聯(lián)系,文中通過詳細(xì)的示例進(jìn)行了對比,以便大家更容易的看懂理解,有需要的朋友可以借鑒參考下
    2021-11-11
  • C++11 std::shared_ptr總結(jié)與使用示例代碼詳解

    C++11 std::shared_ptr總結(jié)與使用示例代碼詳解

    這篇文章主要介紹了C++11 std::shared_ptr總結(jié)與使用,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • C語言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)希爾排序算法

    C語言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)希爾排序算法

    這篇文章主要為大家介紹了C語言希爾排序算法實現(xiàn)植物大戰(zhàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C語言實現(xiàn)2048游戲(ege圖形庫版)

    C語言實現(xiàn)2048游戲(ege圖形庫版)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)2048游戲,ege圖形庫版,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C++文件流讀寫操作詳解

    C++文件流讀寫操作詳解

    本文詳細(xì)講解了C++文件流讀寫操作的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • 詳解C++如何高效利用CPU緩存

    詳解C++如何高效利用CPU緩存

    高效利用CPU緩存是編寫高性能C++代碼的關(guān)鍵之一,所以這篇文章小編主要來和大家介紹一下C++如何實現(xiàn)高效利用CPU緩存,需要的可以參考一下
    2024-02-02
  • C語言中無符號與有符號及相加問題

    C語言中無符號與有符號及相加問題

    這篇文章主要介紹了C語言中無符號與有符號及相加問題,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08

最新評論

容城县| 岱山县| 阿巴嘎旗| 榆中县| 平凉市| 泸水县| 新巴尔虎右旗| 从江县| 当阳市| 化隆| 海伦市| 乌恰县| 微博| 凤山县| 綦江县| 广西| 措美县| 阳江市| 崇明县| 宣汉县| 虞城县| 天津市| 珲春市| 高尔夫| 寿光市| 尉氏县| 循化| 扎囊县| 灌阳县| 阳原县| 邓州市| 鄄城县| 庆城县| 八宿县| 读书| 枣庄市| 泽普县| 荔浦县| 平乐县| 赤峰市| 虹口区|