switch-case語句:
if語句處理兩個分支,處理多個分支時需使用if-else-if結(jié)構(gòu),但如果分支較多,則嵌套的if語句層就越多,程序不但龐大而且理解也比較困難.因此,C語言又提供了一個專門用于處理多分支結(jié)構(gòu)的條件選擇語句,稱為switch語句,又稱開關(guān)語句.使用switch語句直接處理多個分支(當然包括兩個分支).其一般形式為:
switch(表達式)
{
case常量表達式1:
語句1;
break;
case常量表達式2:
語句2;
break;
……
case常量表達式n:
語句n;
break;
default:
語句n+1;
break;
}
注意:
switch和case后面只能是整型或字符型的常量或常量表達式,不能是實型。
因為實型數(shù)據(jù)在內(nèi)存中儲存的時候會有一定的誤差,如果比較將兩個實型數(shù)據(jù)相比較,基本不會出現(xiàn)==的情況,一般要比較兩個實型數(shù)據(jù)是否相等,會采用兩者之差小于一個很小的數(shù)(比如10^-6),所以SWITCH里面不要用實型數(shù)據(jù),一般只能用整型數(shù)據(jù)(當然也包括char)。
(1) switch語句的執(zhí)行流程是:首先計算switch后面圓括號中表達式的值,然后用此值依次與各個case的常量表達式比較,若圓括號中表達式的值與某個case后面的常量表達式的值相等,就執(zhí)行此case后面的語句,執(zhí)行后遇break語句就退出switch語句;若圓括號中表達式的值與所有case后面的常量表達式都不等,則執(zhí)行default后面的語句n+1,然后退出switch語句,程序流程轉(zhuǎn)向開關(guān)語句的下一個語句.如下程序,可以根據(jù)輸入的考試成績的等級,輸出百分制分數(shù)段:
switch(grade)
{
case'A'://注意,這里是冒號:并不是分號;
printf("85-100n");
break;//每一個case語句后都要跟一個break用來退出switch語句
case'B'://每一個case后的常量表達式必須是不同的值以保證分支的唯//一性
printf("70-84n");
break;
case'C':
printf("60-69n");
break;
case'D':
printf("<60n");
break;
default:
printf("error!n");
}
(2)如果在case后面包含多條執(zhí)行語句時,也不需要像if語句那樣加大括號,進入某個case后,會自動順序執(zhí)行本case后面的所有執(zhí)行語句.如:
{
case'A':
if(grade<=100)
printf("85-100n");
else
printf("errorn");
break;
……
(3)default后不需要break語句(僅適用于default在最后).并且,default部分也不是必須的,如果沒有這一部分,當switch后面圓括號中表達式的值與所有case后面的常量表達式的值都不相等時,則不執(zhí)行任何一個分支直接退出switch語句.此時,switch語句相當于一個空語句.例如,將上面例子中switch語句中的default部分去掉,則當輸入的字符不是"A","B","C"或"D"時,此switch語句中的任何一條語句也不被執(zhí)行.
(4)在switch-case語句中,多個case可以共用一條執(zhí)行語句.如:
……
case'A':
case'B':
case'c':
printf(">60n");
break;
……
在A,B,C3種情況下,均執(zhí)行相同的語句,即輸出">60"(只輸出一次).
(5)最開始那個例子中,如果把每個case后的break刪除掉,則當greak='A'時,程序從printf("85-100n")開始執(zhí)行,輸出結(jié)果為:
85-100
70-84
60-69
<60
error
這是因為case后面的常量表達式實際上只起語句標號作用,而不起條件判斷作用,即"只是開始執(zhí)行處的入口標號".因此,一旦與switch后面圓括號中表達式的值匹配,就從此標號處開始執(zhí)行,而且執(zhí)行完一個case后面的語句后,若沒遇到break語句,就自動進入下一個case繼續(xù)執(zhí)行,而不在判斷是否與之匹配,直到遇到break語句才停止執(zhí)行,退出break語句.因此,若想執(zhí)行一個case分支之后立即跳出switch語句,就必須在此分支的最后添加一個break語句.
引用
--------------------------------------------------------------------------------
intmain()
{
floata,b;
charc1;
printf("Pleaseentera,bandop:");
scanf("%f%c%f",&a,&c1,&b);
switch(c1)
{
case'+':
printf("%f+%f=%fn",a,b,a+b);
break;
case'-':
printf("%f-%f=%fn",a,b,a-b);
break;
case'*':
printf("%f*%f=%fn",a,b,a*b);
break;
case'/':
if(b!=0.0)
printf("%f/%f=%fn",a,b,a/b);
else
printf("error!n");
break;
default:
printf("error!n");
break;
}
return 0;
}
愛華網(wǎng)



