1、例如, 优先于=”。而、”与2”优先级相同。2.关系运算符的优先级低于算术运算符。3. 关系运算符的优先级高于赋值运算符。 高 T 低算术运算符 关系运算符 赋值运算符例如: ca+b 等效于 c(a+b)ab!=c 等效于 (ab)!=ca=bc 等效于 a=( b b+ c,( a= 3) ( b=5) , a v b,( a b)( b=0”的值为 真” C语言没有逻辑型数据(Pascal语言以True表示 真”,以False表示 假”。PASCA和FORTRAN 等语言都有逻辑型变量和逻辑型常量) ,以1代表真”,以0”代表假”。例如,若a=3, b=2, c=1,则:b 的值为 ”真
2、”,表达式的值为 1。(ab) =c的值为 真”(因为ab的值为1,等于c的值),表达式的值为1。b + cb d 的值为 1。f = a bc f的值为0 (因为 运算符是自左至右的结合方向,先执行 a b,得值为1,再执行关系运算:“ c”得值0,赋给f42逻辑运算符和逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式。下面介绍C语言中的逻辑运算符和逻辑运算。4.2.1逻辑运算符及其优先次序C 语言提供三种逻辑运算符:1 & 逻辑与(相当于其它语言中的 AND)2 | 逻辑或(相当于其它语言中的 OR)3 ! 逻辑非(相当于其它语言中的 NOT)和 | ”是 “双目(元)运算
3、符 ”,它要求有两个运算量(操作数),如(b) &xy), (ab) | ( xy)。 “! ”是“一目(元)运算符 ”,只要求有一个运算量,如! b)逻辑运算举例如下:a&b a|b!a若a,b为真,则a&b为真。若a,b之一为真,则a|b为真。 若a为真,则!a为假。下表为逻辑运算的的值。真值表”。用它表示当a和b的值为不冋组合时,各种逻辑运算所得到a b !a !b a&T T F F T TT FF TF F 在一个逻辑表达式中如果包含多个逻辑运算符,如 a&b|xy&c优先次序: 高 t 低 t算术运算符t关系运算符t & t| t赋值运算符c (a b)&(xy) (a=b ) |
4、(x=y) (!a) |( a( (!a ) &b)|(xy)&可写成: ab&y 可写成: a=b|x ! a|a b4.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
5、、b值同前,a|b的值为1。4a、b值同前,! a|b的值为1。54&0|2的值为1。通过这几个例子可以看出,由系统给出的逻辑运算结果不是 0就是1,不可能是其它数值。而在逻辑表达式中作为参加逻辑运算的运算对象 (操作数)可以是 0(“假”)或任何非 0的数值(按“真” 对待)。如果在一个表达式中不同位置上出现数值, 应区分哪些是作为数值运算或关系运算的对象,哪些作为逻辑运算的对象,例如5 3&2|8 V 4-!表达式自左至右扫描求解。首先处理 53”(因为关系运算符优先于 &)。在关系运算符两侧的5和3作为数值参加关系运算, ” 53”的值为: 1。再进行 ”1&2”的运算,此时 1和2均是
6、逻辑运算对 象,均作 “真”处理,因此结果为 1。再往下进行 “1|84-!0 ”的运算。根据优先次序,先进行 “!0” 运算得1,因此,要运算的表达式变成: “1|8 V 4-1”,即“1|83 ”,关系运算符 V”两侧的8和3作为数值参加比较,8 (n=cd)当a=1, b=2,c=3,d=4,m和n的原值为1时,由于 a b的值为0,m=0而n=cd不被执行,因此n 的值不是 0而仍保持原值 1 。这点请读者注意。熟练掌握C语言的关系运算符和逻辑运算符后,可以巧妙地用一个逻辑表达式来表示 一个复杂的条件。例如,判别某一年year是否闰年。闰年的条件是符合下面二者之一:能被 4整除,但 不
7、能被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为非闰年。请注意表达式中右面的括弧内的不同运算符(%,!, &、
8、=)的运算优先次序。4 . 3 if语句if 语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操 作之一。4.3.1 if语句的三种形式C 语言提供了三种形式的 if 语句:1 if (表达式) 语句if (xy) printf (” d” ,x ) 这种 if 语句的执行过程见图2if (表达式) 语句 1 else 语句2 例如: if(xy) printf (”d”,x );else printf ( ” d”,y );见图. if(表达式 1)语句 1else if(表达式 2 )语句 2(表达式 3 )语句 3(表达式 m)语句 melse语句 n流程图
9、例如。if ( number500) cost= 0. 15;( number 300)cost=0 .10: 100)cost=0. 075; 50)cost =0.05;cost0;说明:三种形式的 if 语句中在 if 后面都有 “表达式 ”,一般为逻辑表达式或关系表达式。例如,if ( a=b&.x=y ) printf ( ”a=b,x=y ”);系统对表达式的值进行判断, 若为 0,按“假” 处理,若为非 0,按“真 ”处理,执行指定的语句。 假如有以下语句: if ( 3 )printf( “ok. ”); 是合法的,执行结果输岀 ”ok”。因为表达式的值为3,按 真”处理。由此
10、可见,表达式的 类型不限于逻辑表达式,可以是任意的数值类型(包括整型、实型、字符型、指针型数 据)。例如,下面的语句也是合法的:if ( a) printf ( ” d”, );执行结果:输岀a的Ascii码97。2第二、第三种形式的讨语句中,在每个 else 前面有一分号,整个语句结束处有一分 号。if ( x 0) printf( “%f”,x);else printf( “%f”,-x);这是由于分号是 C语句中不可缺少的部分,这个分号是让语句中的内卧语句所要求 的。如果无此分号,则岀现语法错误。但应注意,不要误认为上面是两个语句( if 语句和 else 语句)。它们都属于同一个 if 语句。 else 子句不能作为语句单独使用,它必须是 if 语句的一 部分,与 if 配对使用。3在if和else后面可以只含一个内嵌的操作语句(如上例),也可以有多个操作语 句,此时用花括号 “ ”将几个语句括起来成为一个复合语句。如:if (abc&bccab)s=0. 5*(a + b+c);area=sqrt (s*(s-a)*(s-b)*(s-c) );printf (area =% 6.2f ”,area ) ;else printf ( ”it is not a trilateral ”);注意在 外面不需要再加分号。 因为 内是一个完整的复合语句, 不需另附加分号。例4
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1