热心网友

计算机具有逻辑判断能力,其判断的依据是计算机内部进行逻辑运算的结果。C语言提供了关系运算和逻辑运算,用来构造C程序控制中的条件,实现程序的选择结构和循环结构控制。  关系运算和逻辑运算的结果都是逻辑值,即"真"和"假"。由于C语言中没有逻辑型数据,因此C语言规定用整型数据来表示逻辑值。即:用整数值1表示逻辑"真",用整数值0表示逻辑"假"。在C语言中,将非0就视为"真"。3。4。1 关系运算符与关系表达式  1。 关系运算符  关系运算实际上是逻辑比较运算,它是逻辑运算中的一种。关系运算符的作用是确定两个数据之间是否存在某种关系。C语言规定的6种关系运算符及其有关的说明见表3-6。  表3-6 算术运算符  运算符 含义 运算对象个数 结合方向 简例   大于 双目运算符 自左至右 ab,38    = 大于等于 双目运算符 自左至右 a=b,3=2  3*c 两个算术表达式的值作比较  (a=b)c) 两个关系表达式的值作比较  'A'!='a' 两个字符表达式的值作比较  关系式只有两种可能的结果:或者它所描述的关系成立,或者这个关系不成立,所以说一个关系表达式描述的是一种逻辑判断。若关系成立,说明关系式表述的关系是"真"的,称逻辑值为"真",用1表示;若关系不成立,说明关系式表述的关系是"假"的,称逻辑值为"假",用0表示。所以关系表达式的运算结果一定是逻辑值。  进行关系运算时,先计算表达式的值,然后再进行关系比较运算。例如:  a=2,b=3,c=4,则上述关系表达式的值为:  a+b3*c (512)关系不成立 表达式结果值为0(假)  (a+=b)c) (1==0)关系不成立 表达式结果值为0(假)  'A'!='a' (65!=97)关系成立 表达式结果值为1(真)  以关系表达式"a+b3*c"为例,因为算术运算的优先级高于关系运算,所以先计算a+b和3*c的值,结果分别为5和12,再将5和12进行关系比较,其运算结果为0。  在表达式中连续使用关系运算符时,要注意正确表达含义,注意运算优先级和结合性。  例如,变量x的取值范围为"0≤x≤20"时,不能写成"08&&a==b  || 逻辑或 双目运算符 自左向右 a||b,3b) && (xy) 的值为1。  ② ab && xy 的值为1。  注意:①②两式是等价的,因为"&&"运算优先级低于关系运算,故括号可以省略。  ③ (y||b) && (y||a) 的值为1。  ④ y||b && y||a 的值为1。  注意:③④两式结果虽然一样,但两式的含义不同。③式中由于括号的优先级高于"&&",因此,先计算"y||b"和"y||a"后,再将两个结果进行"&&"运算。而④式由于"&&"的优先级高于"||",故要先计算"b&&y",其结果为0,再计算"y||0",其值也为0,最后计算"0||a",结果为1。由此可见,运算符的优先级制约着表达式的计算次序。  ⑤ !a || ab 的值为1。  此式中"!"的优先级高于">",而 ">"的优先级高于"||",故先计算"!a",其值为0,再计算"ab",其值为1,最后计算"0||1",值为1。3。4。3 条件运算符与条件表达式  条件运算符是C语言中唯一具的三目运算符,就是说它有三个运算对象。条件运算符的形式是"? :"由它构成的表达式称为条件表达式。其形式为:  表达式1 ? 表达式2 : 表达式3   条件运算符的"?"个":"总是成对出现的。条件表达式的运算功能是:先计算表达式1的值,若值为非0,则计算表达式2的值,并将表达式2的值作为整个条件表达式的结果;若表达式1的值为0,则计算表达式3的值,并将表达式2的值作为整个条件表达式的结果。例如有以下条件表达式:  (ab)?a+b:a-b  当a=8,b=4,c=3时,求解条件表达式的过程如下:  先计算关系式ab,结果为1,因其值为真,则计算a+b的结果为12,这个12就是整个条件表达式的结果。请特别注意,此时不再计算表达式a-b了。如果关系式ab的结果为0,就不再计算表达式a+b了。这一点在应用中很重要。  条件表达式的优先级高于赋值运算,但低于所有关系运算、逻辑运算和算术运算。其结合性是自右向左结合,当多个条件表达式嵌套使用时,每个后续的":"总与前面最近的、没有配对的"?"相联系。例如在条件表达式"a0 ? a/b:a0 ? a/b:"组合。  使用条件表达式可以使程序简洁明了。例如,赋值语句"z=(ab)?a:b "中使用了条件表达式,很简洁地表示了判断变量a与b的最大值并赋给变量z的功能。所以,使用条件表达式可以简化程序  例3-8:定义高等数学中常用的符号函数sign的数学定义如下。。  对应的C函数定义如下:  /* L3_8。C */  double sign(double x)  { return x0 ? 1:(x==0 ? 0:-1);  }。