第6课 - 分支语句
第6课 - 分支语句
1. if 语句分析
(1)if 语句用于根据条件选择执行语句
(2)else 不能独立存在且总是与它最近的 if 相匹配,else 语句后可以连接其它if语句
(3)if 语句中零值比较的注意点,这个考点频繁出现在C语言笔试中!!!
- bool类型 ==> bool型变量应该直接出现在条件中,不要进行比较
- 整型 ==> 变量和0值比较时,0值应该出现在比较符号左边 // 防止将 == 写成 =,那样条件永远不成立; 0放在左边,误写为 = 会编译报错
- float型 ==> 因为float是不精确表示,0.0在内存中的表示可能是与其相近的一个值,所以不能直接和0值比较,需要定义精度
2. switch语句分析
(1)switch语句经常用在单个条件多个分支的情形
(2)case语句后面必须要有break,否则会导致分支重叠,实际工作中很多的bug就是由于忘记加break导致的!
(3)default语句有必要加上,以处理特殊情况
(4)case语句中的值只能是整型或字符型
(5)case语句的排列顺序遵照下面的规则,这样代码更加易读
- 按字母或数字顺序排列各条语句
- 正常情况放在前面,异常情况放在后面
- default 语句只用于处理真正的默认情况
【if 和 switch使用示例】
1 #include <stdio.h> 2 3 void f1(int i) 4 { 5 if( i < 6 ) 6 { 7 printf("Failed!\n"); 8 } 9 else if( (6 <= i) && (i <= 8) ) 10 { 11 printf("Good!\n"); 12 } 13 else 14 { 15 printf("Perfect!\n"); 16 } 17 } 18 19 void f2(char i) 20 { 21 switch(i) 22 { 23 case 'c': 24 printf("Compile\n"); 25 break; 26 27 case 'd': 28 printf("Debug\n"); 29 break; 30 31 case 'o': 32 printf("Object\n"); 33 break; 34 35 case 'r': 36 printf("Run\n"); 37 break; 38 39 default: 40 printf("Unknown\n"); 41 break; 42 43 } 44 } 45 46 int main() 47 { 48 f1(5); // Failed! 49 f1(9); // Perfect! 50 f1(7); // Good! 51 52 f2('o'); // Object 53 f2('d'); // Debug 54 f2('e'); // Unknown 55 56 return 0; 57 }
if 和 switch有各自适用的场合,这样代码看起来逻辑更加清晰!但是if 和 switch 两者也能进行转换,将前面的代码进行转换......
【有趣的角色互换】
1 #include <stdio.h> 2 3 void f1(int i) 4 { 5 switch( i < 6 ) 6 { 7 case 1: 8 printf("Failed!\n"); 9 break; 10 11 default: 12 switch( (6 <= i) && (i <= 8) ) 13 { 14 case 1: 15 printf("Good!\n"); 16 break; 17 18 default: 19 printf("Perfect!\n"); 20 break; 21 } 22 break; 23 } 24 } 25 26 void f2(char i) 27 { 28 if( 'c' == i ) 29 { 30 printf("Compile\n"); 31 } 32 else if( 'd' == i ) 33 { 34 printf("Debug\n"); 35 } 36 else if( 'o' == i ) 37 { 38 printf("Object\n"); 39 } 40 else if( 'r' == i ) 41 { 42 printf("Run\n"); 43 } 44 else 45 { 46 printf("Unknown\n"); 47 } 48 } 49 50 int main() 51 { 52 f1(5); // Failed! 53 f1(9); // Perfect! 54 f1(7); // Good! 55 56 f2('o'); // Object 57 f2('d'); // Debug 58 f2('e'); // Unknown 59 60 return 0; 61 }