之前一节介绍了C语言中的三大结构,这一节我们就介绍其中的选择结构。

语句形式

基本形式

if语句形式是通过对表达式进行判断,然后根据判断的结果选择是否进行相应的操作,if表达式一般形式:
if(表达式){语句};
示例:

int main()
{
    int a;
    scanf_s("%d",&s);
    if(a>0)
    {
        printf("yse");
    }
    if(a<=0)
    {
        printf("no");
    }
    return 0;
}

注if语句中括号中的表达式,就是要进行判断的条件,而后面语句部分对应的操作,如果括号中的表达式为真值,那么就执行后面语句的操作。

if-else语句

处理可以指定在条件为真时执行某些语句外,还可以在条件为假时执行另外一段代码,C语言中是利用else语句来完成的。
一般形式:
if(表达式){语句块1}
else{语句块2}

#include <stdio.h>

int main()
{
    int a;
    scanf_s("%d",&a);
    if(a>0)
    {
        printf("yes");
    }
    else {
        printf("no");
    }
    return 0;
}

那么以上连个例子都解决了同一问题,那么他们之间有什么区别?我们来走一遍流程就可以知道,两个if判断了两次,if-else只判断了一次。

if-else-if语句形式

利用if和else关键字的组合可以实现if else if语句,这是对一系列互斥的条件进行检验。
一般形式为:

if(表达式1)
{
语句1;
}else if(表达式2)
{
语句2;
}else if(表达式3)
{
语句3;
}
...
else if(表达式n)
{
语句n;
}
else
{
语句n+1;
}

示例:

int main()
{
    int nNum = 0;
    scanf_s("%d",&nNum);
    if(nNum == 1)
    {
        printf("星期一");
    }
    else if(nNum == 2)
    {
        printf("星期二");
    }
    else if(nNum == 3)
    {
        printf("星期三");
    }
    else if(nNum == 4)
    {
        printf("星期四");
    }
    else if(nNum == 5)
    {
        printf("星期五");
    }
    else if(nNum == 6)
    {
        printf("星期六");
    }
    else if(nNum == 7)
    {
        printf("星期日");
    }
    else 
    {
        printf("你输入数字有误!");
    }
    return 0;
}

switch-case语句

switch-case语句

1.if语句可以处理分支选择语句,但是如果需要处理的问题比较多,或者分支比较多的时候,用if语句的嵌套苏虽然可以处理,但会使用程序过于频繁,可读性差。这时我们就可以使用另外一种能够处理多路分支问题的选择语句:switch-case语句。

switch-case一般形式:

switch(表达式)
{
    case 常量1:
        语句序列;
        break;
    case 常量2:
        语句序列;
        break;
    ...
    default:
        语句序列;
        break;
}


switch(表达式)
{
    case 常量1:
    case 常量2:
        语句序列;
        break;
    default:
        语句序列;
        break;
}

switch-case

使用switch说明

    • switch 后面括号的表达式。
    • 当表达式的值于某一个case后面的常量表达式相等的时候,就执行此case后面的语句,若所有的case中的常量表达式的值都没有于表达式的值匹配,就执行default后面的语句。
    • 每一个case的常量表达式的之必需互不相同;否则就会出现相互矛盾的现象。
    • 各个case和default的出现次序不影响执行结果。
    • 执行完一个case后面的语句后,流程控制转移到下一个case继续执行。
    • break语句是的执行完case语句后跳出switch语句。如果没有break语句,程序将于下一个case语句匹配,直到遇到break为止。
    • 多个case可以共用一组执行语句。
    • 在使用case语句时,不要忘记case的条件只能是常量或者是常量表达式。
    \\使用switch-case语句示例
    #include <stdio.h>
    1. main()
      {
      int nWeek = 0;
      printf("请输入一个0~7的数字:n");
      scanf_s("%d",&nWeek);
      switch(nWeek)
      {

         case 1:printf("星期一");break;
         case 2:printf("星期二");break;
         case 3:printf("星期三");break;
         case 4:printf("星期四");break;
         case 5:printf("星期五");break;
         case 6:printf("星期六");break;
         case 7:printf("星期日");break;
         default:    //以上条件都不满足的时候
             printf("不是1~7的数");
             break;

      }
      return 0;
      }

    两种选择结构

    if···else语句的优点

    • 使用if结构可以实现比较复杂的逻辑判断
    • 用switch结构能够实现的结构,使用if结构都可以实现
    • 分枝较少的情况下使用if更为简单
    • 分枝较多的情况下使用if结构会使程序结构变得复杂
    • 如果if嵌套层次过深,也容易使程序结构变得复杂

    switch语句的优缺点

    • 没有复杂的逻辑判断,程序结构简单
    • 对于分支很多的情况,特别适合使用switch结构。
    • switch结构只能基于一个正数值进行分支选择。
    • switch只能判断是否相等,不能判断某一区间的值。
    • 虽然使用swtich语句编写的程序有规律,可读性强,但是由于switch语句不能根据表达式的取值范围做出选择,所以使用的时候也有很大的局限性。
    最后修改:2020 年 08 月 26 日
    如果觉得我的文章对你有用,请随意赞赏