设为首页 加入收藏

TOP

2.5.2 选择结构
2013-10-12 07:02:59 来源: 作者: 【 】 浏览:106
Tags:2.5.2 选择 结构

2.5.2 选择结构

选择程序结构用于判断给定的条件,根据判断的结果来控制程序的流程。在选择结构中,程序的处理步骤出现了分支,它需要根据某一特定的条件选择其中的一个分支执行。选择结构有单选择、双选择和多选择3 种形式。

单选择结构是最简单的选择结构,如图2.3 所示,如果条件满足则执行S1,否则向下到流出口处。也就是说,当条件不满足时,什么也没执行。C语言用if语句实现这种功能。其一般形式为:

  1. if (表达式) 语句序列 

if语句的执行过程与if else相似(稍后将会看到),只是在判断条件为“假”时,直接跳过语句序列,执行if的下一条语句。

 
图 2.3 单选择结构
双选择结构如图2.4 所示,程序流程出现了两个可供选择的分支,如果条件满足就执行S1 处理,否则执行S2 处理。两个分支中只能选择一条且必须选择一条执行,但不论选择了哪一条分支执行,最后流程都一定到达结构的出口点处。C语言用if else语句实现这种功能。其一般形式为:
  1. if (表达式) 语句1  
  2. else 语句2 

 
(点击查看大图)

程序 2.5 给出了一个简单的选择结构程序的例子。

【程序 2.5】求两个数中的最大值:test5.c。

  1. #include <stdio.h> 
  2. main()  
  3. {  
  4. int x,y;  
  5. printf("Enter x and y:\n");  
  6. scanf("%d %d",&x,&y);  
  7. if( x > y )  
  8. printf("max=%d\n",x); /*如果条件满足执行此条语句*/  
  9. else  
  10. printf("max=%d\n",y); /*如果条件不满足执行此条语句*/  

程序运行结果如下(□表示空格,↙表示回车):

  1. Enter x and y:  
  2. 10□5↙  
  3. max=10 

多选择结构如图2.5 所示,程序出现多个分支,程序执行方向将根据条件确定。如果满足条件1 则执行S1,如果满足条件n 则执行Sn。总之,要根据条件选择多个分支中的一个执行,不论选择哪一条分支,最后流程要到达同一个出口,如果所有分支条件都不满足,则直接到达出口。

 
图2.5 多选择结构
在 C 语言中,用嵌套if 语句可以实现多分支结构程序,但分支较多时就显得很复杂,可读性差。C 语言中的switch 语句专用于实现多分支结构程序。switch 语句的调用形式如下:
  1. switch (表达式)  
  2. {  
  3. case 常量表达式1: 语句1;  
  4. case 常量表达式2: 语句2;  
  5. ……  
  6. case 常量表达式n: 语句n;  
  7. default : 语句n+1;  

switch语句的执行过程可描述为:首先计算表达式的值,然后依次与常量表达式i(i=1,2,3,…,n)进行比较,若表达式的值与某常量表达式相等,则从该常量表达式处开始执行,直到switch语句结束。若所有的常量表达式i(i=1,2,3,…,n)的值均不等于表达式的值,则从default处开始执行。程序2.6 是一个关于多分支选择结构的例子。

【程序2.6】输入某学生的成绩,输出该学生的成绩和等级(A级:90~100,B级:80~89,C级:60~79,D级:0~59)。

为了区分各分数段,将[0,100]每十分划分为一段,则x/10的值为0 到10,它们表示11段:0~9 为0 段,10~19 为1 段,……,90~99 为第9 段,100 为第10 段,用case后的常量表示段号。例如,x=66,则x/10 的值为6,所以x 在第6 段,即60≤x<70,属于C 级。若x 不在[0,10]段内,则表示x是非法成绩,在default分支处理。控制流程如图2.6 所示,其代码实现如test6.c。

 
图2.6 多分支结构
程序 2.6:test6.c。

  1. #include <stdio.h> 
  2. main()  
  3. {  
  4. int x;  
  5. printf("Please input x:\n");  
  6. scanf("%d",&x); /*输入学生成绩*/  
  7. switch(x/10) /*判断条件*/  
  8. {  
  9. case 10: printf("x=%d -> A\n",x);break; /*分段显示结果*/  
  10. case 9: printf("x=%d -> A\n",x);break;  
  11. case 8: printf("x=%d -> B\n",x);break;  
  12. case 7: printf("x=%d -> C\n",x);break;  
  13. case 6: printf("x=%d -> C\n",x);break;  
  14. case 5: printf("x=%d -> D\n",x);break;  
  15. case 4: printf("x=%d -> D\n",x);break;  
  16. case 3: printf("x=%d -> D\n",x);break;  
  17. case 2: printf("x=%d -> D\n",x);break;  
  18. case 1: printf("x=%d -> D\n",x);break;  
  19. default: printf("x=%d data errer!\n",x); /*如果x不在[0,10]段内,则出错*/  
  20. }  

程序运行结果如下(↙表示回车):

  1. Please input x:  
  2. 65↙  
  3. x=65 -> C 

可以看到,当输入的成绩为65时,我们得到了等级C。

说明

break语句用于终止它所在的switch语句的执行。如果没有break语句,本例在执行完case 6后,还会依次执行case 5、case 4等后面的语句。读者可以自己验证一下不带break语句的情况。一般在多分支选择结构的程序中,在得到正确结果后,立即使用break 语句来终止switch语句的执行。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.3.2 Emacs 下的基本操作(1) 下一篇2.5.1 顺序结构

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: