<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                【52.1 switch的重要性。】 switch是非常重要的語句,我所有的單片機項目都是用switch搭建程序主框架。如果說while和for是一對孿生兄弟,那么“if-else if”和switch也是一對孿生兄弟,凡是用“if-else if”能實現的功能都可以用switch實現。switch有條件分支的功能,當條件的分支超過3個以上時,switch會比“if-else if”更加直觀清晰。 【52.2 switch的語法。】 switch常見的格式如下: switch(變量) //根據變量的數值大小從對應的case入口進來 { case 0: //入口0 語句0; break; //switch程序體的出口之一 case 1: //入口1 語句1; break; //switch程序體的出口之一 case 2: //入口2 語句2; break; //switch程序體的出口之一 } //最下面的花括號也是一個switch程序體的出口之一 分析:單片機從第一行的switch(變量)進來,依次往下查詢跟變量匹配的case入口,然后從匹配的case入口進來,往下執行語句,直到遇上break語句,或者return語句,或者“最下面的花括號”這三種情況之一,才跳出當前switch程序體。上述例子中,假如變量等于3,單片機從switch(變量)進來,往下查詢跟3匹配的case入口,因為沒有發現case 3,最后遇到“最下面的花括號”于是結束switch程序體,像這種變量等于3的情況,就意味著switch里面的有效語句沒有被執行到。多補充一句,在case 2選項中,“語句2”后面緊跟的break可以省略,因為case 2是最后一個case,即使沒有遇到break也會遇到“最下面的花括號”而結束switch程序體。上述程序功能如果用“if-else if”語句來實現,等效于如下: if(0==變量) { 語句0; } else if(1==變量) { 語句1; } else if(2==變量) { 語句2; } 【52.3 switch的break。】 剛才的例子中,可以看到三個關鍵字:switch,case,break。其實并不是每個case都必須要跟break配套,break只是起到一個出口的功能。假如沒有遇到break,程序會一直往下執行,直到遇到break或者switch“最下面的花括號”為止。比如: switch(變量) //根據變量的數值大小從對應的case入口進來 { case 0: //入口0 語句0; break; case 1: //入口1 語句1; case 2: //入口2 語句2; break; case 3: //入口3 語句3; break; } //最下面的花括號也是一個switch程序體的出口之一 分析:假如此時switch(變量)的變量等于1,單片機經過查詢后,就從匹配的case 1入口進來,執行“語句1”后,居然沒有遇到break語句,于是緊接著碰到“case 2”入口的語句,現在問題來了,單片機此時是退出switch程序體還是忽略“case 2”入口語句而繼續執行后面的“語句2”?答案是:忽略“case 2”入口語句而繼續執行后面的“語句2”。這里有點像坐地鐵,你只關注一個入口和一個出口,進入地鐵內之后,你中途再遇到無數個入口都可以忽略而繼續前進,直到你到達目的地的出口才結束整個乘車過程。繼續剛才的分析,單片機執行“語句2”之后,緊接著遇到break語句,這時才跳出整個switch程序體。回顧一下整個流程,本例子中case 1沒有break語句,就繼續往下執行下面case2里面的語句,直到遇到break或者“最下面的花括號”為止。 【52.4 case的變量有順序要求嗎?】 switch語句內部的case有規定順序嗎?必須連貫嗎?switch程序體內部可以寫很多case入口,這些case入口是不是必須按從小到大的順序?是不是規定必須case數字連貫?答案是:沒有規定順序,也沒有規定case數字連貫。case的數值只是代表入口,比如以下兩種寫法都是合法的: 第一種:case不按從小到大的順序(這種格式是合法的): switch(變量) { case 2: 語句2; break; case 0: 語句0; break; case 1: 語句1; break; } 第二種:case的數字不連貫(這種格式也是合法的): switch(變量) { case 0: 語句0; break; case 3: 語句3; break; case 9: 語句9; break; } 【52.5 switch的default。】 default是入口語句,它在switch語句中也不是必須的,應根據程序需要來選擇。default相當于“if-else if-else ”組合語句中的else,也就是當switch的入口變量沒有匹配的case入口時,就會默認進入default入口,就像“if-else if-else ”語句中當前面所有的條件不滿足時,就進入else語句的程序體,比如: switch(變量) //根據變量的數值大小從對應的case入口進來 { case 0: //入口0 語句0; break; //switch程序體的出口之一 case 1: //入口1 語句1; break; //switch程序體的出口之一 case 2: //入口2 語句2; break; //switch程序體的出口之一 default: //當所有的case不滿足,就從default的入口進來 語句3; break; } //最下面的花括號也是一個switch程序體的出口之一 分析:假如switch的入口變量等于35,單片機從上往下查詢,因為沒有找到case 35,所以就會從默認的default入口進來執行” 語句3”,然后遇到break語句才跳出switch程序體。上述程序功能如果用“if-else if-else”組合語句來實現等效于如下: if(0==變量) { 語句0; } else if(1==變量) { 語句1; } else if(2==變量) { 語句2; } else //相當于switch中的default { 語句3; } 【52.6 switch中內嵌switch。】 if語句可以內嵌if語句,while語句也可以內嵌while語句,switch語句當然也可以內嵌switch。比如: switch(a) { case 1: switch(b) //內嵌的switch { case 1: Break; case 2: Break; } Break; case 2: Break; } 分析:上述這種switch內嵌switch語句也是合法的,而且在實際項目中也很常用,大家目前先有個大概的了解即可,暫時不深入講解。 【52.7 例程練習和分析。】 現在編寫一個switch的練習程序。 程序代碼如下: /\*---C語言學習區域的開始。-----------------------------------------------\*/ unsigned char k; //switch的入口變量 unsigned char a; //觀察此變量的變化來理解switch的執行順序 void main() //主函數 { a=0; k=2; //入口變量等于2 switch(k) { case 0: //入口0 a++; break; //跳出switch case 1: //入口1 a++; case 2: //入口2,上述k等于2所以從這里進來 a++; case 3: //入口3 a++; case 4: //入口4 a++; break; //跳出switch case 5: //入口5 a++; break; //跳出switch default: //當前面沒有遇到匹配的case入口時,就從此default入口進來 a++; break; //跳出switch } //最后一個switch的花括號也是跳出switch View(a); //把第1個數a發送到電腦端的串口助手軟件上觀察。 while(1) { } } /\*---C語言學習區域的結束。-----------------------------------------------\*/ 在電腦串口助手軟件上觀察到的程序執行現象如下: 開始... 第1個數 十進制:3 十六進制:3 二進制:11 分析: 變量a為3。單片機從case 2入口進來,因為case 2和case 3都沒有break語句,直到遇到case 4的break語句才結束switch程序體,因此整個過程遇到了3次“a++”語句,因此變量a的“自加一”執行了3次后從0變成了3。 【52.8 如何在單片機上練習本章節C語言程序?】 直接復制前面章節中第十一節的模板程序,練習代碼時只需要更改“C語言學習區域”的代碼就可以了,其它部分的代碼不要動。編譯后,把程序下載進帶串口的51學習板,通過電腦端的串口助手軟件就可以觀察到不同的變量數值,詳細方法請看第十一節內容。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看