if和switch的區別:
一、語句的格式:
if/else的寫法格式如下:
int nA, nB; scanf_s("%d", &nA); //輸入整數並賦值給變量a scanf_s("%d", &nB); ("%d", &nB); //輸入整數並賦值給變量b if (nA > nB) { printf("%d greater than %d", nA, nB); } else { printf("%d smaller than %d", nA, nB); }
swith/case的寫法如下:
int nA, nB; scanf_s("%d", &nA); //輸入整數並賦值給變量a nB = nA + 1; switch (nA) { case 1: printf("when A is %d, B is", nA, nB); case 2: printf("when A is %d, B is", nA, nB); default: printf("when A is %d, B is", nA, nB); }
二、邏輯結構:
從上面if/else與switch/case格式的區別可以看出:
A: if/else能根據邏輯判斷輸出相應的語句,也就是說if/else更多的是進行邏輯判斷;
switch/case從某種角度上來說,沒有相應的邏輯比較判斷,而是根據給出項跳轉到相應的分支;
B: if判斷相應的邏輯語句,返回true/false,每條if語句都會執行一次邏輯判斷;
switch/case會建立相應的跳轉表,根據跳轉表的項跳轉到相應的分支。
三、效率
從兩種語句的判斷上可以看出:
A: 從某種程度上,Switch/case比if/else的效率要高,除非if/else在第一次邏輯判斷就為true;
B: Switch/case需要建立一張跳轉表,因此需要一定的空間的,更像是以空間換效率。
C: if/else能進行邏輯判斷,而Switch不行,因此在需要進行邏輯判斷時使用if/else語句;
四、支持的數據類型
Switch/case只支持部分數據類型:int、long和枚舉類型,由於byte、short、char都可以隱含轉換為int,因此:switch支持的數據類型為:byte、short、char,int、long和枚舉類型,不支持:boolean、float、double;
if/else支持更多的數據類型,如String, double等;
建議:在能用Switch/case的情況下,盡量用Switch/case來提高效率;