欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

1. 圖示流程

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

2. 代碼流程

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

        do…while() 語(yǔ)句的代碼流程也很簡(jiǎn)單,程序執(zhí)行到 do…while() 語(yǔ)句的時(shí)候,會(huì)先執(zhí)行語(yǔ)句塊(也叫循環(huán)體)中的內(nèi)容,執(zhí)行完一次后,就會(huì)判斷表達(dá)式的內(nèi)容是真還是假,如果是真,那么就繼續(xù)執(zhí)行語(yǔ)句塊的內(nèi)容,如果是假,那么就不再執(zhí)行語(yǔ)句塊的內(nèi)容,而是退出該循環(huán)。在寫(xiě) do…while() 語(yǔ)句的時(shí)候 while 后面那個(gè)分號(hào)千萬(wàn)不能掉了,這點(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)語(yǔ)句會(huì)先判斷條件,當(dāng)條件為真的時(shí)候才會(huì)執(zhí)行循環(huán)體,當(dāng)條件為假的時(shí)候直接就退出了循環(huán)體。也就是說(shuō),while() 語(yǔ)句循環(huán)體里面的內(nèi)容可能一次都不會(huì)被執(zhí)行,這就是 while() 語(yǔ)句和 do…while() 語(yǔ)句最大的區(qū)別。

2. 代碼流程

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

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

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)的圖示代碼流程不能說(shuō)毫不相干,只能說(shuō)一模一樣。但是其代碼表現(xiàn)流程有點(diǎn)區(qū)別,下面來(lái)重點(diǎn)講解下for() 循環(huán)的代碼流程。

2. 代碼流程

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

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

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

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

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

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

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

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)簽;

       讀到這里可能有讀者會(huì)發(fā)現(xiàn),為啥前面都有圖解,goto 語(yǔ)句沒(méi)有,是作者不會(huì)了嗎?哈哈,其實(shí)回答這個(gè)問(wèn)題我只能說(shuō)是也不是。回答是,是因?yàn)榇_實(shí)沒(méi)圖解,因?yàn)?goto 語(yǔ)句太簡(jiǎn)單了,簡(jiǎn)單到把我給整不會(huì)了?;卮鸩皇牵且?yàn)楹?jiǎn)單到?jīng)]必要,哈哈~~

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

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

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

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

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

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

相關(guān)文章

  • C++中spdlog的簡(jiǎn)單使用示例

    C++中spdlog的簡(jiǎn)單使用示例

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

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

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

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

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

    C語(yǔ)言金幣陣列問(wèn)題解決方法

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論