if(布尔值){ 代码块1; } else if(布尔值) { 代码块2; } ... else { 代码块n; }
复制代码三种结构流程图
在文章嵌入式Linux开发《C语言专题(四:程序结构之顺序结构(1))》中对C语言中最简单的程序结构-顺序结构进行描述,这篇文章对另外一种程序结构-选择结构进行详细描述。
首先是选择结构的定义:代码执行到某一步时,需要判断相应的条件,根据条件的结果来执行不同分支的代码。常见的有if...else、switch...case语句来实现。C语言中选择结构共有两种:第一种:if else 对应的C语言关键字是:if else 第二种:switch case 对应的C语言关键字:switch case break default 注意代码块{}在选择结构中的使用。
(1)if...else典型格式:
布尔值在前面文章中提到过,规则是“0是假,任何非0都是真”,在选择结构中与布尔值有关的运算符有关系运算符(在前面文章中提过)。关系运算符包含:==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)这些符号,在if...else格式中用的比较多。
还要注意if...else中的匹配问题:else总是与最近的且还未与else配对的if配对。当if...else语句较多时,为了防止代码逻辑执行错误,最好加上小括号(),也使if...else配对清晰。
1)如果布尔值为真,则执行代码块if(布尔值) { 代码块; } if(布尔值) 语句;
复制代码如果代码块只有一条语句,那么加不加{}都可以即 if(布尔值) 语句;(这里仅仅一条语句),如果是多条语句,一定要加上{} ,为了防止出现意外以及阅读代码方便,最好都加上{}。
测试代码如下图所示:
if测试代码
2)如果布尔值为真,则执行代码块1,否则执行代码块2
if(布尔值){ 代码块1; } else { 代码块2; }
复制代码测试代码如下图所示:
if-else测试代码
3)多重if...else语句
如果布尔值为真,则执行代码块1,否则执行代码块2,如果前面n-1个条件都不满足,则执行代码块n
如果布尔值为真,则执行代码块1,否则执行代码块2,如果前面n-1个条件都不满足,则执行代码块n
测试代码如下图所示:
多重if-else测试代码
4) if...else语句一重或者多重嵌套
if(布尔值){ if(布尔值) { 代码块1; } ... } else if(布尔值) { 代码块2; }
复制代码测试代码如下图所示:
if-else嵌套测试代码
(2)switch...case典型格式
switch case语句执行时,首先会用常量的值与各个case后的常量去对比,如果匹配到前n个case后的某一个常量。则就去执行该case对应的代码块。如果没有匹配到,则执行default后面的代码块。
switch(常量){ case 常量1: 代码块1; break; case 常量2: 代码块2; break; ... case 常量n: 代码块n; break; default: 代码块n+1; break; }
复制代码测试代码如下图所示:
switch-case测试代码
注意:
1)case后必须是整型常数(不能是float double,可以是int char)
2)最后一个case后一般都会有default。并不是强制必须有,但是最好写代码时写上,可以输出调试信息或者别的信息作为提示。
3)一般来说,每个case中代码段后都必须有一个break;有些特殊情况可能不需要,所以除非是特殊情况,否则的话,最好加上。
2)最后一个case后一般都会有default。并不是强制必须有,但是最好写代码时写上,可以输出调试信息或者别的信息作为提示。
3)一般来说,每个case中代码段后都必须有一个break;有些特殊情况可能不需要,所以除非是特殊情况,否则的话,最好加上。
(3)if...else和switch...case的对比
1)if...else适合分支比较少(因为分支太多了,阅读代码比较麻烦)同时对比条件比较复杂(比如涉及到很多关系运算符的比较)的情况;
switch...case适合分支数很多同时对比条件不复杂(只能是整型)的情况。
2)选择结构,都可以用if...else来实现。但是在switch case最合适使用的情况下优先使用switch...case,如果不适合使用switch...case,则用if...else。
switch...case适合分支数很多同时对比条件不复杂(只能是整型)的情况。
2)选择结构,都可以用if...else来实现。但是在switch case最合适使用的情况下优先使用switch...case,如果不适合使用switch...case,则用if...else。