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

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

 更新時(shí)間:2022年05月05日 10:44:45   作者:嵌入式宇宙  
C語言有四大循環(huán)語句,他們之間可以進(jìn)行任意轉(zhuǎn)換。本文將首先對其語法進(jìn)行講解,然后通過一個(gè)實(shí)例用四種循環(huán)來實(shí)現(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() 語句的時(shí)候,會先執(zhí)行語句塊(也叫循環(huán)體)中的內(nèi)容,執(zhí)行完一次后,就會判斷表達(dá)式的內(nèi)容是真還是假,如果是真,那么就繼續(xù)執(zhí)行語句塊的內(nèi)容,如果是假,那么就不再執(zhí)行語句塊的內(nèi)容,而是退出該循環(huán)。在寫 do…while() 語句的時(shí)候 while 后面那個(gè)分號千萬不能掉了,這點(diǎn)新手尤其要注意

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;
}

運(yùn)行結(jié)果:

sum = 5050

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

1. 圖示流程

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

2. 代碼流程

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

       while() 循環(huán)語句的代碼流程也很簡單,就是先判斷表達(dá)式的內(nèi)容,當(dāng)表達(dá)式為真的時(shí)候,就執(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;
}

運(yùn)行結(jié)果:

sum = 5050

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

1. 圖示流程

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

2. 代碼流程

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

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

       for() 循環(huán)首先執(zhí)行表達(dá)式1,再執(zhí)行表達(dá)式2,當(dāng)表達(dá)式2的值為真的時(shí)候就會執(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的值為假的時(shí)候就會跳出循環(huán)。

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

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

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

(3)表達(dá)式1、表達(dá)式2、表達(dá)式3 都可以不寫省略。但是當(dāng)表達(dá)式2省略不寫的時(shí)候意味著,編譯器在處理這里的時(shí)候這里不為假,從而會執(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;
}

運(yùn)行結(jié)果:

sum = 5050

四、goto循環(huán)

1. 代碼流程

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

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

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

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

運(yùn)行結(jié)果:

sum = 5050

       寫這個(gè)代碼是想告訴大家,都是實(shí)現(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;
}

運(yùn)行結(jié)果:

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

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

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

相關(guān)文章

  • C++實(shí)現(xiàn)判斷一個(gè)字符串是否為UTF8或GBK格式的方法

    C++實(shí)現(xiàn)判斷一個(gè)字符串是否為UTF8或GBK格式的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)判斷一個(gè)字符串是否為UTF8或GBK格式的方法,涉及C++針對字符編碼的遍歷、判斷、編碼轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • 基于Qt實(shí)現(xiàn)可拖動自定義控件

    基于Qt實(shí)現(xiàn)可拖動自定義控件

    這篇文章主要為大家詳細(xì)介紹了如何基于Qt實(shí)現(xiàn)可拖動自定義控件,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下
    2023-04-04
  • C++中發(fā)送HTTP請求的實(shí)現(xiàn)方式

    C++中發(fā)送HTTP請求的實(shí)現(xiàn)方式

    使用C++編程發(fā)送HTTP請求通常需要使用第三方的HTTP庫或框架,在C++中,有幾個(gè)受歡迎的HTTP庫可供選擇,例如Curl、Boost.Beast和cpp-httplib,另外,也可以自己實(shí)現(xiàn)socket來發(fā)送http請求,需要的朋友可以參考下
    2024-04-04
  • 淺談C++基類的析構(gòu)函數(shù)為虛函數(shù)

    淺談C++基類的析構(gòu)函數(shù)為虛函數(shù)

    本文重點(diǎn):應(yīng)該為多態(tài)基類聲明虛析構(gòu)器。一旦一個(gè)類包含虛函數(shù),它就應(yīng)該包含一個(gè)虛析構(gòu)器。如果一個(gè)類不用作基類或者不需具有多態(tài)性,便不應(yīng)該為它聲明虛析構(gòu)器。
    2015-10-10
  • 詳細(xì)聊聊c語言中的緩沖區(qū)問題

    詳細(xì)聊聊c語言中的緩沖區(qū)問題

    緩沖區(qū)又稱為緩存,它是內(nèi)存空間的一部分,也就是說在內(nèi)存空間中預(yù)留了一定的存儲空間,這些存儲空間用來緩沖輸入或輸出的數(shù)據(jù),這部分預(yù)留的空間就叫做緩沖區(qū),這篇文章主要給大家介紹了關(guān)于c語言中緩沖區(qū)問題的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • C/C++獲取Windows平臺CPU占用率的方法

    C/C++獲取Windows平臺CPU占用率的方法

    最近在做系統(tǒng)信息相關(guān)的接口,為了實(shí)現(xiàn)跨平臺,故在linux和Windows平臺獲取占用率信息,文章主要介紹Windows下的方法,文中給出了參考代碼,需要的朋友可以參考下
    2023-12-12
  • C語言遞歸實(shí)現(xiàn)線索二叉樹

    C語言遞歸實(shí)現(xiàn)線索二叉樹

    這篇文章主要介紹了C語言遞歸實(shí)現(xiàn)線索二叉樹,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • C語言函數(shù)聲明以及函數(shù)原型超詳細(xì)講解示例

    C語言函數(shù)聲明以及函數(shù)原型超詳細(xì)講解示例

    這篇文章主要介紹了C語言函數(shù)聲明以及函數(shù)原型超詳細(xì)講解,C語言代碼由上到下依次執(zhí)行,原則上函數(shù)定義要出現(xiàn)在函數(shù)調(diào)用之前,否則就會報(bào)錯(cuò)。但在實(shí)際開發(fā)中,經(jīng)常會在函數(shù)定義之前使用它們,這個(gè)時(shí)候就需要提前聲明
    2023-02-02
  • C語言回調(diào)函數(shù)的簡單運(yùn)用

    C語言回調(diào)函數(shù)的簡單運(yùn)用

    回調(diào)函數(shù)就是函數(shù)指針變量作為另外一個(gè)函數(shù)的參數(shù)而使用的一種應(yīng)用情形。本文就詳細(xì)的介紹一下C語言回調(diào)函數(shù)的簡單運(yùn)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C++ operator關(guān)鍵字(重載操作符)的用法詳解

    C++ operator關(guān)鍵字(重載操作符)的用法詳解

    下面小編就為大家?guī)硪黄狢++ operator關(guān)鍵字(重載操作符)的用法詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01

最新評論

鄄城县| 库尔勒市| 闽侯县| 江达县| 娄底市| 陕西省| 洪雅县| 门源| 靖宇县| 安福县| 宽甸| 铜山县| 察哈| 陆川县| 沈丘县| 运城市| 醴陵市| 北票市| 武冈市| 巴青县| 民县| 澄江县| 古丈县| 潢川县| 玉屏| 离岛区| 南阳市| 姜堰市| 漾濞| 塔城市| 长葛市| 瑞昌市| 革吉县| 阿克| 安图县| 阜阳市| 宁河县| 襄城县| 房山区| 荔波县| 原阳县|