if(布尔值)
  • {
  • 代码块1;
  • }
  • else if(布尔值)
  • {
  • 代码块2;
  • }
  • ...
  • else
  • {
  • 代码块n;
  • }
  • 复制代码
    forum.jpg
    三种结构流程图
    在文章嵌入式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(布尔值) 语句;(这里仅仅一条语句),如果是多条语句,一定要加上{} ,为了防止出现意外以及阅读代码方便,最好都加上{}。
    测试代码如下图所示:
    forum.jpg
    if测试代码
    2)如果布尔值为真,则执行代码块1,否则执行代码块2
    if(布尔值)
  • {
  • 代码块1;
  • }
  • else
  • {
  • 代码块2;
  • }
  • 复制代码
    测试代码如下图所示:
    forum.jpg
    if-else测试代码
    3)多重if...else语句
    如果布尔值为真,则执行代码块1,否则执行代码块2,如果前面n-1个条件都不满足,则执行代码块n

    测试代码如下图所示:
    forum.jpg
    多重if-else测试代码
    4) if...else语句一重或者多重嵌套
    if(布尔值)
  • {
  • if(布尔值)
  • {
  • 代码块1;
  • }
  • ...
  • }
  • else if(布尔值)
  • {
  • 代码块2;
  • }
  • 复制代码
    测试代码如下图所示:
    forum.jpg
    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;
  • }
  • 复制代码
    测试代码如下图所示:
    forum.jpg
    switch-case测试代码
    注意:
    1)case后必须是整型常数(不能是float double,可以是int char)
    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。