前言:
●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!
文章目录:
• 关系运算符与关系表达式
• 逻辑运算符与逻辑表达式
• if语句 • switch语句
• if语句的嵌套
• switch语句的使用
引言:
C语言提供了可以进行逻辑判断的选择语句,由选择语句构成的选择结构,将根据逻辑判断的结果决定程序的不同流程。 选择结构又称分支结构,是结构化程序设计的三种基本结构之一。
一,关系运算符与关系表达式
在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。
1. 关系运算符及其优先级
C语言提供了6种关系运算符
含义 |
运算符 |
操作数个数 |
优先级 |
结合性 |
< |
小于 |
双目 |
6 |
左结合 |
<= |
小于或等于 |
双目 |
||
> |
大于 |
双目 |
||
>= |
大于或等于 |
双目 |
||
== |
等于 |
双目 |
7 |
左结合 |
!= |
不等于 |
双目 |
说明:
(1)关系运算符都是双目运算符,其结合性为左结合。
(2)六个关系运算符分为两级,前四种(<,<=,>,>=)为同级运算符,后两种(==和!=)优先级相同,且前四种的优先级高于后两种。
(3)关系运算符的优先级低于算术运算符,高于赋值运算符。
2.关系表达式
用关系运算符把两个表达式连接起来的式子称为关系表达式。
一般形式为: <表达式1> <关系运算符> <表达式2>
说明:
(1)表达式1和表达式2可以是算术表达式、逻辑表达式、赋值表达式、关系表达式、字符表达式。
(2)关系表达式的值是一个逻辑值,即“真”或者“假”。C语言没有逻辑型数据,所以用“1”表示真,用“0”表示假。
(3)字符常量是以它对应的ASCII码参与运算的。
3.逻辑运算符及其优先级
C语言中提供了3种逻辑运算符
含义 |
运算符 |
操作数个数 |
优先级 |
结合性 |
! |
非运算 |
单目 |
2 |
右结合 |
&& |
与运算 |
双目 |
11 |
左结合 |
|| |
或运算 |
双目 |
12 |
左结合 |
说明:
(1)基本逻辑运算真值表如下表所示:当两个操作数为不同的逻辑值时,其基本逻辑运算的运算结果。
a |
b |
!a |
a&&b |
a||b |
F |
F |
T |
F |
F |
F |
T |
T |
F |
T |
T |
F |
F |
F |
T |
T |
T |
F |
T |
T |
(2)!为单目运算符,具有右结合性。&&和||均为双目运算符,具有左结合性。逻辑运算符和其它运算符优先级的运算顺序由高到低表示如下: !→算术运算符→关系运算符→&&→||→赋值运算符
用逻辑运算符把表达式连接起来的式子称为逻辑表达式。
一般形式为: [<表达式1>] <逻辑运算符> <表达式2>
说明:
(1)表达式1和表达式2可以是关系表达式,也可以是逻辑表达式。如(!6)||(8<=2)。
(2)与关系表达式相同,由于C语言没有逻辑型数据,所以逻辑表达式的运算结果也是用“1”表示真,用“0”表示假。但反过来在判断一个量是为“真”还是“假”时,把“0”认为“假”,而所有非“0”的数值认为“真”。
(3)在逻辑表达式求解中,并不是所有逻辑运算都被执行。
① a&&b&&c中,由与运算符特点得知,全真为真,其余为假。所以当“&&”一端为0,则不必再计算另一端,该表达式的值肯定为0。
② a||b||c中,由或运算符特点得知,全假为假,其余为真。所以当“||”一端为1,则不必再计算另一端,该表达式的值肯定为1。
4.if语句的三种形式
(1). 单分支结构: if(<表达式>) 语句;
其语义是:先判断条件,如果表达式的值为真,则执行其后的语句,否则不执行该语句。该语句可以是复合语句,即用花括号括起来的多个语句。。
编辑
(2). 双分支结构:
if(<表达式>) 语句1;
else 语句2;
if(<表达式>) 语句1; else 语句2;
其语义是:如果表达式的值为真,则执行语句1,否则执行语句2 。
编辑
(3).多分支结构:
if-else-if是一种多分支选择结构,
if-else-if是一种多分支选择结构,其一般形式为: if(<表达式1>) 语句1; else if(<表达式2>) 语句2; else if(<表达式3>) 语句3; … else if(表达式n-1) 语句n-1; else 语句n;
其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。
编辑
说明:
在使用if语句时应注意以下问题:
(1)if语句中的表达式必须用括号括起来,类型通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至可以是一个变量。
(2)在if语句中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{ }括起来组成一个复合语句。但要注意的是在}之后不能再加分号。
当if语句中的执行语句又是if语句时,则构成了if 语句嵌套的情形:
if(<表达式>) if语句; 或者为 if(<表达式>) if语句; else if语句;
在嵌套内的if语句允许出现if-else,对出现多个if和多个else重叠的情况,需要特别注意if和else的配对问题。
5.条件运算符
条件运算符是C语言中惟一的三目运算符。由问号“?”和“:”两个字符组成,用于连接3个运算对象。 其一般形式为: <表达式1>?<表达式2>∶<表达式3>
其运算过程为:如果表达式1的值为真(非0),则以表达式2的值作为条件表达式的值,否则表达式3的值为条件表达式的值。
说明:
(1)在if语句中,当被判别的表达式的值为“真”或“假” ,都执行一个赋值语句且向同一个变量赋值时,可以用一个条件运算符来处理。
(2) 条件运算符优先级别为13,仅仅高于赋值运算符 ,低于关系运算符和算术运算符。其结合方向为“自右至左”。 (3) “表达式2”和“表达式3”不仅可以是数值表达式,还可以是赋值表达式或函数表达式。
C语言提供了另一种用于多分支选择的switch语句,以更方便的实现深层嵌套的if-else逻辑。
6.switch语句
switch语句是多分支选择结构,
switch语句是多分支选择结构,其一般形式为: switch(表达式) { case <常量表达式1>: 语句1; case <常量表达式2>: 语句2; … case <常量表达式n>: 语句n; default: 语句n+1; }
switch语句的语义是: 先计算switch后面表达式的值,并与case后面常量表达式的值逐个比较。 当与某个常量表达式的值相等时,即执行此常量表达式后面的语句,并且在执行该语句结束后不再进行判断,继续执行后面所有的语句。 如表达式的值与所有case后面常量表达式均不相同时,则执行default后的语句。
说明:使用switch语句时应注意以下几点:
(1)在case后的各常量表达式的值不能相同,否则会出现错误。
(2)在case后,允许有多个语句,可以不用{}括起来。
(3)各case和default子句先后顺序可以变动,不会影响程序执行结果。
(4)default子句可以省略不用。
应用举例:
例. 编写程序,对任意输入的两个实型数以及一个运算符(+、-、*、/),能够输出算式和计算结果:
#include "stdio.h" void main( ) {float data1,data2,data3;char op; printf("\nType in your expression:"); scanf("%f%c%f",&data1,&op,&data2); switch(op) { case '+': data3=data1+data2 ;break; case '-': data3=data1-data2;break; case '*': data3=data1*data2;break; case '/': if(data2==0) exit(1); data3=data1/data2;break; } printf("%6.2f%c%6.2f=%6.2f\n",data1,op,data2,data3); }