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

黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

【C語(yǔ)言】09-流程控制

系統(tǒng) 2218 0

前言

1.默認(rèn)的運(yùn)行流程

默認(rèn)情況下,程序的運(yùn)行流程是這樣的:運(yùn)行程序后,系統(tǒng)會(huì)按書(shū)寫(xiě)順序執(zhí)行程序中的每一行代碼。比如下面的程序

      
         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
      
       }
    

程序運(yùn)行后,會(huì)按順序執(zhí)行第6、7、8行語(yǔ)句,于是輸出結(jié)果為:

2.其他運(yùn)行流程

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

【C語(yǔ)言】09-流程控制

如果用戶(hù)點(diǎn)擊了注冊(cè)按鈕,我們就執(zhí)行“跳轉(zhuǎn)到注冊(cè)界面”的代碼;如果用戶(hù)點(diǎn)擊了登錄按鈕,我們就執(zhí)行“跳轉(zhuǎn)到登錄界面”的代碼。如果用戶(hù)沒(méi)做出任何操作,就不執(zhí)行前面所說(shuō)的兩段代碼。要想實(shí)現(xiàn)這種功能,那就要學(xué)會(huì)如何去控制程序的運(yùn)行流程。

3.流程結(jié)構(gòu)

為了方便我們控制程序的運(yùn)行流程,C語(yǔ)言提供3種流程結(jié)構(gòu),不同的流程結(jié)構(gòu)可以實(shí)現(xiàn)不同的運(yùn)行流程。這3種流程結(jié)構(gòu)分別是:

  • 順序結(jié)構(gòu):默認(rèn)的流程結(jié)構(gòu)。按照書(shū)寫(xiě)順序執(zhí)行每一條語(yǔ)句。
  • 選擇結(jié)構(gòu):對(duì)給定的條件進(jìn)行判斷,再根據(jù)判斷結(jié)果來(lái)決定執(zhí)行哪一段代碼。
  • 循環(huán)結(jié)構(gòu):在給定條件成立的情況下,反復(fù)執(zhí)行某一段代碼。

下面是這3種結(jié)構(gòu)的流程圖,大致預(yù)覽一下即可

【C語(yǔ)言】09-流程控制

一、順序結(jié)構(gòu)

順序結(jié)構(gòu)是3種結(jié)構(gòu)中最簡(jiǎn)單的,也是默認(rèn)的流程結(jié)構(gòu):程序中的語(yǔ)句是按照書(shū)寫(xiě)順序執(zhí)行的。在 文章開(kāi)頭 開(kāi)始列出的代碼段,就是順序結(jié)構(gòu),這里就不多介紹了。

二、選擇結(jié)構(gòu)1-if語(yǔ)句

C語(yǔ)言中選擇結(jié)構(gòu)的實(shí)現(xiàn)方式有兩種:if語(yǔ)句和switch語(yǔ)句。先來(lái)看下if語(yǔ)句的使用,而if語(yǔ)句的形式是有好多種的。

1.形式1

先來(lái)看看if語(yǔ)句最簡(jiǎn)單的形式

1> 簡(jiǎn)介

      
        1
      
      
        if
      
      
         ( 條件 )

      
      
        2
      
      
        {

      
      
        3
      
      
            語(yǔ)句1;

      
      
        4
      
      
            語(yǔ)句2;

      
      
        5
      
      
            ....

      
      
        6
      
       }
    

如果if右邊小括號(hào)()中的條件成立,也就是為“真”時(shí),就會(huì)執(zhí)行第2~6行大括號(hào){}中的語(yǔ)句;如果條件為假,就不執(zhí)行大括號(hào){}中的語(yǔ)句。這里的if是關(guān)鍵字。

2> 舉例

      
        1
      
      
        int
      
       a = 
      
        7
      
      
        ;

      
      
        2
      
      
        3
      
      
        if
      
      
         ( a )

      
      
        4
      
      
        {

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

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

      
      
        7
      
       }
    

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

      
        1
      
      
        條件a成立

      
      
        2
      
       a的值為真
    

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

3> 省略大括號(hào){}

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

      
        if
      
      
         ( 條件 )
    語(yǔ)句1;
      
    

注意:如果條件成立,只會(huì)執(zhí)行if后面的第1條語(yǔ)句;如果條件不成立,就不會(huì)執(zhí)行if后面的第1條語(yǔ)句。

      
        1
      
      
        int
      
       a = 
      
        7
      
      
        ;

      
      
        2
      
      
        3
      
      
        if
      
       ( a > 
      
        9
      
      
         )

      
      
        4
      
           printf(
      
        "
      
      
        aaa
      
      
        "
      
      
        );

      
      
        5
      
           printf(
      
        "
      
      
        bbb
      
      
        "
      
      );
    

因?yàn)榈?行的a>9是不成立的,所以不會(huì)執(zhí)行第4行代碼。而第5行代碼跟if語(yǔ)句是沒(méi)有任何練習(xí)的,因此,第5行代碼照常執(zhí)行。于是會(huì)看到屏幕上只輸出:

由于第5行代碼跟if語(yǔ)句是沒(méi)有任何聯(lián)系的,所以一般會(huì)把代碼寫(xiě)成下面這樣:

      
        1
      
      
        int
      
       a = 
      
        7
      
      
        ;

      
      
        2
      
      
        3
      
      
        if
      
       ( a > 
      
        9
      
      
         )

      
      
        4
      
           printf(
      
        "
      
      
        aaa
      
      
        "
      
      
        );

      
      
        5
      
       printf(
      
        "
      
      
        bbb
      
      
        "
      
      );
    

為了保證代碼的可讀性,不建議省略大括號(hào)!!!

4> 語(yǔ)句嵌套

if語(yǔ)句內(nèi)部是可以嵌套其他if語(yǔ)句的,如下面的例子

      
         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是成立的,因此會(huì)按順序執(zhí)行第4~11大括號(hào)中的代碼。執(zhí)行到第7行的時(shí)候,a<9也是成立的,因此會(huì)執(zhí)行第9行代碼。輸出結(jié)果:

      
        1
      
      
        a的值大于0

      
      
        2
      
       a的值小于9
    

5> 使用注意1

有些人習(xí)慣寫(xiě)完一行代碼就在后面加個(gè)分號(hào)";",于是寫(xiě)if語(yǔ)句的時(shí)候,他們可能會(huì)這樣寫(xiě):

      
        1
      
      
        int
      
       a = 
      
        6
      
      
        ;

      
      
        2
      
      
        if
      
       ( a>
      
        8
      
      
         );

      
      
        3
      
      
        {

      
      
        4
      
           printf(
      
        "
      
      
        a大于8
      
      
        "
      
      
        );

      
      
        5
      
       }
    

如果第2行尾部的分號(hào),其實(shí)一個(gè)分號(hào)也是一條語(yǔ)句,這個(gè)叫做“空語(yǔ)句”。第2行的a>8不成立,所以不會(huì)執(zhí)行后面的“空語(yǔ)句”。而后面的大括號(hào){}跟if語(yǔ)句是沒(méi)有聯(lián)系的,因此會(huì)正常執(zhí)行,于是會(huì)看到輸出:

      a大于8
    

所以要非常小心, 千萬(wàn)不要在if的小括號(hào)后面添加分號(hào)

第3~5行的內(nèi)容是一個(gè)獨(dú)立的“代碼塊”:

      
        1
      
      
        {

      
      
        2
      
           printf(
      
        "
      
      
        a大于8
      
      
        "
      
      
        );

      
      
        3
      
       }
    

6> 使用注意2

下面的寫(xiě)法從語(yǔ)法的角度看是對(duì)的:

      
        int
      
       a = 
      
        10
      
      
        ;


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

上述代碼是完全合理的,編譯器不會(huì)報(bào)錯(cuò),只是個(gè)警告而已。因 為a為0,所以為"假", 輸出結(jié)果是: " 條件不成立 "

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

假設(shè)你本來(lái)是想判斷a是否為0,那么本應(yīng)該寫(xiě)if (a == 0),若你誤寫(xiě)成了if (a = 0),那將是一件非常可怕的事情,因?yàn)榫幾g器又不報(bào)錯(cuò),這樣的BUG就難找了。因此, 像a==0這樣的表達(dá)式,最好寫(xiě)成0==a,若你誤寫(xiě)成0=a,編譯器會(huì)直接報(bào)錯(cuò)的

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


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

7> 使用注意3

在C語(yǔ)言中,可以不保存關(guān)系運(yùn)算的結(jié)果。因此,下面的寫(xiě)法是合法的:

      
        1
      
      
        int
      
       a = 
      
        10
      
      
        ;

      
      
        2
      
       a > 
      
        10
      
      
        ;

      
      
        3
      
       a == 
      
        0
      
      ;
    

這里又是一個(gè)陷阱,假設(shè)你的本意是想給 a賦值為0,那么本應(yīng)該寫(xiě)a = 0; ,若你誤寫(xiě)成a == 0; ,那將又是一個(gè)非常難找的BUG,因?yàn)榫幾g器根本不會(huì)報(bào)錯(cuò)。在1993年的時(shí)候,這個(gè)BUG差點(diǎn)讓一樁價(jià)值2000萬(wàn)美元的硬件產(chǎn)品生意告吹,因?yàn)槿绻@個(gè)BUG不解決,這個(gè)產(chǎn)品就沒(méi)辦法正常使用

2.形式2

if還可以跟關(guān)鍵字else一起使用

1> 簡(jiǎn)介

      
        1
      
      
        if
      
      
         ( 條件 )

      
      
        2
      
      
        {

      
      
        3
      
      
            語(yǔ)句1;

      
      
        4
      
      
        }

      
      
        5
      
      
        else
      
      
        6
      
      
        {

      
      
        7
      
      
            語(yǔ)句2;

      
      
        8
      
       }
    

如果條件成立,就會(huì)執(zhí)行if后面大括號(hào){}中的語(yǔ)句;如果條件不成立,就會(huì)執(zhí)行else后面大括號(hào){}中的語(yǔ)句。總之,兩個(gè)大括號(hào)中一定會(huì)有1個(gè)被執(zhí)行,而且只能執(zhí)行的1個(gè)。

為了減少代碼行數(shù),你也可以寫(xiě)成下面的格式:

      
        1
      
      
        if
      
      
         ( 條件 ) {

      
      
        2
      
      
            語(yǔ)句1;

      
      
        3
      
       } 
      
        else
      
      
         {

      
      
        4
      
      
            語(yǔ)句2;

      
      
        5
      
       }
    

當(dāng)然,也可以省略大括號(hào),寫(xiě)成下面的格式:

      
        1
      
      
        if
      
      
         ( 條件 )

      
      
        2
      
      
            語(yǔ)句1;

      
      
        3
      
      
        else
      
      
        4
      
           語(yǔ)句2;
    

如果條件成立,就執(zhí)行if后面的第1條語(yǔ)句;如果條件不成立,就執(zhí)行else后面的第1條語(yǔ)句。但還是不建議省略大括號(hào){}。

2> 舉例

      
        1
      
      
        int
      
       a = 
      
        10
      
      
        ;

      
      
        2
      
      
        if
      
       ( a==
      
        0
      
      
         ) {

      
      
        3
      
           printf(
      
        "
      
      
        a等于0
      
      
        "
      
      
        );

      
      
        4
      
       } 
      
        else
      
      
         {

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

      
      
        6
      
       }
    

第2行的a==0不成立,所以會(huì)執(zhí)行第5行代碼,輸出結(jié)果:

      a不等于0
    

3.形式3

if和else還有一種比較復(fù)雜的用法

1> 簡(jiǎn)介

      
         1
      
      
        if
      
      
         ( 條件1 )

      
      
         2
      
      
        {

      
      
         3
      
      
            語(yǔ)句1;

      
      
         4
      
      
        }

      
      
         5
      
      
        else
      
      
        if
      
      
         ( 條件2 )

      
      
         6
      
      
        {

      
      
         7
      
      
            語(yǔ)句2;

      
      
         8
      
      
        }

      
      
         9
      
      
        else
      
      
        if
      
      
         ( 條件3 )

      
      
        10
      
      
        {

      
      
        11
      
      
            語(yǔ)句3;

      
      
        12
      
      
        }

      
      
        13
      
      
        ...

      
      
        14
      
      
        else
      
      
        15
      
      
        {

      
      
        16
      
      
            其他語(yǔ)句;

      
      
        17
      
       }
    
  • 如果條件1成立,就執(zhí)行條件1后面大括號(hào){}中的內(nèi)容:第2~4行
  • 如果條件1不成立,條件2成立,就執(zhí)行條件2后面大括號(hào){}中的內(nèi)容:第6~8行
  • 如果條件1、條件2都不成立,條件3成立,就執(zhí)行條件3后面大括號(hào){}中的內(nèi)容:第10~12行
  • 第13行的...表示可以有無(wú)限個(gè)else if
  • 如果所有的條件都不成立,就會(huì)執(zhí)行else后面大括號(hào){}中的內(nèi)容:第15~17行

注意:這么多大括號(hào)中,只有1個(gè)大括號(hào)內(nèi)的代碼會(huì)被執(zhí)行。跟之前一樣,所有的大括號(hào)都可以省略,但是不建議省略。必要的時(shí)候,最后面的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不成立,接著會(huì)檢查第4行。第4行的a>0成立,因此會(huì)執(zhí)行第5行代碼。輸出結(jié)果:

      a大于0
    

如果a的值是負(fù)數(shù),那么第2、4行的條件都不成立,于是就會(huì)執(zhí)行第7行代碼。

三、選擇結(jié)構(gòu)2-switch語(yǔ)句

1.形式

先來(lái)看看switch語(yǔ)句的使用形式:

      
         1
      
      
        switch
      
      
        (整型表達(dá)式)

      
      
         2
      
      
        {

      
      
         3
      
      
        case
      
      
         數(shù)值1:

      
      
         4
      
      
                語(yǔ)句1;

      
      
         5
      
      
        break
      
      
        ;

      
      
         6
      
      
        case
      
      
         數(shù)值2:

      
      
         7
      
      
                語(yǔ)句2;

      
      
         8
      
      
        break
      
      
        ;

      
      
         9
      
      
            ... ...

      
      
        10
      
      
        case
      
      
         數(shù)值n:

      
      
        11
      
      
                語(yǔ)句n;

      
      
        12
      
      
        break
      
      
        ;

      
      
        13
      
      
        default
      
      
         :

      
      
        14
      
               語(yǔ)句n+
      
        1
      
      
        ;

      
      
        15
      
      
        break
      
      
        ;

      
      
        16
      
       }
    
  • 當(dāng)整型表達(dá)式的值等于“數(shù)值1”時(shí),就會(huì)執(zhí)行“語(yǔ)句1”,后面的break表示退出整個(gè)switch語(yǔ)句,也就是直接跳到第16行代碼;
  • 當(dāng)整形表達(dá)式的值等于“數(shù)值2”時(shí),就會(huì)執(zhí)行“語(yǔ)句2”;后面的以此類(lèi)推。如果在數(shù)值1~數(shù)值n中,沒(méi)有一個(gè)值等于整型表達(dá)式的值,那么就會(huì)執(zhí)行default中的語(yǔ)句n+1。
  • 由于所有的case后面都有個(gè)break,因此執(zhí)行完任意一個(gè)case中的語(yǔ)句后,都會(huì)直接退出switch語(yǔ)句

2.舉例

      
         1
      
      
        int
      
       a = 
      
        10
      
      
        ;

      
      
         2
      
      
         3
      
      
        switch
      
      
         (a) {

      
      
         4
      
      
        case
      
      
        0
      
      
        :

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

      
      
         6
      
      
        break
      
      
        ;

      
      
         7
      
      
        case
      
      
        5
      
      
        :

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

      
      
         9
      
      
        break
      
      
        ;

      
      
        10
      
      
        case
      
      
        10
      
      
        :

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

      
      
        12
      
      
        break
      
      
        ;

      
      
        13
      
      
        default
      
      
        :

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

      
      
        15
      
      
        break
      
      
        ;

      
      
        16
      
       }
    

因?yàn)閍的值剛好等于第10行case后面的10,所以會(huì)執(zhí)行第11行代碼,輸出結(jié)果:

      這是一個(gè)10
    

3.break

break關(guān)鍵字的作用是退出整個(gè)switch語(yǔ)句。默認(rèn)的格式中,每個(gè)case后面都有個(gè)break,因此執(zhí)行完case中的語(yǔ)句后,就會(huì)退出switch語(yǔ)句。

1> 如果某個(gè)case后面沒(méi)有break,意味著執(zhí)行完這個(gè)case中的語(yǔ)句后,會(huì)按順序執(zhí)行后面所有case和default中的語(yǔ)句,直到遇到break為止

      
         1
      
      
        int
      
       a = 
      
        0
      
      
        ;

      
      
         2
      
      
         3
      
      
        switch
      
      
         (a) {

      
      
         4
      
      
        case
      
      
        0
      
      
        :

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

      
      
         6
      
      
        case
      
      
        5
      
      
        :

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

      
      
         8
      
      
        case
      
      
        10
      
      
        :

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

      
      
        10
      
      
        break
      
      
        ;

      
      
        11
      
      
        default
      
      
        :

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

      
      
        13
      
      
        break
      
      
        ;

      
      
        14
      
       }
    
  • 由于變量a的值等于第4行case后面的0,因此肯定會(huì)執(zhí)行第5行代碼。
  • 由于case 0中沒(méi)有break語(yǔ)句,就不會(huì)退出switch語(yǔ)句,繼續(xù)往下執(zhí)行代碼。
  • 由于a的值已經(jīng)等于第4行case的值,接著不會(huì)再判斷a的值是否等于其他case的值了,直接按順序執(zhí)行第7、9行代碼。在第10行有個(gè)break,接著就會(huì)退出switch語(yǔ)句。
  • 輸出結(jié)果為:
      
        1
      
      
        這是一個(gè)0

      
      
        2
      
      
        這是一個(gè)5

      
      
        3
      
       這是一個(gè)10
    

如果把a(bǔ)的值改為5,輸出結(jié)果為:

      
        1
      
      
        這是一個(gè)5

      
      
        2
      
       這是一個(gè)10
    

2> 在某些時(shí)候,我們確實(shí)沒(méi)有必要在每一個(gè)case后面添加break。下面舉一個(gè)例子:判斷分?jǐn)?shù)的優(yōu)良中差等級(jí)(100分滿(mǎn)分)。

      
         1
      
      
        int
      
       score = 
      
        77
      
      
        ;

      
      
         2
      
      
         3
      
      
        switch
      
       (score/
      
        10
      
      
        ) {

      
      
         4
      
      
        case
      
      
        10
      
      
        :

      
      
         5
      
      
        case
      
      
        9
      
      
        :

      
      
         6
      
               printf(
      
        "
      
      
        優(yōu)秀
      
      
        "
      
      
        );

      
      
         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
      
       }
    
  • 當(dāng)score的范圍是90~100,score/10的值為10或9時(shí),就會(huì)執(zhí)行第6行代碼,然后退出switch語(yǔ)句;
  • 當(dāng)score的范圍是80~89,score/10的值為8時(shí),就會(huì)執(zhí)行第10行代碼,然后退出switch語(yǔ)句;
  • 當(dāng)score的范圍是60~79,score/10的值為7或6時(shí),就會(huì)執(zhí)行第15行代碼,然后退出switch語(yǔ)句;
  • 當(dāng)score的范圍并不是60~100,score/10的值并不在6~10范圍內(nèi)時(shí),就會(huì)執(zhí)行第19行代碼,然后退出switch語(yǔ)句;
  • score的值是77,所以score/10的值是7,輸出結(jié)果: 中等

4.在case中定義變量

有時(shí)候,我們可能會(huì)想在case中定義一些變量,這個(gè)時(shí)候,就必須用大括號(hào){}括住case中的所有語(yǔ)句。

      
         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(
      
        "
      
      
        不能識(shí)別的符號(hào)
      
      
        "
      
      
        );

      
      
        24
      
      
        break
      
      
        ;

      
      
        25
      
       }
    

在第10、17分別定義兩個(gè)變量。輸出結(jié)果:

      a-b=
      
        6
      
    

四、循環(huán)結(jié)構(gòu)1-while循環(huán)

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

      
        1
      
       printf(
      
        "
      
      
        Hello World\n
      
      
        "
      
      );
    

沒(méi)錯(cuò),把上次代碼寫(xiě)10遍,確實(shí)能實(shí)現(xiàn)功能。但是這樣的代碼太垃圾了,有很多的重復(fù)的代碼,這樣會(huì)使得代碼非常地臃腫,復(fù)用率低。因此,不建議這么做。

下次遇到像上面那樣重復(fù)執(zhí)行某個(gè)操作時(shí),首先要想到的應(yīng)該是循環(huán)結(jié)構(gòu)。所謂循環(huán),就是重復(fù)執(zhí)行某一個(gè)操作,C語(yǔ)言中有多種方式可以實(shí)現(xiàn)循環(huán)結(jié)構(gòu)。先來(lái)看看while循環(huán)。

1.形式

      
        1
      
      
        while
      
      
         ( 條件 )

      
      
        2
      
      
        {

      
      
        3
      
      
            語(yǔ)句1;

      
      
        4
      
      
            語(yǔ)句2;

      
      
        5
      
      
            ....

      
      
        6
      
       }
    
  • 如果條件成立,就會(huì)執(zhí)行循環(huán)體中的語(yǔ)句(“循環(huán)體”就是while后面大括號(hào){}中的內(nèi)容)。然后再次判斷條件,重復(fù)上述過(guò)程,直到條件不成立就結(jié)束while循環(huán)
  • while循環(huán)的特點(diǎn): 如果while中的條件一開(kāi)始就不成立,那么 循環(huán)體中的語(yǔ)句 永遠(yuǎn)不會(huì)被執(zhí)行

可以省略大括號(hào){},但是只會(huì)影響到while后面的第一條語(yǔ)句。不建議省略大括號(hào)。

      
        1
      
      
        while
      
      
         ( 條件 )

      
      
        2
      
           語(yǔ)句1;
    

2.舉例

在屏幕上重復(fù)輸出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一直都是成立的,這個(gè)while循環(huán)將會(huì)陷入“死循環(huán)”,一直在重復(fù)執(zhí)行第4行代碼。

3.注意

如果寫(xiě)成下面這樣,也會(huì)讓程序進(jìn)入“死循環(huán)”

      
        1
      
      
        int
      
       count = 
      
        0
      
      
        ;

      
      
        2
      
      
        3
      
      
        while
      
       ( count < 
      
        10
      
      
         );

      
      
        4
      
      
        {

      
      
        5
      
           printf(
      
        "
      
      
        Hello World\n
      
      
        "
      
      
        );

      
      
        6
      
      
        7
      
           count++
      
        ;

      
      
        8
      
       }
    
  • 注意第3行,while后面不小心加了個(gè)分號(hào); ,一個(gè)分號(hào)表示一條空語(yǔ)句。
  • 可以看出:while循環(huán)只會(huì)影響到第3行的空語(yǔ)句,而第4~8行的代碼塊是不受while循環(huán)影響的
  • 由于count是0,那么count<10一直都是成立的,程序?qū)?huì)一直重復(fù)執(zhí)行第3行的空語(yǔ)句,陷入死循環(huán)。

五、循環(huán)結(jié)構(gòu)2-do while循環(huán)

形式如下:

      
        1
      
      
        do
      
      
         {

      
      
        2
      
      
            語(yǔ)句1;

      
      
        3
      
      
            語(yǔ)句2;

      
      
        4
      
      
            ...

      
      
        5
      
       } 
      
        while
      
       (條件);
    
  • 注意第5行,后面是加上一個(gè)分號(hào);的
  • 當(dāng)執(zhí)行到do-while循環(huán)時(shí),首先會(huì)執(zhí)行一遍循環(huán)體中的語(yǔ)句(“循環(huán)體”就是do后面大括號(hào){}中的內(nèi)容)。接著判斷while中的條件,如果條件成立,就執(zhí)行循環(huán)體中的語(yǔ)句。然后再次判斷條件,重復(fù)上述過(guò)程,直到條件不成立就結(jié)束while循環(huán)
  • do-while循環(huán)的特點(diǎn): 不管while中的條件是否成立, 循環(huán)體中的語(yǔ)句 至少會(huì)被執(zhí)行一遍
  • 其實(shí)do while循環(huán)的用法跟while循環(huán)是差不多的,這里就不舉例子了。

六、循環(huán)結(jié)構(gòu)3-for循環(huán)

1.形式

for循環(huán)是所有循環(huán)結(jié)構(gòu)中最復(fù)雜的。

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

      
      
        2
      
      
            語(yǔ)句3;

      
      
        3
      
      
            語(yǔ)句4;

      
      
        4
      
      
            ...

      
      
        5
      
       }
    
  • for循環(huán)開(kāi)始時(shí),會(huì)先執(zhí)行語(yǔ)句1,而且 在整個(gè)循環(huán)過(guò)程中只執(zhí)行一次語(yǔ)句1
  • 接著判斷條件,如果條件成立,就會(huì)執(zhí)行循環(huán)體中的語(yǔ)句(“循環(huán)體”就是for后面大括號(hào){}中的內(nèi)容)
  • 循環(huán)體執(zhí)行完畢后,接下來(lái)會(huì)執(zhí)行語(yǔ)句2,然后再次判斷條件,重復(fù)上述過(guò)程,直到條件不成立就結(jié)束for循環(huán)

2.舉例

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

      
      
        2
      
      
        {

      
      
        3
      
           printf(
      
        "
      
      
        %d  
      
      
        "
      
      
        , i);

      
      
        4
      
       }
    

輸出結(jié)果為:

      
        0
      
      
        1
      
      
        2
      
      
        3
      
      
        4
      
    

需要注意的是:變量i的作用域是第1~4行。一旦離開(kāi)了這個(gè)for循環(huán),變量i就失效了。

3.補(bǔ)充

如果for循環(huán)的初始化語(yǔ)句和循環(huán)一次后執(zhí)行的語(yǔ)句是由多條語(yǔ)句組成的,就用逗號(hào),隔開(kāi)

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

      
      
        2
      
      
        {

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

      
      
        4
      
       }
    

輸出結(jié)果:

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

七、break和continue

接下來(lái),介紹兩個(gè)比較重要的語(yǔ)句:break和continue。

1.break

前面在switch語(yǔ)句中已經(jīng)用到了break,它的作用是跳出switch語(yǔ)句。它也可以用在循環(huán)結(jié)構(gòu)中,這時(shí)候它的作用是跳出整個(gè)循環(huán)語(yǔ)句。

1> 舉例

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

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

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

      
      
        3
      
      
        4
      
      
        if
      
       (i>
      
        2
      
      
        ) {

      
      
        5
      
      
        break
      
      
        ;

      
      
        6
      
      
            }

      
      
        7
      
       }
    

上面代碼的意思是當(dāng)i>2時(shí),就跳出整個(gè)for循環(huán),也就是結(jié)束for循環(huán),所以輸出結(jié)果是:

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

2> for循環(huán)嵌套

先來(lái)看一個(gè)for循環(huán)嵌套的例子,嵌套的意思就是:for循環(huán)內(nèi)部又一個(gè)for循環(huán)

      
        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
      
       }
    

輸出結(jié)果是:

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

這個(gè)時(shí)候如果在for循環(huán)中加入一個(gè)break,那么這個(gè)break究竟是跳出里面還是外面的for循環(huán)呢?

      
        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,這個(gè)break的作用是跳出里面的for循環(huán),并非外面的for循環(huán)。所以輸出結(jié)果是:

      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,這個(gè)break的作用是跳出外面的for循環(huán),并非里面的for循環(huán)。所以輸出結(jié)果是:

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

規(guī)律已經(jīng)很明顯了:break只會(huì)影響它所在的那個(gè)for循環(huán)

2.continue

continue只能使用在循環(huán)結(jié)構(gòu)中,它的作用是跳過(guò)這一次循環(huán),直接進(jìn)入下一次循環(huán)。

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

      
        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行,當(dāng)x%2==0,也就是當(dāng)x是2的倍數(shù)時(shí),就跳過(guò)這次循環(huán),不執(zhí)行第6行語(yǔ)句,直接進(jìn)入下一次循環(huán)。輸出結(jié)果:

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

跟break一樣,continue只會(huì)影響它所在的那個(gè)for循環(huán)

【C語(yǔ)言】09-流程控制


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論