switch語(yǔ)句與if-else語(yǔ)句的比較?
第一次代碼:(帶有明顯的if-else語(yǔ)句思維,運(yùn)行錯(cuò)誤那是肯定的)
#include<stdio.h>
int?main()
{
??int?score?=?87?;
??switch(score)
??{
case(score>=90?&&?score?<=?100):
printf("等級(jí)A\n");
????break;
case(score>=80?&&?score?<?90):
printf("等級(jí)B\n");
????break;
case(score>=60?&&?score?<?80):
printf("等級(jí)C\n");
????break;
default:
printf("等級(jí)D\n");
????break;
??}
??return?0;
}第二次代碼:(干脆嘗試直接用if-else語(yǔ)句實(shí)現(xiàn))
#include<stdio.h>
int?main()
{
??int?score?=?87?;
if(score>=90?&&?score?<=?100)
{
printf("等級(jí)A\n");
}
????else?if(score>=80?&&?score?<?90)
{
printf("等級(jí)B\n");
}
else?if(score>=60?&&?score?<?80)
{
printf("等級(jí)C\n");
}
else
{
??printf("等級(jí)D\n");
}
??return?0;
}第三次代碼:(題目想要的結(jié)果)
#include?<stdio.h>
int?main()?
{
????int?score?=?87;?//考試分?jǐn)?shù)為87分?
????score?/=?10;
????switch(score)
????{
????????case?10:
????????case?9:
????????????printf("等級(jí)A");
????????????break;
????????case?8:
????????????printf("等級(jí)B");
????????????break;???????????
????????case?7:
????????case?6:?
????????????printf("等級(jí)C");
????????????break;
????????default:
????????????printf("等級(jí)D");
????????????break;????
????}
????return?0;
}第一次是錯(cuò)的,屬于邏輯混亂,就不說(shuō)了。
想討論一下對(duì)于這道題目而言,switch語(yǔ)句和if-else語(yǔ)句都可以實(shí)現(xiàn),那么請(qǐng)問(wèn)有沒(méi)有孰優(yōu)孰劣的區(qū)別?
2015-07-03
switch語(yǔ)句的case后必須是整型的常量表達(dá)式,你寫(xiě)邏輯表達(dá)式就不合法。 你只能寫(xiě)成第三次代碼的形式。
switch和if-else本身沒(méi)有什么優(yōu)劣之分,選擇哪種形式可視情況而定:
有時(shí)你想要判斷的變量值只是有限的幾種值,那用switch就很符合直覺(jué),讀代碼也很容易理解。而且在case條目很多時(shí)編譯器會(huì)有額外的優(yōu)化,這樣會(huì)比if-else一步一步的判斷的計(jì)算量小。
而有時(shí)你可以預(yù)知你要判斷的變量是某個(gè)值的幾率更大,就可以先把這種情況寫(xiě)到第一個(gè)if中,那么在大多數(shù)情況下只判斷這一個(gè)if就可以得到結(jié)果了,這樣寫(xiě)成if-else形式就比寫(xiě)成switch更好。