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