C程序设计语言
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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

条件运算符“? :”要求有3个运算对象,称为三目运算符,用于构造条件运算表达式,其一般形式为:

            表达式e1?表达式e2:表达式e3

其中,表达式e1是一个关系表达式或逻辑表达式,结果是逻辑值“真”或“假”。表达式e2、e3可以是任意表达式。

条件运算表达式的执行过程是:先求解表达式e1;若e1为真(非0),则计算表达式e2,并将e2的结果作为整个条件表达式的结果;若e1为假(0),则计算表达式e3,并将e3的结果作为整个条件表达式的结果。

例如,假设x已声明为整型变量,并初始化为1,则表达式:

            x>0?10:-10

的结果为10。如果x初始化为-1,则结果是-10。

可以把条件运算理解为对if-else语句的简化,例如,语句:

            y=(a>b)?a:b;

与下面的if语句等价:

            if(a>b)y=a;
            else y=b;

关于条件运算表达式,需要注意:

① 表达式e1、e2、e3的类型可以不同。如果e2和e3的类型不同,则整个表达式的结果的类型为二者中级别较高的类型。

例如,表达式:

            a>b?10.0:-10

的类型是实型。也就是说,如果a>b成立,则整个表达式的值是10.0;如果a>b不成立,则整个表达式的值是实数-10.0,而不是整数-10。

② 条件运算符的优先级高于赋值运算符而低于算术运算符和关系运算符。

例如,表达式:

            x=(a<b)?b:(a+1)

可以写成

            x=a<b?b:a+1

③ 条件运算符具有右结合性,例如,下面的两个表达式是等价的:

            a>b?c:d>e?f:g   等价于  a>b?c:(d>e?f:g)

如果a=1、b=2、c=3、d=4、e=5、f=6、g=7,则整个表达式的值为7。

【例4.8】 从键盘上输入任意一个字符,如果它是大写字母,则把它转换成小写字母输出,否则不做转化,直接输出。

分析:输入的字符只要在'A'和'Z'之间,就是大写字母,再加上32即可转换成小写字母。

程序如下:

            1   #include<stdio.h>
            2   void main()
            3   {   char ch;
            4       printf("Input a character:");
            5       scanf("%c",&ch);
            6       ch=(ch>='A' && ch<='Z')?(ch+32):ch;
            7       printf("=>%c\n",ch);
            8   }