首页 百科知识 c语言运算符与表达式编程

c语言运算符与表达式编程

时间:2024-10-16 百科知识 版权反馈
【摘要】:表达式1对整个表达式来说起条件判别作用,根据它的值是否为真来选择执行后两个表达式中的一个。实际上,是以该条件表达式的值作为实参。先计算i>k,由于i是20,k是30,所以i>k不成立,从而取表达式:“k++”的值作为条件表达式的值。因而条件判定为假,执行printf,因而,输出结果为:kk。第14行是调用printf函数的语句,分别打印出i、j、k的值。

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

C语言中提供的条件运算符?:是唯一的一个三目运算符,操作数有3个。一般构成形式为

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

由条件运算符和操作数组成的表达式简称为条件表达式,或三目表达式。

执行过程如图2.4.2所示。

img71

图2.4.2 条件表达式的执行过程

使用条件运算符时,要注意:

1)条件表达式值的计算过程是:先计算表达式1的值,若表达式1的值为真,则条件表达式的值取表达式2的值;否则,条件表达式的值取表达式3的值。表达式1对整个表达式来说起条件判别作用,根据它的值是否为真来选择执行后两个表达式中的一个。

例如,要求出x和y中较大的一个,可使用

  x>y?x:y

计算表达式x>y,如果x大于y,那么x的值作为整个条件表达式的值;否则,y的值作为整个条件表达式的值。

2)条件运算符优先级(稍)高于赋值运算符,比关系运算符和算术运算符的优先级低。

3)条件运算符的结合性是自右至左的。例如,若i=15,j=23,k=13,m=26,条件表达式:

  i>j?i:k>m?k:m

相当于

  i>j?i:(k>m?k:m)

条件表达式的值为26。

4)条件表达式中,表达式2和表达式3不仅可以是算术表达式,还可以是赋值表达式或函数表达式。例如:

  i>j?(i=189):(j=567)

5)条件表达式中,表达式1的类型可以与表达式2和表达式3的类型不同。例如:

  int x=150;

  x?'y':'u'

表达式2和表达式3的类型也可以不同,此时条件表达式的值的类型为二者较高的类型。

例如:

  i>j?72:52.56

如果i≤j,则条件表达式的值为52.56;如果i>j,条件表达式的值为72.0而不是72。因为52.56是浮点型,比整型高,因此将72转换成浮点型。但有的编译器不作这种转换,在Visual C++中仍为整型72。

例2-2 分析下面程序运行的结果。

img72

img73

程序运行分析:

第11行中,条件表达式

  i>j?i:j

作为printf函数的实参。实际上,是以该条件表达式的值作为实参。先计算这个条件表达式:由于i和j的值都是20,所以i>j不成立,从而取j的值即(20)作为整个条件表达式的值。这条语句执行后输出结果是(1)20。

第12行中,条件表达式

i>k?i--:k++的三个操作数依次是关系表达式、后缀减表达式和后缀加表达式。先计算i>k,由于i是20,k是30,所以i>k不成立,从而取表达式:“k++”的值作为条件表达式的值。从而,这个函数调用语句执行后的输出是:(2)30。但应注意,k的值要增1,变为31。

第13行中,先分析“?”之前的条件判定部分,即

  (i>=j>=k)

表达式中有两个>=,按照运算符的结合性,这个表达式等价于

  (i>=j)>=k

由于当前i和j的值都是20,所以,i>=j成立,其结果为1;而k当前的值是31,所以1>=31不成立。因而条件判定为假,执行printf("kk"),因而,输出结果为:kk。

第14行是调用printf函数的语句,分别打印出i、j、k的值。由于在第13行printf函数的格式控制字符串中没有\n,为了不使后面的输出与第13行的输出在同一行上,所以在第14行printf函数中,在 i=%d 之前加上 \n。

输出结果为

i=20, j=20, k=31

常见的编程错误2.4

●运算符==、!=、>=、<=的符号对中间有空格时,会产生语法错误。

●混淆相等运算符= =和赋值运算符=会产生逻辑错误。

良好的编程习惯2.4

●在每一个逗号(,)后加一个空格,可以增强程序的可读性。

●在定义语句和可执行语句之间放置一个空行。可以在程序中突出声明部分,使程序更加清晰。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈