switch-case語句用法<轉>

原文連接:http://blog.sina.com.cn/s/blog_899f46e501014gs0.htmlhtml

 

switch-case語句:
if語句處理兩個分支,處理多個分支時需使用if-else-if結構,但若是分支較多,則嵌套的if語句層就越多,程序不但龐大並且理解也比較困難.所以,C語言又提供了一個專門用於處理多分支結構的條件選擇語句,稱爲switch語句,又稱開關語句.使用switch語句直接處理多個分支(固然包括兩個分支).其通常形式爲: 
spa

 

switch(表達式)htm

blog

      case 常量表達式1:內存

         語句1;it

      break;引用

      

      case 常量表達式2:float

         語句2;程序

      break; im

 

……

      case 常量表達式n:

         語句n;

      break; 

 

      default:

         語句n+1;

      break;

}
注意:
switch和case 後面只能是整型或字符型的常量或常量表達式,不能是實型。
因 爲實型數據在內存中儲存的時候會有必定的偏差,若是比較將兩個實型數據相比較,基本不會出現==的狀況,通常要比較兩個實型數據是否相等,會採用二者之差 小於一個很小的數(好比10^-6),因此SWITCH裏面不要用實型數據,通常只能用整型數據(固然也包括char)。

 

(1) switch 語句的執行流程是:首先計算switch後面圓括號中表達式的值,而後用此值依次與各個case的常量表達式比較,若圓括號中表達式的值與某個case後 面的常量表達式的值相等,就執行此case後面的語句,執行後遇break語句就退出switch語句;若圓括號中表達式的值與全部case後面的常量表 達式都不等,則執行default後面的語句n+1,而後退出switch語句,程序流程轉向開關語句的下一個語句.以下程序,能夠根據輸入的考試成績的等級,輸出百分制分數段: 

 

 switch(grade)

 

    case 'A':  //注意,這裏是冒號:並非分號;

       printf("85-100\n");

    break; //每個case語句後都要跟一個break用來退出switch語句

    case 'B': //每個case後的常量表達式必須是不一樣的值以保證分支的惟//一性

       printf("70-84\n");

    break;

    case 'C':

       printf("60-69\n");

    break;

    case 'D':

       printf("<60\n");

    break;

    default:

       printf("error!\n");

 

(2) 若是在case後面包含多條執行語句時,也不須要像if語句那樣加大括號,進入某個case後,會自動順序執行本case後面的全部執行語句.如: 

 

    case 'A':

     if(grade<=100)

       printf("85-100\n");

     else

       printf("error\n");

    break;

…… 

 

(3) default後不須要break語句(僅適用於default在最後).而且,default部分也不是必須的, 若是沒有這一部分,當switch後面圓括號中表達式的值與全部case後面的常量表達式的值都不相等時,則不執行任何一個分支直接退出switch語 句.此時,switch語句至關於一個空語句.例如,將上面例子中switch語句中的default部分去掉,則當輸入的字符不 是"A","B","C"或"D"時,此switch語句中的任何一條語句也不被執行. 

 

(4) 在switch-case語句中,多個case能夠共用一條執行語句.如: 

 

……

case 'A':

case 'B':

case 'c':

printf(">60\n");

break;

……  

 

在A,B,C3種狀況下,均執行相同的語句,即輸出">60"(只輸出一次). 

 

(5) 最開始那個例子中,若是把每一個case後的break刪除掉,則當greak='A'時,程序從printf("85-100\n")開始執行,輸出結果爲: 

 

85-100

70-84

60-69

<60

error 

 

這 是由於case後面的常量表達式實際上只起語句標號做用,而不起條件判斷做用,即"只是開始執行處的入口標號".所以,一旦與switch後面圓括號中表 達式的值匹配,就今後標號處開始執行,並且執行完一個case後面的語句後,若沒遇到break語句,就自動進入下一個case繼續執行,而不在判斷是否 與之匹配,直到遇到break語句才中止執行,退出break語句.所以,若想執行一個case分支以後當即跳出switch語句,就必須在此分支的最後 添加一個break語句. 

 

引用 

--------------------------------------------------------------------------------

int main() 

   float a,b;

   char c1;

   printf("Please enter a,b and op:");

   scanf("%f%c%f",&a,&c1,&b);

   switch(c1)

   { 

      case '+':

        printf("%f+%f=%f\n",a,b,a+b);

      break;

      case '-':

        printf("%f-%f=%f\n",a,b,a-b);

      break;

      case '*':

        printf("%f*%f=%f\n",a,b,a*b);

      break;

      case '/':

        if(b!=0.0) 

          printf("%f/%f=%f\n",a,b,a/b);

        else

        printf("error!\n");

      break;

      default:

        printf("error!\n");

      break;

   }
   return 0;

相關文章
相關標籤/搜索