亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言實例講解四大循環(huán)語句的使用

 更新時間:2022年05月05日 10:44:45   作者:嵌入式宇宙  
C語言有四大循環(huán)語句,他們之間可以進(jìn)行任意轉(zhuǎn)換。本文將首先對其語法進(jìn)行講解,然后通過一個實例用四種循環(huán)來實現(xiàn)。相信通過本文的學(xué)習(xí),大家都能夠?qū)語言循環(huán)語句有著熟練的掌握

一、do…while()循環(huán)

1. 圖示流程

       從上面圖示 do…while() 語句流程中可以看出,do…while() 語句會先進(jìn)入循環(huán)體執(zhí)行里面的內(nèi)容,然后再進(jìn)行條件判斷,當(dāng)條件為真,就繼續(xù)執(zhí)行循環(huán)體的內(nèi)容,當(dāng)條件為假就退出do…while() 語句。也就是說 do…while() 語句 最少會執(zhí)行一遍循環(huán)體里面的內(nèi)容。

2. 代碼流程

do {
    語句塊
} while (表達(dá)式);

        do…while() 語句的代碼流程也很簡單,程序執(zhí)行到 do…while() 語句的時候,會先執(zhí)行語句塊(也叫循環(huán)體)中的內(nèi)容,執(zhí)行完一次后,就會判斷表達(dá)式的內(nèi)容是真還是假,如果是真,那么就繼續(xù)執(zhí)行語句塊的內(nèi)容,如果是假,那么就不再執(zhí)行語句塊的內(nèi)容,而是退出該循環(huán)。在寫 do…while() 語句的時候 while 后面那個分號千萬不能掉了,這點新手尤其要注意

3. 示例代碼1到100求和)

源代碼:

#include <stdio.h>
int main()
{
    int i = 0, sum = 0;
    do {
        sum += i;
        i++;
    } while (i <= 100);
    printf("sum = %d\n", sum);
    return 0;
}

運行結(jié)果:

sum = 5050

二、while()循環(huán)

1. 圖示流程

        while() 循環(huán)語句會先判斷條件,當(dāng)條件為真的時候才會執(zhí)行循環(huán)體,當(dāng)條件為假的時候直接就退出了循環(huán)體。也就是說,while() 語句循環(huán)體里面的內(nèi)容可能一次都不會被執(zhí)行,這就是 while() 語句和 do…while() 語句最大的區(qū)別。

2. 代碼流程

while (表達(dá)式) {
    語句塊
}

       while() 循環(huán)語句的代碼流程也很簡單,就是先判斷表達(dá)式的內(nèi)容,當(dāng)表達(dá)式為真的時候,就執(zhí)行語句塊的內(nèi)容,語句塊中的內(nèi)容執(zhí)行完了后又會判斷表達(dá)式的值,直到表達(dá)式的值為假才會跳出語句塊中。

3. 示例代碼(1到100求和)

源代碼:

#include <stdio.h>
int main()
{
    int i = 0, sum = 0;
    while (i <= 100) {
        sum += i;
        i++;
    }
    printf("sum = %d\n", sum);
    return 0;
}

運行結(jié)果:

sum = 5050

三、for()循環(huán)

1. 圖示流程

       for() 循環(huán)的圖示代碼流程和 while() 循環(huán)的圖示代碼流程不能說毫不相干,只能說一模一樣。但是其代碼表現(xiàn)流程有點區(qū)別,下面來重點講解下for() 循環(huán)的代碼流程。

2. 代碼流程

for (表達(dá)式1; 表達(dá)式2; 表達(dá)式3) 
{
    語句塊
}

       for() 循環(huán)的代碼流程看著表達(dá)式挺多的,好像挺復(fù)雜,但其實不然,讓我來為大家進(jìn)行細(xì)致講解。

       for() 循環(huán)首先執(zhí)行表達(dá)式1,再執(zhí)行表達(dá)式2,當(dāng)表達(dá)式2的值為真的時候就會執(zhí)行語句塊的內(nèi)容,語句塊內(nèi)容執(zhí)行完后就會執(zhí)行表達(dá)式3,表達(dá)式3執(zhí)行完,又會跳轉(zhuǎn)執(zhí)行表達(dá)式2,當(dāng)表達(dá)式2為真,又執(zhí)行語句塊,相當(dāng)于循環(huán)一直在 表達(dá)式2 -> 語句塊 -> 表達(dá)式3 之間循環(huán)。當(dāng)表達(dá)式2的值為假的時候就會跳出循環(huán)。

for() 循環(huán)有幾個地方值得大家注意:

(1)表達(dá)式1只會在剛進(jìn) for 循環(huán)的時候執(zhí)行一次。

(2)在c99及之后的標(biāo)準(zhǔn)中,表達(dá)式1處可以定義變量,變量周期在整個for循環(huán)中。但是c98不允許這樣做,否則編譯器會報錯。

(3)表達(dá)式1、表達(dá)式2、表達(dá)式3 都可以不寫省略。但是當(dāng)表達(dá)式2省略不寫的時候意味著,編譯器在處理這里的時候這里不為假,從而會執(zhí)行語句塊。

3. 示例代碼(1到100求和)

源代碼:

#include <stdio.h>
int main()
{
    int i = 0, sum = 0;
    for (i = 0; i <= 100; i++) {
        sum += i;
    }    
    printf("sum = %d\n", sum);
    return 0;
}

運行結(jié)果:

sum = 5050

四、goto循環(huán)

1. 代碼流程

標(biāo)簽:
goto 標(biāo)簽;

       讀到這里可能有讀者會發(fā)現(xiàn),為啥前面都有圖解,goto 語句沒有,是作者不會了嗎?哈哈,其實回答這個問題我只能說是也不是。回答是,是因為確實沒圖解,因為 goto 語句太簡單了,簡單到把我給整不會了?;卮鸩皇?,是因為簡單到?jīng)]必要,哈哈~~

       其實通過代碼流程就可以看出,goto 語句確實很簡單,就是當(dāng)程序運行到 goto 那里的時候會跳轉(zhuǎn)到標(biāo)簽處接著運行,這種跳轉(zhuǎn)是無條件跳轉(zhuǎn),只要程序運行到 goto,就會跳轉(zhuǎn)?。?!標(biāo)簽處可以任意命名,命名規(guī)則必須遵循C語言標(biāo)識符命名法。標(biāo)簽可以寫在 goto 的前面,也可以寫在 goto 的后面,這點不受影響。程序運行到標(biāo)簽處不會做任何處理,只有g(shù)oto 才會跳轉(zhuǎn)到標(biāo)簽?zāi)抢?,上面兩個標(biāo)簽的地方名字需要一模一樣。

       其實說到goto語句,就不得不提一下goto的歷史了,其實在編程的時候大家有個約定俗成的規(guī)矩,那就是能不用goto的地方那就不用,為什么會這樣呢,其實就是我上面提到的,goto 語句會無條件跳轉(zhuǎn),這點就和其他三個循環(huán)不同。了解C語言的人都知道,C語言是面向過程編程,怎么理解面向過程編程呢,其實就是和人一樣,就是現(xiàn)做什么再做什么,人早上起來要先刷牙,再吃早餐。C語言也一樣,要使用變量,就得先定義變量。面向過程就類似這個道理。但是 goto 會無條件跳轉(zhuǎn),這就會讓讀代碼的人感覺很混亂,要在代碼中亂跳,并且使用不恰當(dāng)?shù)脑捦_(dá)不到自己想要的效果,這也因此使得大家能不用 goto 就盡量不使用 goto。但是在linux內(nèi)核代碼中,goto 卻會被常常用作一個判錯用途。先看下面示例代碼-2,結(jié)合代碼和大家一起講解。

2. 示例代碼-1(1到100求和)

源代碼:

#include <stdio.h>
int main()
{
    int i = 0, sum = 0;
loop:
    if (i <= 100) {
        sum += i;
        i++;
        goto loop;
    }  
    printf("sum = %d\n", sum);
    return 0;
}

運行結(jié)果:

sum = 5050

       寫這個代碼是想告訴大家,都是實現(xiàn) 1 到 100 求和,但是4種循環(huán)語句都可以做到,也就是說4種循環(huán)之間都可以相互轉(zhuǎn)換,具體想用哪種循環(huán)就全看大家自己的選擇了,但是為了遵循約定俗成的東西,除了特殊場景,大家還是盡量不要使用 goto 語句了。

3. 示例代碼-2

源代碼:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int *p1, *p2, *p3;
    p1 = malloc(10);
    if (p1 == NULL) {
        printf("malloc failed : 1\n");
        goto loop_1;
    }
    *p1 = 1;
    p2 = malloc(20);
    if (p2 == NULL) {
        printf("malloc failed : 2\n");
        goto loop_2;
    }
    *p2 = 2;
    p3 = malloc(30);
    if (p3 == NULL) {
        printf("malloc failed : 3\n");
        goto loop_3;
    }
    *p3 = 3;
    printf("*p1 = %d, *p2 = %d, *p3 = %d\n", *p1, *p2, *p3);
loop_3:
    free(p2);
loop_2:
    free(p1);
loop_1:
    return 0;
}

運行結(jié)果:

*p1 = 1, *p2 = 2, *p3 = 3

       大家看看上面這段代碼,首先申請了10字節(jié)空間,如果申請失敗,那么我下面的代碼就沒有執(zhí)行的必要了,所以直接退出程序。申請成功就會繼續(xù)申請20字節(jié)空間,假如在這時什么失敗了,那么下面的代碼也同樣沒有執(zhí)行的必要,然后我也要退出程序,但是在退出程序前,需要將 p1 指向的那塊內(nèi)存給釋放掉,否則就會造成內(nèi)存泄漏。如果繼續(xù)申請成功,就會再申請30字節(jié)空間,如果申請失敗,那么也要退出程序,并且在退出前需要釋放前兩次申請的空間。上面使用 goto 語句有兩大優(yōu)勢,其一就是可讀性高,操作方便,不然就要在后面每次申請失敗的里面加上釋放前面申請的內(nèi)存的操作,很明顯如果這樣做,代碼移植效率就會很低,而且假如在中間加了一次申請內(nèi)存的操作,后面的地方就都要加上出錯釋放內(nèi)存的步驟。其二就是保持程序退出的地方統(tǒng)一,如果不這樣做,需要在每個出錯的地方加上 return 的操作,代碼可讀性沒有這樣做高。在linux內(nèi)核代碼種,像上面這樣使用 goto 語句的操作是經(jīng)常被用到的,很顯然上面這種做法很巧妙,其實在linux內(nèi)核代碼中還有很多巧妙的操作,如果可以的話,大家可以多讀讀linux源碼,對自己的編碼功底將會有很大的提升的。

到此這篇關(guān)于C語言實例講解四大循環(huán)語句的使用的文章就介紹到這了,更多相關(guān)C語言循環(huán)語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中spdlog的簡單使用示例

    C++中spdlog的簡單使用示例

    spdlog是一個開源、跨平臺、無依賴、只有頭文件的C++11日志庫,所以這篇文章主要來和大家介紹一下一個簡單的spdlog使用示例,感興趣的小伙伴可以了解一下
    2023-08-08
  • C++ leetcode之刪除并獲得點數(shù)的示例代碼

    C++ leetcode之刪除并獲得點數(shù)的示例代碼

    這篇文章主要介紹了C++ leetcode之刪除并獲得點數(shù)的示例代碼,本文給大家分享問題解析及解決方案,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • 深入講解C++數(shù)據(jù)類型轉(zhuǎn)換的相關(guān)函數(shù)的知識

    深入講解C++數(shù)據(jù)類型轉(zhuǎn)換的相關(guān)函數(shù)的知識

    這篇文章主要介紹了深入講解C++數(shù)據(jù)類型轉(zhuǎn)換的相關(guān)函數(shù)的知識,包括類型轉(zhuǎn)換運算符函數(shù)等內(nèi)容,需要的朋友可以參考下
    2015-09-09
  • C語言金幣陣列問題解決方法

    C語言金幣陣列問題解決方法

    這篇文章主要介紹了C語言金幣陣列問題解決方法,主要涉及數(shù)組的靈活運算,是一類非常經(jīng)典的算法,需要的朋友可以參考下
    2014-09-09
  • C++實現(xiàn)T型插補(bǔ)詳解

    C++實現(xiàn)T型插補(bǔ)詳解

    這篇文章主要介紹了C++實現(xiàn)T型插補(bǔ),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • C++淺析引用的定義與使用

    C++淺析引用的定義與使用

    引用是C++一個很重要的特性,顧名思義是某一個變量或?qū)ο蟮膭e名,對引用的操作與對其所綁定的變量或?qū)ο蟮牟僮魍耆葍r,這篇文章主要給大家總結(jié)介紹了C++中引用的相關(guān)知識點,需要的朋友可以參考下
    2022-07-07
  • CMake編譯中的庫文件和頭文件鏈接你了解嗎

    CMake編譯中的庫文件和頭文件鏈接你了解嗎

    這篇文章主要為大家詳細(xì)介紹了CMake編譯中的庫文件和頭文件鏈接,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C語言怎么連接兩個數(shù)組的內(nèi)容你知道嗎

    C語言怎么連接兩個數(shù)組的內(nèi)容你知道嗎

    這篇文章主要為大家介紹了C語言怎么連接兩個數(shù)組的內(nèi)容,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • C++實現(xiàn)數(shù)據(jù)結(jié)構(gòu)的順序表詳解

    C++實現(xiàn)數(shù)據(jù)結(jié)構(gòu)的順序表詳解

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)動態(tài)順序表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • opencv3/C++圖像濾波實現(xiàn)方式

    opencv3/C++圖像濾波實現(xiàn)方式

    今天小編就為大家分享一篇opencv3/C++圖像濾波實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評論