C语言程序设计案例精粹
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

5.3 多分支if语句

多分支if语句又称为“if-else语句”,是由关键字if和else构成的多分支结构语句。多分支控制语句可用于更加复杂的程序结构。

5.3.1 if-else语句的结构

if-else语句的一般形式为:

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

if-else语句的执行规则为:若表达式的值为真(非0),则执行语句段1,否则进入else分支,执行语句段2,流程图如图5-4所示。

与简单的if语句类似,当语句段中只有一条语句时,可将语句直接放在if(表达式)的右边或下边,当语句段有多条语句时,应使用大括号封装。

这里我们约定,不论语句段包含几条语句,都使用大括号封装。即if-else语句的表达形式为:

图5-4 if-else语句流程图

      if(表达式)
      {
      语句段1
      }
      else
      {
      语句段2
      }

范例5.2 CalculateAbstract.c

CalculateAbstract.c数学计算中,绝对值使用| |表示,但C语言中,计算数据的绝对值需要分析判断来实现。本范例从键盘输入参数a的值,然后利用if-else语句实现绝对值的计算,并打印信息显示数据符号是否发生了变化。(光盘\chat5\ CalculateAbstract.c)

          01   #include<stdio.h>
          02   main()
          03   {
          04       float a=0.0;
          05       printf("请输入参数a的值:\n");
          06       scanf("%f", &a);                              //输入a的值
          07       if(0>=a)                                   //判断a是否小于0
          08       {
          09           a=-a;                                 //a为负值,需要调整
          10           printf("a的值已经改变,a=%f\n", a);          //打印修改信息
          11       }
          12       else
          13       {
          14           printf("a不需要改变,a=%f\n", a);             //打印无修改信息
          15       }
          16   }

程序第7行对输入的数据a进行判断,若小于0,则通过第9行将数据改为正值,否则,直接打印出结果和信息。

程序运行时由键盘输入数据-100,按回车键。

请输入参数a的值:

-100

输出结果为:

a的值已经改变, a= 100.000000

作者心得:

C语言也提供了标准库函数用于计算变量或表达式的绝对值,函数名称为abs(表达式),这是一个数学函数,因此使用该函数前应在文件头部包含头文件math.h。

5.3.2 if-else语句的应用

if-else语句在实际应用中非常广泛。实际生活中经常需要在是与非之间进行判断,如今天是星期天,则不用上班或上学,可以按照星期天的安排生活等。

范例5.3

JudgeOddorEven.c键盘输入int型参数a的值,判断其是否为偶数,若为偶数,则打印 a 为偶数信息;若为奇数,则打印为奇数信息。利用模除(%)判断 a 值是否为偶数,使用if-else分支语句实现不同信息的输出。(光盘\chat5\ JudgeOddorEven.c)

          01   #include<stdio.h>
          02   main()
          03   {
          04       int a=0;
          05       printf("请输入参数a的值:\n");
          06       scanf("%d", &a);                         //输入变量a的值
          07       if(0==a%2)                             //判断a是否为偶数
          08       {
          09           printf("a=%d是偶数\n", a);            //偶数打印
          10       }
          11       else
          12       {
          13           printf("a=%d是奇数\n", a);            //奇数打印
          14       }
          15   }

程序第7行使用模除运算判断输入的变量是否为偶数,若为偶数,就打印偶数信息;否则,执行else部分,打印奇数信息。

程序执行时由键盘输入数值-100,按回车键。

请输入参数a的值:

-100

输出结果为:

a = -100是偶数

通常,条件运算符也可以完成简单的条件判断,但并不适合完成多语句的条件判断,如前述章节对闰年的判断,这里重新使用if-else语句进行闰年的判断。

范例5.4 JudgeLeapYearorNotWithIfElse.c

JudgeLeapYearorNotWithIfElse.c键盘输入unsigned int型年份,判断其是否为闰年,若为闰年,则打印为闰年信息;若为平年,则打印为平年信息。闰年的判断方法是:若年数能被400整除,那么该年是闰年,若能被4整除但不能被100整除,该年是闰年,其他年份都是平年。(光盘\chat5\ JudgeLeapYearorNotWithIfElse.c)

          01   #include<stdio.h>
          02   main()
          03   {
          04       unsigned int year=0;
          05       printf("请输入年份:\n");
          06       scanf("%d", &year);                           //输入年份
          07       if((0==year%4&&0! =year%100)||0==year%400)     //判断输入年份是否为闰年
          08       {
          09           printf("%d年是闰年\n", year);              //打印闰年信息
          10       }
          11       else
          12       {
          13           printf("%d年是平年\n", year);              //打印平年信息
          14       }
          15   }

程序第7行通过逻辑运算符和关系运算符实现了对闰年和平年的判断,表达式0==year%4&& 0!=year%100用于判断该年份是否能被4整除但不能被100整除,表达式0==year%400用于判断该年份是否能被400整除。

程序执行时由键盘输入年数2010,按回车键。

请输入年份:

2010

输出结果为:

2010年是平年

5.3.3 if-else-if语句的结构及应用

前面讲述的if语句一般都用于单分支或两个分支。当有多个分支选择时,可采用if-else-if语句,这种结构可实现多分支程序流程设计。

if-else-if类型结构语句的一般形式为:

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

if-else-if的执行流程为:依次判断表达式的值,当出现某个值为真时,则执行if语句对应的语句段。然后跳出整个if语句,执行if-else-if语句之外的程序。如果所有的表达式均为假,则执行语句段n,其流程图如图5-5所示。

图5-5 if-else-if流程图

范例5.5 StudentScoreSet.c

StudentScoreSet.c学生成绩分为5个等级,分别为:

A: 90<=score<=100

B: 80<=score<90

C: 70<=score<80

D: 60<=score<70

E:score<60

键盘输入某学生成绩,判断其属于哪个等级,并打印到屏幕上。使用多分支if-else-if语句实现。

(光盘\chat5\ StudentScoreSet.c)

          01   #include<stdio.h>
          02   main()
          03   {
          04       unsigned int score=0;
          05       printf("请输入学生成绩:\n");
          06       scanf("%d", &score);                              //输入学生成绩
          07       if(90<=score&&score<=100)                        //判断是否为A级
          08       {
          09           printf("该学生成绩为A: %d\n", score);
          10       }
          11       else if(80<=score&&score<90)                      //判断是否为B级
          12       {
          13           printf("该学生成绩为B: %d\n", score);
          14       }
          15           else if(70<=score&&score<80)                  //判断是否为C级
          16           {
          17               printf("该学生成绩为C: %d\n", score);
          18           }
          19           else if(60<=score&&score<70)                  //判断是否为D级
          20           {
          21               printf("该学生成绩为D: %d\n", score);
          22           }
          23           else if(score<60)                             //判断是否为E级
          24           {
          25               printf("该学生成绩为E: %d\n", score);
          26           }
          27               else                                  //错误输入
          28               {
          29                   printf("输入错误ERROR: %d\n", score);
          30               }
          31   }

程序第7行if语句判断分数是否属于A级,若不属于,则转入11行判断是否属于B级,若仍然不属于,则顺次判断下去,直到找到属于的范围、级别为止。程序第27行else语句用于进行保护输出,即当输入的数据不属于任何级别时,输出错误信息。

程序执行时输入数据95,按回车键。

请输入学生成绩:

95

输出结果为:

该学生成绩为A: 95

if-else-if类型语句中,else只能与上面最近的一个if语句配对构成分支,并且,在该语句中可以没有else,这种类型的语句称为嵌套的if语句,下节将对该内容作详细介绍。if-else-if语句还可用于判断键盘输入的字符类型。

范例5.6 JudgeCharacterFromKeyboard.c

JudgeCharacterFromKeyboard.c使用getchar函数接收键盘输入的一个字符,并判断该字符类型,若输入为字母,则打印字母信息;若为数字,则打印数字信息;若为控制字符,则打印控制字符信息。(光盘\chat5\ JudgeCharacterFromKeyboard.c)

          01   #include<stdio.h>
          02   main()
          03   {
          04       char c;
          05       printf("请输入字符:");
          06       c=getchar();                        //键盘接收字符
          07       if(c>='0' &&c<='9' )                   //判断是否为数字
          08       {
          09           printf("这是一个数字:%c\n", c);
          10       }
          11       else if(c>=' A' &&c<=' Z' )                //判断是否为大写字母
          12       {
          13           printf("这是一个大写字母:%c\n", c);
          14       }
          15           else if(c>=' a' &&c<=' z' )            //判断是否为小写字母
          16           {
          17               printf("这是一个小写字母:%c\n", c);
          18           }
          19               else                      //其他字符处理
          20               {
          21                   printf("这是一个非字母数字字符\n");
          22               }
          23   }

程序第7行判断输入的字符是否为数字,程序第11行用于判断输入的字符是否为大写字母,程序第15行判断输入的字符是否为小写字母。

程序运行时输入6,按回车键。

请输入字符:6

输出结果:

这是一个数字: 6

这三种类型的判断没有先后顺序,也可以调整它们的判断顺序。例如将大写字母的判断放到最前面,读者可修改程序验证输出结果。