逻辑运算和判断选取控制.docx

上传人:b****3 文档编号:1935692 上传时间:2022-10-25 格式:DOCX 页数:17 大小:27.80KB
下载 相关 举报
逻辑运算和判断选取控制.docx_第1页
第1页 / 共17页
逻辑运算和判断选取控制.docx_第2页
第2页 / 共17页
逻辑运算和判断选取控制.docx_第3页
第3页 / 共17页
逻辑运算和判断选取控制.docx_第4页
第4页 / 共17页
逻辑运算和判断选取控制.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

逻辑运算和判断选取控制.docx

《逻辑运算和判断选取控制.docx》由会员分享,可在线阅读,更多相关《逻辑运算和判断选取控制.docx(17页珍藏版)》请在冰豆网上搜索。

逻辑运算和判断选取控制.docx

逻辑运算和判断选取控制

第四章逻辑运算和判断选取控制

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

关系运算是逻辑运算中比较简单的一种。

所谓“关系运算”实际上是“比较运算”将两个值进行比较,判断比较的结果是否符合给定的条件。

例如,a>3是一个关系表达式,大于号(>)是一个关系运算符,如果a的值为5,则

满足给定的a>3”条件,因此关系表达式的值为真”(即条件满足”);

如果a的值为2,不满足a>3”条件,则称关系表达式的值为假”

4.1.1关系运算符及其优先次序

C语言提供6种关系运算符:

(1)<

(小于)

(2)<=

(小于或等于)

(3)>

(大于)

(4)>=

(大于或等于)

(5)==

(等于)

(6)!

=

(不等于)

关于优先次序:

1.前4种关系运算符(<,<=,>,>=)的优先级别相同,后两种也相同。

前4种

高于后2种。

例如,优先于==”。

而、”与2”优先级相同。

2.关系运算符的优先级低于算术运算符。

3.关系运算符的优先级高于赋值运算符。

高T低

算术运算符关系运算符赋值运算符

例如:

c>a+b等效于c>(a+b)

a>b!

=c等效于(a>b)!

=c

a==b

4.1.2关系表达式

用关系运算符将两个表达式(可以是算术表达式或关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子,称关系表达式。

例如,下面都是合法的关系表达式:

a>b,a+b>b+c,(a=3)>(b=5),'a'v'b',(a>b)>(b

关系表达式的值是一个逻辑值,即真”或假”例如,关系表达式5=3”的值为假”5>=0”的值

为真”C语言没有逻辑型数据(Pascal语言以True表示真”,以False表示假”。

PASCA和FORTRAN等语言都有逻辑型变量和逻辑型常量),以1代表真”,以0”代表假”。

例如,若a=3,b=2,c=1,

则:

a>b的值为”真”,表达式的值为1。

(a>b)==c的值为真”(因为a>b的值为1,等于c的值),表达式的值为1。

b+c

如果有以下赋值表达式:

d=a>bd的值为1。

f=a>b>cf的值为0(因为>"运算符是自左至右的结合方向,先执行a>b",得值为1,再

执行关系运算:

“>c”得值0,赋给f

4.2逻辑运算符和逻辑表达式

用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式。

下面介绍C语言中的逻辑运算符和逻辑运算。

4.2.1逻辑运算符及其优先次序

C语言提供三种逻辑运算符:

1.

&&逻辑与(相当于其它语言中的AND)

2.

||逻辑或(相当于其它语言中的OR)

3.

逻辑非(相当于其它语言中的NOT)

&&

和||”是“双目(元)运算符”,它要求有两个运算量(操作数),

如(

a>b)&&

x>y)

(a>b)||(x>y)。

“!

”是“一目(元)运算符”,只要求有一

个运算量,

如!

(a>b)

逻辑运算举例如下:

a&&ba||b

!

a

若a,b为真,则a&&b为真。

若a,b之一为真,则a||b为真。

若a为真,则!

a为假。

 

下表为逻辑运算的

的值。

真值表”。

用它表示当a和b的值为不冋组合时,各种逻辑运算所得到

ab!

a!

ba&&ba||b

TTFFTT

TF

FT

FF在一个逻辑表达式中如果包含多个逻辑运算符,如

a&&b||x>y&&c

优先次序:

高t低

!

t算术运算符t关系运算符t&&t||t赋值运算符

a&&b||x>y&&c(a>b)&&(x>y)(a==b)||(x==y)(!

a)||(a>b)

((!

a)&&b)||((x>y)&&c)

可写成:

a>b&&x>y可写成:

a==b||x>y可写成:

a||a>b

4.2.2逻辑表达式

如前所述,逻辑表达式的值应该是一个逻辑量真”或’假”。

C语言编译系统在给出逻辑运算结

果时,以数值1代表“真”,以0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。

即将一个非零的数值认作为“真”。

例如:

1若a=4,则!

a的值为0。

因为a的值为非0,被认作真”,对它进行非”运算,得假”,假”以0代表。

2若a=4,b=5,则a&&t的值为1。

因为a和b均为非0,被认为是真”,因此a&&t的值也为真”,值为1。

3a、b值同前,a||b的值为1。

4a、b值同前,!

a||b的值为1。

54&&0||2的值为1。

通过这几个例子可以看出,由系统给出的逻辑运算结果不是0就是1,不可能是其它数值。

在逻辑表达式中作为参加逻辑运算的运算对象(操作数)可以是0(“假”)或任何非0的数值(按“真”对待)。

如果在一个表达式中不同位置上出现数值,应区分哪些是作为数值运算或关系运算的对象,

哪些作为逻辑运算的对象,

例如

5>3&&2||8V4-!

0

表达式自左至右扫描求解。

首先处理5>3”(因为关系运算符优先于&&)。

在关系运算符两侧的5

和3作为数值参加关系运算,”5>3”的值为:

1。

再进行”1&&2”的运算,此时1和2均是逻辑运算对象,均作“真”处理,因此结果为1。

再往下进行“1||8<4-!

0”的运算。

根据优先次序,先进行“!

0”运算得1,因此,要运算的表达式变成:

“1||8V4-1”,即“1||8<3”,关系运算符V”两侧的8和3

作为数值参加比较,‘8<3”的值为0(假”)。

最后得到“||0”的结果1。

实际上,逻辑运算符两侧的运算对象不但可以是0和1,或者是0和非0的整数,也可以是任何类型的数据。

可以是字符型、实型或指针型等。

系统最终以0和非0来判定它们属于“真”或“假”。

‘c'&&'d'

的值为1(因为’c'和’d'的Ascii值都不为0,按真”处理)。

在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。

例如:

1.a&&b&&c只有a为真(非0)时,才需要判别b的值,只有a和b都为真的情况下才需

要判别c的值。

只要a为假,就不必判别b和c,(此时整个表达式已确定为假)。

如果a为真,b为假,

不判别c。

2.a||b||c只要a为真(非0)就不必判别b和c

对&&运算符只有a工0,才继续进行右面的运算。

对||运算符来说,只有a=0才继续进行其右面的运算。

因此,如果有下面的逻辑表达式:

(m=a>b)&&(n=c>d)

当a=1,b=2,c=3,d=4,m和n的原值为1时,由于a>b的值为0,m=0而n=c>d不被执行,因此n的值不是0而仍保持原值1。

这点请读者注意。

熟练掌握C语言的关系运算符和逻辑运算符后,可以巧妙地用一个逻辑表达式来表示一个复

杂的条件。

例如,判别某一年year是否闰年。

闰年的条件是符合下面二者之一:

①能被4整除,但不能

被100整除。

②能被4整除,又能彼400整除。

可以用一个逻辑表达式来表示:

year%4==0&&year%100!

=0||year%400==0

当year为某一整数值时,上述表达式值为真

(1),则year为闰年;否则为非闰年。

可以加一个“!

”用来判别非闰年:

!

(year%4==0&&year%100!

=0||year%400==0)

若表达式值为真

(1),year为非闰年。

也可以用下面逻辑表达式判别非闰年:

(year%4!

=0)||(year%100==0||year%400!

=0)

表达式为真,year为非闰年。

请注意表达式中右面的括弧内的不同运算符(%,!

,&&、==)

的运算优先次序。

4.3if语句

if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。

4.3.1if语句的三种形式

C语言提供了三种形式的if语句:

1.if(表达式)语句

例如:

if(x>y)printf(”%d”,x)这种if语句的执行过程见图

2.if(表达式)语句1else语句2例如:

if(x>y)printf(”%d”,x);

elseprintf(”%d”,y);

见图

.if

(表达式1)

语句1

elseif

(表达式2)

语句2

elseif

(表达式3)

语句3

elseif

(表达式m)

语句m

else

语句n

流程图

例如。

if(number>500)cost

=0.15;

elseif

(number>300)

cost=0.

10:

elseif

(number>100)

cost=0

.075;

elseif

(number>50)

cost=

0.05;

else

cost

=

0;

说明:

三种形式的if语句中在if后面都有“表达式”,

一般为逻辑表达式或关系表达式。

例如,

if(a==b&&.x==y)printf(”a=b,x=y”);系统对表达式的值进行判断,若为0,按“假”处理,若为非0,按“真”处理,执行指定的语句。

假如有以下语句:

if(3)printf(“ok.”);是合法的,执行结果输岀”ok”。

因为表达式的值为3,按真”处理。

由此可见,表达式的类型不限于逻辑表达式,可以是任意的数值类型(包括整型、实型、字符型、指针型数据)。

例如,下面的语句也是合法的:

if('a')printf(”%d”,'a');

执行结果:

输岀a的Ascii码97。

2.第二、第三种形式的讨语句中,在每个else前面有一分号,整个语句结束处有一分号。

例如:

if(x>0)printf(“%f”,x);

elseprintf(“%f”,-x);

这是由于分号是C语句中不可缺少的部分,这个分号是让语句中的内卧语句所要求的。

如果无此分号,则岀现语法错误。

但应注意,不要误认为上面是两个语句(if语句

和else语句)。

它们都属于同一个if语句。

else子句不能作为语句单独使用,它必须是if语句的一部分,与if配对使用。

3•在if和else后面可以只含一个内嵌的操作语句(如上例),也可以有多个操作语句,此时用花括号“{}”将几个语句括起来成为一个复合语句。

如:

if(a+b>c&&b+c>a&&c+a>b)

{s=0.5*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("area=%6.2f”,area);}

elseprintf(”itisnotatrilateral”);

注意在{}外面不需要再加分号。

因为{}内是一个完整的复合语句,不需另附加分号。

例4

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1