Chapter 5 选择结构

5.1关系运算符和关系表达式

5.1.1 关系运算符

关系运算就是进行比较运算,关系运算符的功能是对两个操作数进行比较,并产生运算结果0(假)或1(真)。C语言提供的关系运算符有六种:

运算符含义

>

>=

<

<=

==

!=

大于

大于等于

小于

小于等于

等于

不等于

说明:

        ①在以上六种关系运算符中,前四种的优先级相同,后两者的优先级也相同,前四种的优先级高于后面两种。

        ②关系运算符的结合性是从左到右

        ③在C语言中,使等号代替关系运算符“==”进行关系相等判断是常见的错误。

5.1.2 关系表达式

用关系表达符将两个操作数(运算量)连接起来的式子叫做关系表达式。两个操作数(运算量)可以是算术表达式、字符表达式、赋值表达式、关系表达式和逻辑表达式等。

关系表达式的值为逻辑值,即“真”或“假”。C语言中没有逻辑性数据,以“1”表示真,“0”表示假。

为了避免出现逻辑错误,在对某变量进行关系相等或不相等的判断时,习惯于将常量或者表达式置于关系运算符的左侧。即:

                                常量或表达式==变量 或 常量或表达式!=变量

例如:

        if(-1==a)

        a++;

这个就比

        if(a==-1)

        a++;

好一点,能够避免出现将==写成=的情况,造成逻辑错误。

5.2 逻辑运算符

5.2.1 逻辑运算符

C语言提供了三种逻辑运算符,&&逻辑与,||逻辑或,!逻辑非。

说明:

        ①“&&”和“||”为双目运算符,要求有两个操作数(运算量)。当“&&”两边操作数(运算量)均为非零时,结果为1。当“||”两边的操作数(运算量)均为零时,结果为假。

        ②“!”为单目运算符,只要求有一个操作数(运算量)的值为非0者变0,为0者变1。

        ③三种逻辑运算符的优先级由高到低依次为:!、&&、||。

        ④逻辑运算符与其他运算符的优先次序如下:

        a.关系运算符的优先级低于算数运算符,其结合方向为从左到右

        b.逻辑运算符中的“&&”和“||”的优先级低于关系运算符,结合方向为从左到右;“!”的优先级高于算术运算符,其结合方向为从右到左。

        c.以上三种运算符的优先级均高于赋值运算符。

如图:

!(非)

算术运算符

关系运算符

&&和||

赋值运算符

↑高

|

|

|低

5.2.2 逻辑表达式

逻辑表达式是由逻辑运算符将逻辑量连接起来构成的式子。逻辑表达式的值应该是一个逻辑量,“真”或“假”。

5.3选择语句

在C语言中可以使用if语句和swith语句来实现选择结构,它可根据给定的条件,选择所给出的一组操作执行,决定语句的执行顺序。

        设计分支结构应注意以下问题:

        ①正确设置分支的判断条件

        ②根据需求绘制分支流程图

        ③按照流程图编写程序

5.3.1 if语句

if语句是条件选择语句,它能够根据对给定条件的判断,来决定所需要的操作。

一般形式:

        if(表达式)

                语句1;

        [else

                语句2;

                ]

if语句的执行过程是,首先计算表达式的值,然后判断表达式的值,若表达式的值为真(非零),则执行语句1,否则执行语句2。然后退出语句,接着执行下面的语句。

5.3.2 if语句的嵌套

if语句中包含一个或多个if语句称为if语句的嵌套。if语句嵌套的一般形式:

        if(表达式1)

                if(表达式2)语句一

                else        语句二

        else

                if(表达式3) 语句3

                else            语句4

说明:

        ①在上述格式中,if与else既可以成对出现,也可以不成对出现,且else总是与最近的if相配对,这样就避免了因分支结构不同而导致程序出现二义性。在书写这种语句时,每个else应与对应的if对齐,形成锯齿形状,这样能够清晰地表示if语句的逻辑关系。此外,为了避免程序阅读困难,对于if和else下的语句段,建议一律使用大括号加以封装。例如:

        if(s>=0)

        {

                if(s>0)

                        t=1;

        }

        else

                t=0;

        ②阅读程序时,我们经常会遇到if语句的以下使用格式

        if(表达式1)        语句1

        else if(表达式2)        语句2

        else if(表达式3)        语句3

        ...

        else if(表达式n)        语句n

        else                        语句n+1

        此结构实质上是if语句的多层嵌套,它的程序流程是在多个分支中,仅执行表达式为真的哪个else if后面的语句。若所有表达式的值为0,则执行最后一个else后面的语句。

5.3.3 switch语句

switch语句的一般形式:

        switch(表达式)

        {

                case 常量表达式1:[语句序列1]

                case 常量表达式2:[语句序列2]

                ...

                case 常量表达式n:[语句序列n]

                [default:语句序列n+1]

        }

其中方括号括起来的是可选项

switch语句的执行过程是:首先计算switch后表达式的值,然后将其结果值与case后常量表达式的值依次进行比较,若此值与某case后常量表达式的值一致,即转去执行该case后的语句序列;若没有找到与之匹配的常量表达式,则执行default后的语句序列。

        说明:

        ①switch后的表达式和case后的常量表达式必须为整型、字符型或枚举类型

        ②同一个switch语句中各个常量表达式的值必须互相不相等。

        ③case后的语句序列是一条语句,也可以是多条语句,此时多条语句不必用花括号括起来。

        ④由于case后面的常量表达式只起到语句标号的作用,而不进行条件判断,故在执行完某个case后的语句序列后,将自动转移到下个case继续执行,直到遇到switch语句的右花括号或break语句为止。因此,通常在每个case语句执行完后,增加一个break语句来达到终止switch语句执行的目的。

        ⑤case和default的次序可以交换,也就是说default可以位于case前面。并且,改变case后常量出现的次序,也不影响程序的运行结果,但从执行效率的角度考虑,一般将发生频率高的case常量放在前面。

        ⑥多个case可以执行同一个语句序列。

        ⑦switch语句可以嵌套使用,其执行过程与简单switch语句类似。嵌套switch语句中的break语句仅对当前的switch语句起作用,并不会跳出外层switch语句。

5.4 条件运算符和条件表达式

条件运算符是C语言中唯一一个三目运算符,它要求有三个操作对象。

条件表达式的一般形式:

表达式1?表达式2:表达式3

条件表达式的执行顺序是,先求解表达式1,若其值为真,则求解表达式2,整个表达式的值即为表达式2的值,若表达式1的值为假,则求解表达式3,将表达式3的值作为整个条件表达式的值。

        说明:

                ①条件运算符的优先级低于算术运算符、关系运算符及逻辑运算符,高于赋值运算符和逗号运算符。

                ②条件运算符的结合性为从右到左

                ③条件表达式中的三个表达式的类型可以不同,当表达式2和表达式3类型不同时,条件表达式值的类型为二者中较高的类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值