if语句:
switch语句分析:
case 语句中的值只能是整形或者字符型,并且只能是常量。
if和switch使用示例:
1 #include <stdio.h> 2 3 void f1(int i) 4 { 5 if( i < 6 ) 6 { 7 printf("Failed! "); 8 } 9 else if( (6 <= i) && (i <= 8) ) 10 { 11 printf("Good! "); 12 } 13 else 14 { 15 printf("Perfect! "); 16 } 17 } 18 19 void f2(char i) 20 { 21 switch(i) 22 { 23 case 'c': 24 printf("Compile "); 25 break; 26 27 case 'd': 28 printf("Debug "); 29 break; 30 31 case 'o': 32 printf("Object "); 33 break; 34 35 case 'r': 36 printf("Run "); 37 break; 38 39 default: 40 printf("Unknown "); 41 break; 42 43 } 44 } 45 46 int main() 47 { 48 f1(5); 49 f1(9); 50 f1(7); 51 52 f2('o'); 53 f2('d'); 54 f2('e'); 55 56 return 0; 57 }
else语句只与它相邻最近的if匹配。例如,13行的else匹配9行的else if中的if。而第9行的else匹配第5行的if。
运行结果如下:
if和switch角色对换:
f1函数中的if else判断逻辑换成switch如下:
运行结果如下:
可以看到运行结果没有任何的变化,我们完全可以用switch语句代替if。
f2中的switch替换成if,如下:
运行结果如下:
运行结果完全不变,因此,if语句在功能上也可以完全替代switch语句。
将上述的替换程序给出如下:
1 #include <stdio.h> 2 3 void f1(int i) 4 { 5 switch( i < 6 ) 6 { 7 case 1: 8 printf("Failed! "); 9 break; 10 11 default: 12 switch( (6 <= i) && (i <= 8) ) 13 { 14 case 1: 15 printf("Good! "); 16 break; 17 18 default: 19 printf("Perfect! "); 20 break; 21 } 22 break; 23 } 24 } 25 26 void f2(char i) 27 { 28 if( 'c' == i ) 29 { 30 printf("Compile "); 31 } 32 else if( 'd' == i ) 33 { 34 printf("Debug "); 35 } 36 else if( 'o' == i ) 37 { 38 printf("Object "); 39 } 40 else if( 'r' == i ) 41 { 42 printf("Run "); 43 } 44 else 45 { 46 printf("Unknown "); 47 } 48 } 49 50 int main() 51 { 52 f1(5); 53 f1(9); 54 f1(7); 55 56 f2('o'); 57 f2('d'); 58 f2('e'); 59 60 return 0; 61 }
小结:
if语句适用于复杂逻辑进行判断的情形中
switch语句适用于对离散值进行判断的情形中
if语句和switch语句在功能上可以相互替换
if语句对于“按片”分支判断的情形更加简洁
switch语句对于多分支判断的情形更加简洁