C编程从入门到实践
上QQ阅读APP看书,第一时间看更新

7.2.2 双分支结构语句

在C语言中,可以使用if-else语句实现双分支结构。双分支结构语句的功能是对一个表达式进行计算,并根据得出的结果来执行其中的操作语句。

使用双分支if语句的具体格式如下所示。

    if(表达式)
      语句1;
    else
      语句2;

上述格式的含义是,如果表达式的值为真,则执行语句1,否则将执行语句2,语句1和语句2只能执行一个。其过程表示如图7-6所示。

图7-6 双分支if语句

看下面的一段代码。

    #include "stdio.h"
    int main(void){
        char c;
        printf("Enter a character:\n");
        scanf("%c", &c);
        if('0'<=c&&c<='9')
            //如果是数字,则输出字符串Number
            printf("%c is Number\n", c);
        else if('A'<=c&&c<='Z')
            //如果不是数字,而是大写字母,则输出字符串Majuscule
            printf("%c is Majuscule\n", c);
        else if('a'<=c&&c<='z')
            //如果不是数字和大写字母,而是小写字母,则输出字符串Lowercase
            printf("%c is Lowercase\n", c);
        else if(c==' ')
            //如果不是数字和大小写字母,而是空格,则输出字符串Blank
            printf("%c is Blank\n", c);
        else if(c=='\n')
            //如果不是数字、大小写字母和空格,而是换行符,则输出字符’\n'
            printf("%c is '\n'\n", c);
        else
            //如果不是数字、大小写字母、空格和换行符,则输出字符串Other
            printf("%c is Other\n", c);
    }

上述代码的执行过程如图7-7所示。

图7-7 执行过程

上述代码通过双分支if语句对用户输入的字符进行判断,若判断输入的是数字、大写字母、小写字母、空格、换行符还是其他格式,并输出判断的结果,如图7-8所示。

图7-8 输出提示

在具体使用时,为了解决比较复杂的问题,有时需要对if语句进行嵌套。嵌套的位置可以固定在else分支下,在每一层的else分支下嵌套另外一个if…else语句。具体格式如下所示:

    if(表达式1)
            语句1;
        else  if(表达式2)
            语句2;
        else  if(表达式3)
            语句3;
            …
        else  if(表达式m)
            语句m;
        else
            语句n;

上述格式的含义是:依次判断表达式的值,当某个值为真时,则执行后面对应的语句,执行完毕后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n,然后继续执行后续程序。其过程表示如图7-9所示。

图7-9 嵌套的if-else语句

实例7-3

根据用户在键盘上输入的字符,输出此字符所属的类别

源码路径daima\7\7-3

本实例的实现文件为“123.c”,具体实现代码如下。

    #include"stdio.h"
    int main(void){
    char c;
    printf("input a character: ");
    c=getchar();
    if(c<32)
          printf("This is a control character\n");
    else if(c>='0'&&c<='9')
          printf("This is a digit\n");
    else if(c>='A'&&c<='Z')
          printf("This is a capital letter\n");
    else if(c>='a'&&c<='z')
          printf("This is a small letter\n");
    else
          printf("This is an other character\n");
    }

拓展范例及视频二维码

范例7-3-01:使用单条件双分支if语句

源码路径:演练范例\7-3-01\

范例7-3-02:由小到大排列数字

源码路径:演练范例\7-3-02\

上述代码能够判别键盘输入字符的类别。可以根据输入字符的ASCII码来判别类别。由ASCII码表可知ASCII值小于32的为控制字符。0~9的为数字,A~Z的为大写字母,a~z的为小写字母,其余则为其他字符。这是一个多分支选择问题,用if…else…if语句编程,并判断输入字符的ASCII码所在的范围,然后分别给出不同的输出。例如输入为“g”,则输出显示它为小写字符。

程序运行后先在界面中提示用户输入字符,输入一个字符并按Enter键后将在界面中输出输入值的类别,例如输入数字12后的执行结果如图7-10所示。

图7-10 输出结果

除了上述介绍的固定嵌套外,开发人员还可以根据需要进行随机嵌套。其一般形式如下。

    if(表达式)
      if语句;

或者为:

    if(表达式)
    if语句;
    else
    if语句;

嵌套内的if语句可能又是if…else形式的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。看下面的代码。

    int main(void){
        int a, b;
        printf("please input A, B:     ");
        scanf("%d%d", &a, &b);
        if(a! =b)
        if(a>b)  printf("A>B\n");
        else      printf("A<B\n");
        else      printf("A=B\n");
    }

上述代码使用了if语句的嵌套结构。采用嵌套结构实质上是为了进行多分支选择,这段代码实际上有3种选择,分别是A>B、A<B和A=B。上述问题用if…else…if语句也可以完成,而且程序会更加清晰。因此,在一般情况下应该尽量少使用if语句的嵌套结构。再看下面的代码。

    #include <stdio.h>
    int main(void){
        float grade;
        printf("Please input student's result:\n");
        scanf("%f", &grade);
        if(grade>=90)
        {
            printf(" A\n");
        }
        else if ((grade>=80) && (grade<90))
        {
            printf(" B\n");
        }
        else if ((grade>=60) && (grade<80))
        {
            printf("C\n");
      }
      else
      {
            printf("D\n");
        }
    }

上述代码可以让用户随便输入一个数字,并根据输入的数字来确定级别。