23intmain()4{56printf("Hello-1\n");7printf("Hello-2\n");8printf("Hello-3\n");910return0;11}程序運行后,會按順序執行第6、7、8行語句,于是輸出結果為:2.其他運行流程但很多時候,我們并不想要按照默認的運行流程" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

【C語言】09-流程控制

系統 1872 0

前言

1.默認的運行流程

默認情況下,程序的運行流程是這樣的:運行程序后,系統會按書寫順序執行程序中的每一行代碼。比如下面的程序

      
         1
      
       #include <stdio.h>

      
         2
      
      
         3
      
      
        int
      
      
         main()

      
      
         4
      
      
        {

      
      
         5
      
      
         6
      
           printf(
      
        "
      
      
        Hello-1\n
      
      
        "
      
      
        );

      
      
         7
      
           printf(
      
        "
      
      
        Hello-2\n
      
      
        "
      
      
        );

      
      
         8
      
           printf(
      
        "
      
      
        Hello-3\n
      
      
        "
      
      
        );

      
      
         9
      
      
        10
      
      
        return
      
      
        0
      
      
        ;

      
      
        11
      
       }
    

程序運行后,會按順序執行第6、7、8行語句,于是輸出結果為:

2.其他運行流程

很多時候,我們并不想要按照默認的運行流程去走,比如想在某個條件成立的情況下才執行某一段代碼,否則不執行。比如微信的這個界面:

【C語言】09-流程控制

如果用戶點擊了注冊按鈕,我們就執行“跳轉到注冊界面”的代碼;如果用戶點擊了登錄按鈕,我們就執行“跳轉到登錄界面”的代碼。如果用戶沒做出任何操作,就不執行前面所說的兩段代碼。要想實現這種功能,那就要學會如何去控制程序的運行流程。

3.流程結構

為了方便我們控制程序的運行流程,C語言提供3種流程結構,不同的流程結構可以實現不同的運行流程。這3種流程結構分別是:

  • 順序結構:默認的流程結構。按照書寫順序執行每一條語句。
  • 選擇結構:對給定的條件進行判斷,再根據判斷結果來決定執行哪一段代碼。
  • 循環結構:在給定條件成立的情況下,反復執行某一段代碼。

下面是這3種結構的流程圖,大致預覽一下即可

【C語言】09-流程控制

一、順序結構

順序結構是3種結構中最簡單的,也是默認的流程結構:程序中的語句是按照書寫順序執行的。在 文章開頭 開始列出的代碼段,就是順序結構,這里就不多介紹了。

二、選擇結構1-if語句

C語言中選擇結構的實現方式有兩種:if語句和switch語句。先來看下if語句的使用,而if語句的形式是有好多種的。

1.形式1

先來看看if語句最簡單的形式

1> 簡介

      
        1
      
      
        if
      
      
         ( 條件 )

      
      
        2
      
      
        {

      
      
        3
      
      
            語句1;

      
      
        4
      
      
            語句2;

      
      
        5
      
      
            ....

      
      
        6
      
       }
    

如果if右邊小括號()中的條件成立,也就是為“真”時,就會執行第2~6行大括號{}中的語句;如果條件為假,就不執行大括號{}中的語句。這里的if是關鍵字。

2> 舉例

      
        1
      
      
        int
      
       a = 
      
        7
      
      
        ;

      
      
        2
      
      
        3
      
      
        if
      
      
         ( a )

      
      
        4
      
      
        {

      
      
        5
      
           printf(
      
        "
      
      
        條件a成立\n
      
      
        "
      
      
        );

      
      
        6
      
           printf(
      
        "
      
      
        a的值為真
      
      
        "
      
      
        );

      
      
        7
      
       }
    

C語言規定所有非0值都為“真”,而a的值是7,因此第3行的條件是成立的,接著就會執行第5、6行代碼。輸出結果如下:

      
        1
      
      
        條件a成立

      
      
        2
      
       a的值為真
    

如果將a的值改為0,那么第3行的條件就不成立,就不會執行第5、6行代碼

3> 省略大括號{}

如果if后面大括號{}中只有一行代碼時,可以省略大括號。形式如下:

      
        if
      
      
         ( 條件 )
    語句1;
      
    

注意:如果條件成立,只會執行if后面的第1條語句;如果條件不成立,就不會執行if后面的第1條語句。

      
        1
      
      
        int
      
       a = 
      
        7
      
      
        ;

      
      
        2
      
      
        3
      
      
        if
      
       ( a > 
      
        9
      
      
         )

      
      
        4
      
           printf(
      
        "
      
      
        aaa
      
      
        "
      
      
        );

      
      
        5
      
           printf(
      
        "
      
      
        bbb
      
      
        "
      
      );
    

因為第3行的a>9是不成立的,所以不會執行第4行代碼。而第5行代碼跟if語句是沒有任何練習的,因此,第5行代碼照常執行。于是會看到屏幕上只輸出: 。

由于第5行代碼跟if語句是沒有任何聯系的,所以一般會把代碼寫成下面這樣:

      
        1
      
      
        int
      
       a = 
      
        7
      
      
        ;

      
      
        2
      
      
        3
      
      
        if
      
       ( a > 
      
        9
      
      
         )

      
      
        4
      
           printf(
      
        "
      
      
        aaa
      
      
        "
      
      
        );

      
      
        5
      
       printf(
      
        "
      
      
        bbb
      
      
        "
      
      );
    

為了保證代碼的可讀性,不建議省略大括號!??!

4> 語句嵌套

if語句內部是可以嵌套其他if語句的,如下面的例子

      
         1
      
      
        int
      
       a = 
      
        7
      
      
        ;

      
      
         2
      
      
         3
      
      
        if
      
       ( a > 
      
        0
      
      
         )

      
      
         4
      
      
        {

      
      
         5
      
           printf(
      
        "
      
      
        a的值大于0\n
      
      
        "
      
      
        );

      
      
         6
      
      
         7
      
      
        if
      
       ( a<
      
        9
      
      
         )

      
      
         8
      
      
            {

      
      
         9
      
               printf(
      
        "
      
      
        a的值小于9
      
      
        "
      
      
        );

      
      
        10
      
      
            }

      
      
        11
      
       }
    

第3行的a>0是成立的,因此會按順序執行第4~11大括號中的代碼。執行到第7行的時候,a<9也是成立的,因此會執行第9行代碼。輸出結果:

      
        1
      
      
        a的值大于0

      
      
        2
      
       a的值小于9
    

5> 使用注意1

有些人習慣寫完一行代碼就在后面加個分號";",于是寫if語句的時候,他們可能會這樣寫:

      
        1
      
      
        int
      
       a = 
      
        6
      
      
        ;

      
      
        2
      
      
        if
      
       ( a>
      
        8
      
      
         );

      
      
        3
      
      
        {

      
      
        4
      
           printf(
      
        "
      
      
        a大于8
      
      
        "
      
      
        );

      
      
        5
      
       }
    

如果第2行尾部的分號,其實一個分號也是一條語句,這個叫做“空語句”。第2行的a>8不成立,所以不會執行后面的“空語句”。而后面的大括號{}跟if語句是沒有聯系的,因此會正常執行,于是會看到輸出:

      a大于8
    

所以要非常小心, 千萬不要在if的小括號后面添加分號 。

第3~5行的內容是一個獨立的“代碼塊”:

      
        1
      
      
        {

      
      
        2
      
           printf(
      
        "
      
      
        a大于8
      
      
        "
      
      
        );

      
      
        3
      
       }
    

6> 使用注意2

下面的寫法從語法的角度看是對的:

      
        int
      
       a = 
      
        10
      
      
        ;


      
      
        if
      
       (a = 
      
        0
      
      
        ) {
    printf(
      
      
        "
      
      
        條件成立
      
      
        "
      
      
        );
} 
      
      
        else
      
      
         {
    printf(
      
      
        "
      
      
        條件不成立
      
      
        "
      
      
        );
}
      
    

上述代碼是完全合理的,編譯器不會報錯,只是個警告而已。因 為a為0,所以為"假", 輸出結果是: " 條件不成立 "

這里隱藏著 很大的陷阱在:

假設你本來是想判斷a是否為0,那么本應該寫if (a == 0),若你誤寫成了if (a = 0),那將是一件非??膳碌氖虑?,因為編譯器又不報錯,這樣的BUG就難找了。因此, 像a==0這樣的表達式,最好寫成0==a,若你誤寫成0=a,編譯器會直接報錯的 。

      
        //
      
      
         不推薦
      
      
        if
      
       (a == 
      
        0
      
      
        ) {
}


      
      
        //
      
      
         推薦
      
      
        if
      
       (
      
        0
      
       ==
      
         a) {
}
      
    

7> 使用注意3

在C語言中,可以不保存關系運算的結果。因此,下面的寫法是合法的:

      
        1
      
      
        int
      
       a = 
      
        10
      
      
        ;

      
      
        2
      
       a > 
      
        10
      
      
        ;

      
      
        3
      
       a == 
      
        0
      
      ;
    

這里又是一個陷阱,假設你的本意是想給 a賦值為0,那么本應該寫a = 0; ,若你誤寫成a == 0; ,那將又是一個非常難找的BUG,因為編譯器根本不會報錯。在1993年的時候,這個BUG差點讓一樁價值2000萬美元的硬件產品生意告吹,因為如果這個BUG不解決,這個產品就沒辦法正常使用

2.形式2

if還可以跟關鍵字else一起使用

1> 簡介

      
        1
      
      
        if
      
      
         ( 條件 )

      
      
        2
      
      
        {

      
      
        3
      
      
            語句1;

      
      
        4
      
      
        }

      
      
        5
      
      
        else
      
      
        6
      
      
        {

      
      
        7
      
      
            語句2;

      
      
        8
      
       }
    

如果條件成立,就會執行if后面大括號{}中的語句;如果條件不成立,就會執行else后面大括號{}中的語句??傊瑑蓚€大括號中一定會有1個被執行,而且只能執行的1個。

為了減少代碼行數,你也可以寫成下面的格式:

      
        1
      
      
        if
      
      
         ( 條件 ) {

      
      
        2
      
      
            語句1;

      
      
        3
      
       } 
      
        else
      
      
         {

      
      
        4
      
      
            語句2;

      
      
        5
      
       }
    

當然,也可以省略大括號,寫成下面的格式:

      
        1
      
      
        if
      
      
         ( 條件 )

      
      
        2
      
      
            語句1;

      
      
        3
      
      
        else
      
      
        4
      
           語句2;
    

如果條件成立,就執行if后面的第1條語句;如果條件不成立,就執行else后面的第1條語句。但還是不建議省略大括號{}。

2> 舉例

      
        1
      
      
        int
      
       a = 
      
        10
      
      
        ;

      
      
        2
      
      
        if
      
       ( a==
      
        0
      
      
         ) {

      
      
        3
      
           printf(
      
        "
      
      
        a等于0
      
      
        "
      
      
        );

      
      
        4
      
       } 
      
        else
      
      
         {

      
      
        5
      
           printf(
      
        "
      
      
        a不等于0
      
      
        "
      
      
        );

      
      
        6
      
       }
    

第2行的a==0不成立,所以會執行第5行代碼,輸出結果:

      a不等于0
    

3.形式3

if和else還有一種比較復雜的用法

1> 簡介

      
         1
      
      
        if
      
      
         ( 條件1 )

      
      
         2
      
      
        {

      
      
         3
      
      
            語句1;

      
      
         4
      
      
        }

      
      
         5
      
      
        else
      
      
        if
      
      
         ( 條件2 )

      
      
         6
      
      
        {

      
      
         7
      
      
            語句2;

      
      
         8
      
      
        }

      
      
         9
      
      
        else
      
      
        if
      
      
         ( 條件3 )

      
      
        10
      
      
        {

      
      
        11
      
      
            語句3;

      
      
        12
      
      
        }

      
      
        13
      
      
        ...

      
      
        14
      
      
        else
      
      
        15
      
      
        {

      
      
        16
      
      
            其他語句;

      
      
        17
      
       }
    
  • 如果條件1成立,就執行條件1后面大括號{}中的內容:第2~4行
  • 如果條件1不成立,條件2成立,就執行條件2后面大括號{}中的內容:第6~8行
  • 如果條件1、條件2都不成立,條件3成立,就執行條件3后面大括號{}中的內容:第10~12行
  • 第13行的...表示可以有無限個else if
  • 如果所有的條件都不成立,就會執行else后面大括號{}中的內容:第15~17行

注意:這么多大括號中,只有1個大括號內的代碼會被執行。跟之前一樣,所有的大括號都可以省略,但是不建議省略。必要的時候,最后面的else那一段(第14~17行)是可以省略的。

2> 舉例

      
        1
      
      
        int
      
       a = 
      
        10
      
      
        ;

      
      
        2
      
      
        if
      
       ( a==
      
        0
      
      
         ) {

      
      
        3
      
           printf(
      
        "
      
      
        a等于0
      
      
        "
      
      
        );

      
      
        4
      
       } 
      
        else
      
      
        if
      
      ( a>
      
        0
      
      
         ) {

      
      
        5
      
           printf(
      
        "
      
      
        a大于0
      
      
        "
      
      
        );

      
      
        6
      
       } 
      
        else
      
      
         {

      
      
        7
      
           printf(
      
        "
      
      
        a小于0
      
      
        "
      
      
        );

      
      
        8
      
       }
    

第2行中的a==0不成立,接著會檢查第4行。第4行的a>0成立,因此會執行第5行代碼。輸出結果:

      a大于0
    

如果a的值是負數,那么第2、4行的條件都不成立,于是就會執行第7行代碼。

三、選擇結構2-switch語句

1.形式

先來看看switch語句的使用形式:

      
         1
      
      
        switch
      
      
        (整型表達式)

      
      
         2
      
      
        {

      
      
         3
      
      
        case
      
      
         數值1:

      
      
         4
      
      
                語句1;

      
      
         5
      
      
        break
      
      
        ;

      
      
         6
      
      
        case
      
      
         數值2:

      
      
         7
      
      
                語句2;

      
      
         8
      
      
        break
      
      
        ;

      
      
         9
      
      
            ... ...

      
      
        10
      
      
        case
      
      
         數值n:

      
      
        11
      
      
                語句n;

      
      
        12
      
      
        break
      
      
        ;

      
      
        13
      
      
        default
      
      
         :

      
      
        14
      
               語句n+
      
        1
      
      
        ;

      
      
        15
      
      
        break
      
      
        ;

      
      
        16
      
       }
    
  • 當整型表達式的值等于“數值1”時,就會執行“語句1”,后面的break表示退出整個switch語句,也就是直接跳到第16行代碼;
  • 當整形表達式的值等于“數值2”時,就會執行“語句2”;后面的以此類推。如果在數值1~數值n中,沒有一個值等于整型表達式的值,那么就會執行default中的語句n+1。
  • 由于所有的case后面都有個break,因此執行完任意一個case中的語句后,都會直接退出switch語句

2.舉例

      
         1
      
      
        int
      
       a = 
      
        10
      
      
        ;

      
      
         2
      
      
         3
      
      
        switch
      
      
         (a) {

      
      
         4
      
      
        case
      
      
        0
      
      
        :

      
      
         5
      
               printf(
      
        "
      
      
        這是一個0
      
      
        "
      
      
        );

      
      
         6
      
      
        break
      
      
        ;

      
      
         7
      
      
        case
      
      
        5
      
      
        :

      
      
         8
      
               printf(
      
        "
      
      
        這是一個5
      
      
        "
      
      
        );

      
      
         9
      
      
        break
      
      
        ;

      
      
        10
      
      
        case
      
      
        10
      
      
        :

      
      
        11
      
               printf(
      
        "
      
      
        這是一個10
      
      
        "
      
      
        );

      
      
        12
      
      
        break
      
      
        ;

      
      
        13
      
      
        default
      
      
        :

      
      
        14
      
               printf(
      
        "
      
      
        什么也不是
      
      
        "
      
      
        );

      
      
        15
      
      
        break
      
      
        ;

      
      
        16
      
       }
    

因為a的值剛好等于第10行case后面的10,所以會執行第11行代碼,輸出結果:

      這是一個10
    

3.break

break關鍵字的作用是退出整個switch語句。默認的格式中,每個case后面都有個break,因此執行完case中的語句后,就會退出switch語句。

1> 如果某個case后面沒有break,意味著執行完這個case中的語句后,會按順序執行后面所有case和default中的語句,直到遇到break為止

      
         1
      
      
        int
      
       a = 
      
        0
      
      
        ;

      
      
         2
      
      
         3
      
      
        switch
      
      
         (a) {

      
      
         4
      
      
        case
      
      
        0
      
      
        :

      
      
         5
      
               printf(
      
        "
      
      
        這是一個0\n
      
      
        "
      
      
        );

      
      
         6
      
      
        case
      
      
        5
      
      
        :

      
      
         7
      
               printf(
      
        "
      
      
        這是一個5\n
      
      
        "
      
      
        );

      
      
         8
      
      
        case
      
      
        10
      
      
        :

      
      
         9
      
               printf(
      
        "
      
      
        這是一個10\n
      
      
        "
      
      
        );

      
      
        10
      
      
        break
      
      
        ;

      
      
        11
      
      
        default
      
      
        :

      
      
        12
      
               printf(
      
        "
      
      
        什么也不是\n
      
      
        "
      
      
        );

      
      
        13
      
      
        break
      
      
        ;

      
      
        14
      
       }
    
  • 由于變量a的值等于第4行case后面的0,因此肯定會執行第5行代碼。
  • 由于case 0中沒有break語句,就不會退出switch語句,繼續往下執行代碼。
  • 由于a的值已經等于第4行case的值,接著不會再判斷a的值是否等于其他case的值了,直接按順序執行第7、9行代碼。在第10行有個break,接著就會退出switch語句。
  • 輸出結果為:
      
        1
      
      
        這是一個0

      
      
        2
      
      
        這是一個5

      
      
        3
      
       這是一個10
    

如果把a的值改為5,輸出結果為:

      
        1
      
      
        這是一個5

      
      
        2
      
       這是一個10
    

2> 在某些時候,我們確實沒有必要在每一個case后面添加break。下面舉一個例子:判斷分數的優良中差等級(100分滿分)。

      
         1
      
      
        int
      
       score = 
      
        77
      
      
        ;

      
      
         2
      
      
         3
      
      
        switch
      
       (score/
      
        10
      
      
        ) {

      
      
         4
      
      
        case
      
      
        10
      
      
        :

      
      
         5
      
      
        case
      
      
        9
      
      
        :

      
      
         6
      
               printf(
      
        "
      
      
        優秀
      
      
        "
      
      
        );

      
      
         7
      
      
        break
      
      
        ;

      
      
         8
      
      
         9
      
      
        case
      
      
        8
      
      
        :

      
      
        10
      
               printf(
      
        "
      
      
        良好
      
      
        "
      
      
        );

      
      
        11
      
      
        break
      
      
        ;

      
      
        12
      
      
        13
      
      
        case
      
      
        7
      
      
        :

      
      
        14
      
      
        case
      
      
        6
      
      
        :

      
      
        15
      
               printf(
      
        "
      
      
        中等
      
      
        "
      
      
        );

      
      
        16
      
      
        break
      
      
        ;

      
      
        17
      
      
        18
      
      
        default
      
      
        :

      
      
        19
      
               printf(
      
        "
      
      
        差勁
      
      
        "
      
      
        );

      
      
        20
      
      
        break
      
      
        ;

      
      
        21
      
       }
    
  • 當score的范圍是90~100,score/10的值為10或9時,就會執行第6行代碼,然后退出switch語句;
  • 當score的范圍是80~89,score/10的值為8時,就會執行第10行代碼,然后退出switch語句;
  • 當score的范圍是60~79,score/10的值為7或6時,就會執行第15行代碼,然后退出switch語句;
  • 當score的范圍并不是60~100,score/10的值并不在6~10范圍內時,就會執行第19行代碼,然后退出switch語句;
  • score的值是77,所以score/10的值是7,輸出結果: 中等

4.在case中定義變量

有時候,我們可能會想在case中定義一些變量,這個時候,就必須用大括號{}括住case中的所有語句。

      
         1
      
      
        int
      
       a = 
      
        10
      
      
        ;

      
      
         2
      
      
        int
      
       b = 
      
        4
      
      
        ;

      
      
         3
      
      
         4
      
      
        char
      
       op = 
      
        '
      
      
        -
      
      
        '
      
      
        ;

      
      
         5
      
      
         6
      
      
        switch
      
      
         (op)

      
      
         7
      
      
        {

      
      
         8
      
      
        case
      
      
        '
      
      
        +
      
      
        '
      
      
        :

      
      
         9
      
      
            {

      
      
        10
      
      
        int
      
       sum = a +
      
         b;

      
      
        11
      
               printf(
      
        "
      
      
        a+b=%d\n
      
      
        "
      
      
        , sum);

      
      
        12
      
      
        break
      
      
        ;

      
      
        13
      
      
            }

      
      
        14
      
      
        15
      
      
        case
      
      
        '
      
      
        -
      
      
        '
      
      
        :

      
      
        16
      
      
            {

      
      
        17
      
      
        int
      
       minus = a -
      
         b;

      
      
        18
      
               printf(
      
        "
      
      
        a-b=%d\n
      
      
        "
      
      
        , minus);

      
      
        19
      
      
        break
      
      
        ;

      
      
        20
      
      
            }

      
      
        21
      
      
        22
      
      
        default
      
      
        :

      
      
        23
      
               printf(
      
        "
      
      
        不能識別的符號
      
      
        "
      
      
        );

      
      
        24
      
      
        break
      
      
        ;

      
      
        25
      
       }
    

在第10、17分別定義兩個變量。輸出結果:

      a-b=
      
        6
      
    

四、循環結構1-while循環

假如要你在屏幕上重復輸出10次Hello World,你會怎么做?簡單,把下面的代碼拷貝10份就行了。

      
        1
      
       printf(
      
        "
      
      
        Hello World\n
      
      
        "
      
      );
    

沒錯,把上次代碼寫10遍,確實能實現功能。但是這樣的代碼太垃圾了,有很多的重復的代碼,這樣會使得代碼非常地臃腫,復用率低。因此,不建議這么做。

下次遇到像上面那樣重復執行某個操作時,首先要想到的應該是循環結構。所謂循環,就是重復執行某一個操作,C語言中有多種方式可以實現循環結構。先來看看while循環。

1.形式

      
        1
      
      
        while
      
      
         ( 條件 )

      
      
        2
      
      
        {

      
      
        3
      
      
            語句1;

      
      
        4
      
      
            語句2;

      
      
        5
      
      
            ....

      
      
        6
      
       }
    
  • 如果條件成立,就會執行循環體中的語句(“循環體”就是while后面大括號{}中的內容)。然后再次判斷條件,重復上述過程,直到條件不成立就結束while循環
  • while循環的特點: 如果while中的條件一開始就不成立,那么 循環體中的語句 永遠不會被執行

可以省略大括號{},但是只會影響到while后面的第一條語句。不建議省略大括號。

      
        1
      
      
        while
      
      
         ( 條件 )

      
      
        2
      
           語句1;
    

2.舉例

在屏幕上重復輸出10次Hello World,每輸出一次的換行。

      
        1
      
      
        int
      
       count = 
      
        0
      
      
        ;

      
      
        2
      
      
        while
      
       ( count < 
      
        10
      
      
         )

      
      
        3
      
      
        {

      
      
        4
      
           printf(
      
        "
      
      
        Hello World\n
      
      
        "
      
      
        );

      
      
        5
      
      
        6
      
           count++
      
        ;

      
      
        7
      
       }
    

如果省略第6行的count++,count就一直是0,那么count<10一直都是成立的,這個while循環將會陷入“死循環”,一直在重復執行第4行代碼。

3.注意

如果寫成下面這樣,也會讓程序進入“死循環”

      
        1
      
      
        int
      
       count = 
      
        0
      
      
        ;

      
      
        2
      
      
        3
      
      
        while
      
       ( count < 
      
        10
      
      
         );

      
      
        4
      
      
        {

      
      
        5
      
           printf(
      
        "
      
      
        Hello World\n
      
      
        "
      
      
        );

      
      
        6
      
      
        7
      
           count++
      
        ;

      
      
        8
      
       }
    
  • 注意第3行,while后面不小心加了個分號; ,一個分號表示一條空語句。
  • 可以看出:while循環只會影響到第3行的空語句,而第4~8行的代碼塊是不受while循環影響的
  • 由于count是0,那么count<10一直都是成立的,程序將會一直重復執行第3行的空語句,陷入死循環。

五、循環結構2-do while循環

形式如下:

      
        1
      
      
        do
      
      
         {

      
      
        2
      
      
            語句1;

      
      
        3
      
      
            語句2;

      
      
        4
      
      
            ...

      
      
        5
      
       } 
      
        while
      
       (條件);
    
  • 注意第5行,后面是加上一個分號;的
  • 當執行到do-while循環時,首先會執行一遍循環體中的語句(“循環體”就是do后面大括號{}中的內容)。接著判斷while中的條件,如果條件成立,就執行循環體中的語句。然后再次判斷條件,重復上述過程,直到條件不成立就結束while循環
  • do-while循環的特點: 不管while中的條件是否成立, 循環體中的語句 至少會被執行一遍
  • 其實do while循環的用法跟while循環是差不多的,這里就不舉例子了。

六、循環結構3-for循環

1.形式

for循環是所有循環結構中最復雜的。

      
        1
      
      
        for
      
      
         (語句1
        
          ;
        
         條件
        
          ;
        
         語句2) {

      
      
        2
      
      
            語句3;

      
      
        3
      
      
            語句4;

      
      
        4
      
      
            ...

      
      
        5
      
       }
    
  • for循環開始時,會先執行語句1,而且 在整個循環過程中只執行一次語句1
  • 接著判斷條件,如果條件成立,就會執行循環體中的語句(“循環體”就是for后面大括號{}中的內容)
  • 循環體執行完畢后,接下來會執行語句2,然后再次判斷條件,重復上述過程,直到條件不成立就結束for循環

2.舉例

      
        1
      
      
        for
      
       (
      
        int
      
       i = 
      
        0
      
      ; i<
      
        5
      
      ; i++
      
        )

      
      
        2
      
      
        {

      
      
        3
      
           printf(
      
        "
      
      
        %d  
      
      
        "
      
      
        , i);

      
      
        4
      
       }
    

輸出結果為:

      
        0
      
      
        1
      
      
        2
      
      
        3
      
      
        4
      
    

需要注意的是:變量i的作用域是第1~4行。一旦離開了這個for循環,變量i就失效了。

3.補充

如果for循環的初始化語句和循環一次后執行的語句是由多條語句組成的,就用逗號,隔開

      
        1
      
      
        for
      
       (
      
        int
      
       x = 
      
        0
      
      , y =
      
        0
      
      ; x<
      
        3
      
      ; x++, y+=
      
        2
      
      
        )

      
      
        2
      
      
        {

      
      
        3
      
           printf(
      
        "
      
      
        x=%d, y=%d \n
      
      
        "
      
      
        , x, y);

      
      
        4
      
       }
    

輸出結果:

      x=
      
        0
      
      , y=
      
        0
      
      
         
x
      
      =
      
        1
      
      , y=
      
        2
      
      
         
x
      
      =
      
        2
      
      , y=
      
        4
      
    

七、break和continue

接下來,介紹兩個比較重要的語句:break和continue。

1.break

前面在switch語句中已經用到了break,它的作用是跳出switch語句。它也可以用在循環結構中,這時候它的作用是跳出整個循環語句。

1> 舉例

這里以for循環為例子,break也可以用在while循環、do-while循環中。

      
        1
      
      
        for
      
       (
      
        int
      
       i = 
      
        0
      
      ; i<
      
        5
      
      ; i++
      
        ) {

      
      
        2
      
           printf(
      
        "
      
      
        i=%d \n
      
      
        "
      
      
        , i);

      
      
        3
      
      
        4
      
      
        if
      
       (i>
      
        2
      
      
        ) {

      
      
        5
      
      
        break
      
      
        ;

      
      
        6
      
      
            }

      
      
        7
      
       }
    

上面代碼的意思是當i>2時,就跳出整個for循環,也就是結束for循環,所以輸出結果是:

      i=
      
        0
      
      
         
i
      
      =
      
        1
      
      
         
i
      
      =
      
        2
      
      
         
i
      
      =
      
        3
      
    

2> for循環嵌套

先來看一個for循環嵌套的例子,嵌套的意思就是:for循環內部又一個for循環

      
        1
      
      
        for
      
       (
      
        int
      
       x = 
      
        0
      
      ; x<
      
        2
      
      ; x++
      
        ) {

      
      
        2
      
      
        for
      
       (
      
        int
      
       y = 
      
        0
      
      ; y<
      
        2
      
      ; y++
      
        ) {

      
      
        3
      
               printf(
      
        "
      
      
        x=%d, y=%d \n
      
      
        "
      
      
        , x, y);

      
      
        4
      
      
            }

      
      
        5
      
       }
    

輸出結果是:

      
        1
      
       x=
      
        0
      
      , y=
      
        0
      
      
        2
      
       x=
      
        0
      
      , y=
      
        1
      
      
        3
      
       x=
      
        1
      
      , y=
      
        0
      
      
        4
      
       x=
      
        1
      
      , y=
      
        1
      
    

這個時候如果在for循環中加入一個break,那么這個break究竟是跳出里面還是外面的for循環呢?

      
        1
      
      
        for
      
       (
      
        int
      
       x = 
      
        0
      
      ; x<
      
        2
      
      ; x++
      
        ) {

      
      
        2
      
      
        for
      
       (
      
        int
      
       y = 
      
        0
      
      ; y<
      
        2
      
      ; y++
      
        ) {

      
      
        3
      
               printf(
      
        "
      
      
        x=%d, y=%d \n
      
      
        "
      
      
        , x, y);

      
      
        4
      
      
        5
      
      
        break
      
      
        ;

      
      
        6
      
      
            }

      
      
        7
      
       }
    

注意第5行的break,這個break的作用是跳出里面的for循環,并非外面的for循環。所以輸出結果是:

      x=
      
        0
      
      , y=
      
        0
      
      
         
x
      
      =
      
        1
      
      , y=
      
        0
      
    

如果改變一下break的位置

      
        1
      
      
        for
      
       (
      
        int
      
       x = 
      
        0
      
      ; x<
      
        2
      
      ; x++
      
        ) {

      
      
        2
      
      
        for
      
       (
      
        int
      
       y = 
      
        0
      
      ; y<
      
        2
      
      ; y++
      
        ) {

      
      
        3
      
               printf(
      
        "
      
      
        x=%d, y=%d \n
      
      
        "
      
      
        , x, y);

      
      
        4
      
      
            }

      
      
        5
      
      
        6
      
      
        break
      
      
        ;

      
      
        7
      
       }
    

注意第6行的break,這個break的作用是跳出外面的for循環,并非里面的for循環。所以輸出結果是:

      x=
      
        0
      
      , y=
      
        0
      
      
         
x
      
      =
      
        0
      
      , y=
      
        1
      
    
  

規律已經很明顯了:break只會影響它所在的那個for循環

2.continue

continue只能使用在循環結構中,它的作用是跳過這一次循環,直接進入下一次循環。

這里以for循環為例子,continue也可以用在while循環、do-while循環中。

      
        1
      
      
        for
      
       (
      
        int
      
       x = 
      
        0
      
      ; x<
      
        10
      
      ; x++
      
        ) {

      
      
        2
      
      
        if
      
       (x%
      
        2
      
      ==
      
        0
      
      
        ) {

      
      
        3
      
      
        continue
      
      
        ;

      
      
        4
      
      
            }

      
      
        5
      
      
        6
      
           printf(
      
        "
      
      
        x=%d \n
      
      
        "
      
      
        , x);

      
      
        7
      
       }
    

注意第2行,當x%2==0,也就是當x是2的倍數時,就跳過這次循環,不執行第6行語句,直接進入下一次循環。輸出結果:

      
        1
      
       x=
      
        1
      
      
        2
      
       x=
      
        3
      
      
        3
      
       x=
      
        5
      
      
        4
      
       x=
      
        7
      
      
        5
      
       x=
      
        9
      
    

跟break一樣,continue只會影響它所在的那個for循環

【C語言】09-流程控制


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 斗罗破苍穹在线观看免费完整观看 | 国产精品日本一区二区在线播放 | 国产亚洲精品久久精品6 | 国产精品999| 午夜精品久久久 | 日韩中文字幕 | 欧美久久久久久 | 深夜影院老司机69影院 | 久久观看 | 都市妖奇谈 电视剧 | 91蝌蚪在线播放 | jjzzjjzz在线观看 | 无遮挡羞羞视频 | 久久xxx | 精品入口麻豆 | 亚洲资源在线视频 | 丁香亚洲 | 午夜剧场在线免费观看 | 青春草在线观看 | 欧美日韩视频网站 | 久久久亚洲伊人色综合网站 | 欧美成在线视频 | 国产一区二区精品尤物 | 欧美成人免费高清网站 | 精品无码久久久久久国产 | 亚洲欧美日本在线观看 | 男女www视频 | lutube成人福利在线观看污 | 日本高清在线看片免费视频 | 久久精品国产99国产精品澳门 | 青娱乐精品视频在线观看 | 久久精品视频8 | 欧美成人精品第一区首页 | 在线不卡一区 | 美日韩精品 | 亚洲高清在线观看看片 | 国产福利不卡视频在免费播放 | 亚洲精品乱码久久久久久 | 久996视频精品免费观看 | 一区二区中文 | 午夜精品在线播放 |