中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C值循環語句(七)

發布時間:2020-07-07 19:57:11 來源:網絡 閱讀:870 作者:上帝之子521 欄目:編程語言

        在 C 語言中,我們會經常遇到循環的情況,那么這時候我們就得用循環的語句了。常見的循環結構有三種:do循環、while 循環以及 for 循環。循環語句的基本工作方式有:a> 通過條件表達式判定是否執行循環體;b> 條件表達式遵循 if 語句表達式的原則。

        我們先來看看這三種循環有何區別:a> do 語句是先執行后判斷,循環體至少執行一次; b> while 語句是先判斷后執行,循環體可能不執行; c> for 語句是先判斷后執行,相比于 while 更簡潔。

        A、do ... while 語句的循環方式,結構如下:

C值循環語句(七)

        B、 while 語句的循環方式,結構如下:

C值循環語句(七)

        C、for 語句的循環方式,結構如下:

C值循環語句(七)

        我們下來就做個累加和的示例代碼,看看三種循環的區別,代碼如下:

#include <stdio.h>

int f1(int n)
{
    int ret = 0;
    
    if( n > 0 )
    {
        do
        {
            ret += n;
            n--;
        }
        while( n > 0 );
    }
    
    return ret;
}

int f2(int n)
{
    int ret = 0;
    
    while( n > 0 )
    {
        ret += n;
        n--;
    }
    
    return ret;
}

int f3(int n)
{
    int ret = 0;
    int i = 0;
    
    for(i=1; i<=n; i++)
    {
        ret += i;
    }
    
    return ret;
}

int main()
{
    printf("f1 : %d\n", f1(10));
    printf("f2 : %d\n", f2(10));
    printf("f3 : %d\n", f3(10));
       
    return 0;
}

        編譯運行后得到結果如圖所示:

C值循環語句(七)

        我們看到程序正常運行,結果輸出跟我們預想的一樣。那么通過對比我們也可以看出三種循環語句的用法區別,如果就實現累加和的這種情況來看,顯然 for 循環更加有優勢。

        下來我們來分析下 break continue 的區別。break 表示終止循環的執行,continue 表示終止本次循環,進入下次循環執行。那么我們來思考下:switch 語句是否可以使用 continue 關鍵字?答案當然是不能的,因為 switch 語句不是循環語句,它只是選擇分支語句。

        下來我們來看個例子,看這個示例代碼會輸出什么?

#include <stdio.h>

void f1(int n)
{
    int i = 0;
    
    for(i=1; i<=n; i++)
    {
        if( (i % 2) == 0 )
        {
            break;
        }
        
        printf("%d ", i);
    }
    
    printf("\n");
}

void f2(int n)
{
    int i = 0;
    
    for(i=1; i<=n; i++)
    {
        if( (i % 2) == 0 )
        {
            continue;
        }
        
        printf("%d ", i);
    }
    
    printf("\n");
}

int main()
{
    f1(10);
    f2(10);
    
    return 0;
}

        我們先來分析下,f1(int n) 函數輸出一個 1 就終止循環了,因為是 break 跳出循環體本身了。f2(int n) 函數會打印出 1 3 5 7 9,換句話說,這個函數實現的功能是輸出奇數。因為如果被 2 能整除的話,就 跳過本次循環繼續下一次循環。 那么編譯運行后結果如下,證實了我們的分析是對的。

C值循環語句(七)

        那么 do ... while 循環還有這種 while(0) 的這種玩法,我們來看下面這個示例代碼:

#include <stdio.h>
#include <malloc.h>

int func(int n)
{
    int i = 0;
    int ret = 0;
    int* p = (int*)malloc(sizeof(int) * n);
    
    do
    {
        if( NULL == p ) break;
        
        if( n < 5 ) break;

        if( n > 100) break;
        
        for(i=0; i<n; i++)
        {
            p[i] = i;
            printf("%d\n", p[i]);
        }
        
        ret = 1;
    }while( 0 );
    
    printf("free(p)\n");
    
    free(p);
    
    return ret;
}

int main()
{
    if( func(7) )
    {
        printf("OK\n");
    }
    else
    {
        printf("ERROR\n");
    }

    return 0;
}

        為什么要使用 while(0) 的這種用法呢?在本例中是為了避免由于不釋放 p 指針而造成的內存泄漏。如果直接使用 return,那么會造成內存泄漏。我們來看看運行效果

C值循環語句(七)

        那么如果 main 函數中輸入的是 2 呢?我們來看看效果

C值循環語句(七)

        我們看到不管輸入的是幾,程序依然會執行到 free(p) 那句,去釋放掉申請的內存。這樣就不會造成內存的泄漏問題了。關于循環語句的總結就是:1、for 循環是先進行判斷再進入循環體,并且它適合于循環次數固定的場合;2、while 循環是先進行判斷再進入循環體執行,它適合于循環次數不定的場合;3、do ... while 循環是先執行循環體再進行條件判斷,它至少執行一次循環體。后面我們會繼續對 C 語言的學習。


         歡迎大家一起來學習 C 語言,可以加我QQ:243343083

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

交城县| 阳谷县| 忻州市| 双柏县| 苏州市| 寿宁县| 海盐县| 石柱| 庆城县| 揭阳市| 天台县| 偃师市| 睢宁县| 甘肃省| 修武县| 武隆县| 天等县| 金堂县| 静安区| 舞钢市| 黑水县| 河间市| 庐江县| 崇州市| 灵武市| 涞水县| 吉林省| 三门县| 宁阳县| 尤溪县| 平邑县| 青冈县| 德令哈市| 花莲县| 中卫市| 自贡市| 增城市| 朝阳市| 寿阳县| 托克逊县| 五家渠市|