C语言学习----05 选择结构程序设计

本文详细介绍了C语言中关系运算、逻辑运算及其在条件判断中的应用,包括单分支结构(如if语句)和双分支结构(如if...else),以及条件运算符的使用。此外,还探讨了switch语句的多分支选择结构。
摘要由CSDN通过智能技术生成

条件的表示

       如何表示各种条件?判断条件是否成立的依据是什么?例如,在购票是如何判断淡季或旺季?对于更复杂的条件如何表示?在C语言中主要使用关系运算和逻辑运算来表示各种条件。

1. 关系运算

       在程序中经常需要比较两个数据的大小,以决定程序下一步的执行过程。关系运算的功能就是比较两个运算对象的大小关系。如果描述的大小关系成立,结果为“真”,用“1”表示;不成立则结果为“假”,用“0”表示。在C语言中,将非0视为“真”,0视为“假”。                                                                 C语言提供了6种关系运算符,如下表;

关系运算符
运算符含义操作数要求优先级结合方向运算实例运算结果
<小于2个(二元)6从左向右a+b<c+d1((a+b)<(c+d))
<=小于等于a<+2*b1((a<=(2*b))
>大于'a'>'b'0(ASCII值比较)
>=大于等于d>=c>=b0((d>=c)>=b)
==等于7a>b==c>d1((a>b)==(c>d))
!=不等于b==2!=c1((b==2)!=c)

               在连续使用关系运算符时,要注意正确表达运算的含义,以及运算优先级和结合方向。例如,上表中d>=c>=b在数学上是成立的,运算的结果为1,而在C语言中运算的过程是,先求出d>=c的结果,在将结果1做>=b判断,最终表达式的结果为0。如果要表达式d>=c>=b在数学上成立,就要运用下面介绍的逻辑运算符进行连接,即写为d>=c&&c>=b。

2. 逻辑运算

在程序设计中,有时要求一些条件同时成立,有时只要求其中一个条件成立,这时就要用到逻辑运算符。C语言提供了3种逻辑运算符,如下表:

逻辑运算符
运算符含义操作数要求优先级结合方向运算实例运算结果
逻辑非1个(一元)2从右向左!30
&&逻辑与2个(两元)11从左向右

3&&4

3&&0

0&&0

1

0

0

||逻辑或12

3||4

3||0

0||0

1

1

0

逻辑运算真值表
ab!aa&&ba||b
非0非0011
非00001
0非0101
00100

        (1)逻辑非(!):单目运算符,对运算对象的值取反,运算对象为真时,结果为假;运算对象为假时,结果为真。                                                                                                                                      (2)逻辑与(&&):双目运算符,两个运算对象同时为真时,运算结果才为真,否则为假。                  (3)逻辑或(Il):双目运算符,两个运算对象任意一个为真时,运算结果即为真,同时为假时,结果为假。

        如何判断一个字符是否为英文字母?我们知道英文字母包括大写字母和小写字母共52个。对应的逻辑表达式为:ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'其中ch表示要判断的字母。用表达式ch>='A'&&ch<=Z'判断字符变量ch的值是否为大写字母,用ch>='a'&&ch<='z'判断字符变量ch的值是否为小写字母,那么表达式ch>='A'&&ch<=Z'||ch>='a'&&ch<='z判断字符变量ch的值是否为大写或者小写字母,即是否为任意字母。                                                                                                        从逻辑运算真值表可以看出,逻辑与、逻辑或有如下特点:                                                                    (1)a&&b,当a为0时,无论b为何值,结果均为0。                                                                            (2)allb,当a为1时,无论b为何值,结果均为1。                                                                           C语言利用上述性质,在进行逻辑与运算时,如果左侧运算对象为0,则不需计算右侧的运算对象,直接判断逻辑运算的结果为0;而进行逻辑或运算时,如果左侧运算对象为1,则不需计算右侧的运算对象,直接判断逻辑运算的结果为1。                                                                                       也就是说,逻辑与、逻辑或这两个运算符有很特别的“短路”功能,即无论进行单个还是连续的逻辑运算,都严格按照从左到右的方向进行。当根据左侧的运算对象已经能判断整个逻辑表达式的结果时,则不再计算右侧的运算对象。

单分支结构

     在C语言程序设计中,表达选择某种条件的典型控制结果是if语句和switch语句。本节先讨论if的单分支结构。  

    if单分支结构的语句格式如下:                                                                                                                  if(表达式)                                                                                                                                            {                                                                                                                                                              语句                                                                                                                                                 }

注意,表达式两边的圆括号是必需的,他们是if语句的组成部分。

  if单分支结构的执行流程如下:                                                                                                                 (1)计算圆括号内表达式的值。                                                                                                       (2)如果表达式的值为非0(C语言把非0值解释为“真”值),则执行圆括号后边的语句(复合语句),然后退出选择控制结构。                                                                                                           (3)如果表达式的值为0(C语言把0值解释为“假”值),则直接退出选择结构。

双分支结构

       根据判断条件是否成立有两种选择,而且要在这两种选择中选择其一执行,就是双分支结构。

           if双分支结构的语句格式如下:                                                                                                                  if(表达式)                                                                                                                                            {语句1}                                                                                                                                             else                                                                                                                                                         {语句2}                 

   if...else双分支结构执行流程如下:                                                                                                           (1)计算表达式的值。                                                                                                                     (2)如果表达式值为非0,则执行语句(复合语句)1,然后退出选择控制结构。                           (3)如果表达式的值为0,则执行语句(复合语句)2,然后退出选择控制语句。

条件运算   

条件运算符是C语言中唯一的一个三目运算符,由两个符号“?”和“:”组成,需要3个运算对象,其使用格式如下:                                                                                                                                          表达式1?表达式2:表达式3                                                                                                           求解过程中:若表达式1的值为真(非0),则执行表达式2,将其结果作为整个表达式的值,否则执行表达式3,将其结果作为整个条件表达式的值。

条件运算符
运算符含义操作数要求优先级结合方向运算实例运算结果
:?条件运算符3个(三元)13从右往左a>b?a:c>d?c:da>b?a:(c>d?c:d)

             

  if...else 嵌套

if语句的嵌套是指在if或else子句中又包含一个或多个if语句。内层的if语句既可以嵌套在if子句中,也可以嵌套在else子句中。内嵌if语句的一般格式如下:                                                                                    if (表达式1)                                                                                                                                                    if (表达式2)       语句1                                                                                                                       else                    语句2                                                                                                                 else                                                                                                                                                                   if (表达式3)      语句3                                                                                                                        else                    语句4   

    这种基本形式嵌套的if语句也可以进行以下几种变化。                                                                          (1)只在if子句中嵌套if语句,格式如下:                                                                                                   if (表达式1)                                                                                                                                                   if (表达式2)       语句1                                                                                                                       else                    语句2                                                                                                            else                                                                                                                                                          语句3                                                                                                                               

       (2)只在else子句中嵌套if语句,格式如下:                                                                                                 if (表达式1)                                                                                                                                               语句1                                                                                                                                           else                                                                                                                                                               if (表达式2)      语句2                                                                                                                       else                    语句3         

      (3) 不断在else子句中嵌套if语句,形成多层嵌套,格式如下:                                                                      if (表达式1)           语句1                                                                                                                  else                                                                                                                                                          if (表达式2)      语句2                                                                                                                        else                                                                                                                                                         ......                                                                                                                                                           if(表达式n)         语句n                                                                                                                         else                    语句n+1                                                                                         

 此种情况形成了多分支的if语句,此时的语句可以用以上语句格式表示,语句的层次比较分明。

    if...else 配对 

嵌套的if语句可能有又是if...else语句,这将会出现多个if和else重叠的情况,这时要特别注意if与else的配对关系规则。if与else配对的规则如下所述。                                                                                 (1)缺省“{ }”时,else总是与它上面的最近的未配对if配对。例如:                                                                 if ()                                                                                                                                                            if ()      语句1                                                                                                                                 else                                                                                                                                                          if ()       语句2                                                                                                                                      else      语句3                                                                                                                编程者把else写在第一个if(外层if)的同一列上,希望else与第一个if对应,但实际上else是与第二个if配对的,因为他们相距最近。                                                                                                   

 (2)if与else数目不一样时,为实现编程者的意图,可以加({ })来确定配对关系。                                        if ( )                                                                                                                                                           {if()    语句1}                                                                                                                                  else                                                                                                                                                          if ()    语句2                                                                                                                                        else   语句3                                                                                                                       这时“{ }”限定了内嵌if语句的范围。

                                                                 多分支结构 

 if语句的级联  

     if多分支结构语句的格式如下:                                                                                                                        if (表达式1)                  语句1                                                                                                            else   if(表达式2)          语句2                                                                                                            else   if(表达式3)            语句3                                                                                                                   ......                                                                                                                                              else   if(表达式n)            语句n                                                                                                            else                               语句n+1                                                                                              其执行过程中:首先判断表达式1的条件是否成立,若成立则执行语句1,否则判断表达式2的条件是否成立,若成立则执行语句2,……,以此类推,若n个表达式的条件都不成立,则执行语句n+1,然后退出选择语句。

         

   switch语句     

       if语句一般用于两个分支的选择执行,尽管可以通过if语句的嵌套形式实现多选择,但这样往往会使if语句的嵌套层次太多,降低了程序的可读性。而C语言中的switch语句也是一种多分支选择结构,它提供了更方便的选择功能。                                                                                                             switch多分支选择语句的一般格式如下:                                                                                                    switch(表达式)                                                                                                                                      {                                                                                                                                                                  case 常量表达式1:语句1                                                                                                                    case 常量表达式2:语句2                                                                                                                     ……                                                                                                                                                     case 常量表达式n:语句n                                                                                                                     default:                 语句 n+1                                                                                                        }                                                                                                                                                 执行过程:首先计算switch表达式的值,然后与各个case的“常量表达式”进行比较,若相等,则从其下的语句开始,依次向下执行各语句块的语句,直至遇到强制中断语句break或执行完最后一个语句块为止;若所有case都不符合要求,则执行default下面的语句块。                                                 (1)switch语句后面的表达式必须用圆括号括起来,其取值必须是整型、字符型或枚举类型。switch语句后面用花括号括起来的部分称为switch语句体,其中的“!”不能省略。                                        (2)case后面必须是常量或常量表达式,不能是变量。case与其后面的常量表达式合称为case语句标号,由它来判断该执行哪条case后面的语句。case和其后面的常量表达式中间应该有空格。常量表达式的类型必须与switch后面的表达式的类型相同。                                                                   (3)各case语句标号值应该互不相同。case语句标号后的语句1、语句2等可以是一条语句,也可以是若干条语句。                                                                                                                              (4)default也起标号的作用,代表所有case标号之外的标号,即default可以出现在语句体中任何标号的位置上,而不会影响程序的执行结果。在switch语句体中可以没有default标号。                                                                                                                                                                                    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值