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

在条件语句中,如果只执行单个赋值语句,则可以使用条件表达式来实现。这样不但可使程序简洁,而且还提高了运行效率。条件运算符是问号“?”和冒号“:”,它是一个三目运算符,参与运算的量有3个。

使用条件运算符的格式如下所示。

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

上述格式的含义是:如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式3的值作为条件表达式的值。条件表达式通常用于赋值语句之中。上述过程表示如图7-12所示。

图7-12 条件运算符和表达式

下面的条件语句。

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

就可以用如下条件表达式来代替。

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

该语句的语义是:如a>b为真,则把a赋值为max,否则把b赋值为max。

在使用条件表达式时应注意以下几点。

(1)条件运算符的优先级低于关系运算符和算术运算符,但高于赋值符。例如下面的代码:

    max=(a>b)? a:b

上述代码将先执行右边的条件表达式,然后再将其值赋值给左边的c。所以可以去掉上述代码中的括号,而写为如下所示的格式。

    max=a>b? a:b

(2)条件运算符“? ”和“:”是一对运算符,是固定组合,不能分开单独使用。

(3)条件运算符的结合方向为从右向左。下面的表达式

    a>b? a:c>d? c:d

可以理解为如下格式:

    a>b? a:(c>d? c:d)

(4)在条件表达式中,表达式1的类型可以和表达式2、表达式3的类型不同。例如下面的语句。

    x>? 'a': 'b';

上述代码中x是整型变量,如果x=0,则条件表达式的值为字符b,否则为字符a。表达式2和表达式3的类型也可以不同,此时表达式的值类型为二者中较高的类型。例如:

    a>b?9:7.5

如果a>b的值为假,则条件表达式的值为7.5;如果a>b的值为真,则条件表达式的值为9。但是因为7.5是实型,比整型高,所以可以将9转换成9.0(实型)作为该条件表达式的值。

实例7-5

提示用户输入两个数字,然后输出二者中大的数字

源码路径daima\7\7-5

本实例的实现文件为“compare.c”,具体实现代码如下。

    int main(void){
        int a, b, max;                //声明3个变量
        printf("\n enter 2 member:");
        scanf("%d, %d", &a, &b);     //输入两个数据
        printf("max=%d", a>b? a:b); //输出两个数中的大数
    }

拓展范例及视频二维码

范例7-5-01:使用条件运算符

源码路径:演练范例\7-5-01\

范例7-5-02:判断是否为闰年

源码路径:演练范例\7-5-02\

程序运行后将在界面中提示用户输入两个数字,输入两个数字并按Enter键后将在界面中输出输入数字中较大的数字,如图7-13所示。

图7-13 执行效果