《C语言程序设计》一3.3 多分支选择结构

3.3 多分支选择结构

多分支选择结构有多种形式,嵌套的if语句和switch语句可以实现多分支结构,嵌套的if语句又包括else-if语句和嵌套的if-else语句。

3.3.1 else-if语句

else-if语句是最常用的多分支选择结构,其语法格式如下:

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

执行过程是首先判断表达式1,如果为真,则执行语句1,跳过其余的判断语句,结束整个else-if语句,否则依次判断表达式2到表达式n,直到找到满足条件的表达式,每次运行只有一个分支能够执行。如果没有找到满足条件的表达式,则执行最后的else,执行语句n+1。如果没有else语句,则当所有条件都不满足时什么也不执行。其执行流程如图3-3所示。

《C语言程序设计》一3.3 多分支选择结构

【例3-5】 输入学生的成绩,根据成绩打出相应的评定等级。

学生成绩 等级
grade>=90 A
90> grade >=80 B
80> grade >=70 C
70> grade >=60 D
60> grade E

/*
程序名:prg3-5.c
功能:输入学生的成绩,根据成绩打出相应的评定等级
*/

#include <stdio.h>
int main()
{

   float grade;
   char letter;

   printf("Enter the student's grade: ");
   scanf("%f", &grade);

   if (grade >= 90.0)letter = 'A';
   else if (grade >= 80.0)letter = 'B';
   else if (grade >= 70.0)letter = 'C';
   else if (grade >= 60.0)letter = 'D';
   else letter = 'E';

   printf("The student grade level is :%c", letter);

   return 0;
}

3.3.2 嵌套的if-else语句

在一个if-else语句内包含一个以上的if-else语句称为嵌套的if-else语句,它的一般形式如下:

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

当只有else部分嵌入if-else语句时,就是典型的else-if语句,它是最常用的实现多分支的方法。

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

等价于

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

在嵌套的if-else语句中,很容易出错的地方是else与if匹配错误,例如:

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

第一个else与上面两个if中的哪一个匹配呢?为了避免产生二义性,C语言规定,从内层开始,else总是与它上面最近的、未曾匹配过的if匹配。上例中尽管else与第一个if对齐,但它与离它最近的第二个if匹配。
为了避免产生错误,在if嵌套语句中通常采用缩进的代码书写方式表示不同的层次,使同一层次位于相同的缩进位置,这样书写的程序清晰易读,便于改错。
【例3-6】 输入x值,计算出相应的y值。函数的公式如下:

−x      x<0

  y=     0           x=0

           x+10      x>0

该题可以用三种嵌套方式来实现。
方式一:在if中嵌套

#include<stdio.h>

int main()
{
  int x,y;
 
  printf("Enter x  value: ");
  scanf("%d", &x);
  
  if(x >= 0)  
     if(x > 0)
       y = x + 10;
      else
        y = 0;
  else
       y = -x;

  printf("y= %d",y);

  return 0;
    
}

方式二:在else中嵌套

#include<stdio.h>

 int main()
{
  int x,y;
 
  printf("Enter x  value: ");
  scanf("%d", &x);
  
  if(x > 0)  
     y = x + 10;
  else
      if(x == 0)
         y = 0;
      else
         y = -x;
  
  printf("y= %d",y);

  return 0;
    
}

方式三:用else-if语句实现

#include<stdio.h>
 int main()
{
 int x,y;
 
  printf("Enter x  value: ");
  scanf("%d", &x);
  
  if(x > 0)  
     y = x + 10;
  else if(x == 0)
      y = 0;
  else
      y = -x;
  
  printf("y= %d",y);

  return 0;
    
}

3.3.3 switch语句

在多分支的应用中,有些情况是通过同一表达式的不同取值来决定执行哪一条分支。如果采用else-if语句或嵌套的if结构实现,程序不够简洁。C语言提供了switch语句专门处理此类多路分支的情况。switch语句的一般格式为:

switch(表达式)
{
  case 常量表达式1:
     语句1;
     break;
  case 常量表达式2:
     语句2;
     break;
 
      …
  case 常量表达式n:
     语句n;
     break;
  default:
     语句n+1;
}

其中表达式的值必须是整型、字符型或枚举型,否则会发生编译错误。其执行过程是首先判断switch后面表达式的值,依次与case常量表达式比较,如果与某个case中的常量表达式相等,则执行其后的语句,遇到break语句跳出整个switch结构执行后面的语句。如果表达式的值与任何case常量表达式都不相等,则执行default中的语句。switch结构中的default可以省略,如果省略了default,当表达式的值与任何case中的常量表达式都不相符时,就什么都不执行。
注意,所有的case后面的语句块后都需要配一个break语句,确保一个特定的case结束。如果省略break语句,则当前匹配的case值之后所有的case值都不再判断,直接执行其后的所有case和default后的语句。
【例3-7】 实现简单的四则运算,从键盘上输入操作符和两个操作数,计算出运算结果。
该问题的解决步骤如下:
1)输入+,−,*,/ 任意一值存入变量。
2)根据变量的值执行相应的操作。

/*
程序名:prg3-7.c
功能:实现简单的四则运算
*/

#include<stdio.h>

int main()
{
  float num1,num2,result;
  char operate;
  
  printf("Please enter a operator: ");
  scanf("%c", &operate);        //输入操作符

  printf("Please enter two numbers: ");
  scanf("%f,%f", &num1,&num2);    //输入两个操作数

  switch(operate)
  {  //对operate做多次判断,根据不同的条件执行不同的语句
     case '+':
       result = num1 + num2;
       printf("%5.2f +%5.2f = %5.2f", num1,num2,result);
       break;                 //break语句是必需的,否则会执行下面的语句
     case '-':
       result = num1 - num2;
       printf("%5.2f -%5.2f = %5.2f", num1,num2,result);
       break;
     case '*':
       result = num1 * num2;
       printf("%5.2f *%5.2f = %5.2f", num1,num2,result);
       break;
     case '/':
       if(num2 != 0)//除数不能为0
       {
            result = num1 / num2;
            printf("%5.2f /%5.2f = %5.2f", num1,num2,result);
       }
       else
         printf("In a division operation,the divisor can not be zero");
       break;
     default:               //输入的不是+,-,*,/时执行
         printf("The operator is invalid");  
  }
  
  return 0;
}
上一篇:JavaScript使用严格模式(Strict Mode)


下一篇:视图控制器生命周期中各个重要的方法(Swift) (Important Methods during the Lifecycle of a View Controller)