原文連接: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;
}