3.2 条件表达式的使用
在讲解条件表达式之前,先简要讲解一下条件运算符。条件运算符有两种:“?”和“:”。条件表达式的格式为:
表达式1?表达式2:表达式3
条件表达式的含义为,如果表达式1为真,那么条件表达式的值取表达式2的值,否则条件表达式的值取表达式3的值。图3-5中的流程图说明了条件表达式的功能。
图 3-5 条件表达式流程图
在第2章讲解宏定义的时候就使用过条件表达式,还对条件表达式在使用过程中的注意事项做了讲解。下面通过具体的代码来了解条件表达式的使用。
include<stdio.h>
int main(void)
{
int a,b;
int max1,max2;
a=2;
b=8;
if(a>b)
max1=a;
else
max1=b;
max2=a>b?a:b;
printf("使用if语句求出的a、b中的最大值为:%d\n",max1);
printf("使用条件表达式求出的a、b中的最大值为:%d\n",max2);
return 0;
}
运行结果:
使用if语句求出的a、b中的最大值为:8
使用条件表达式求出的a、b中的最大值为:8
看看上面的运行结果,使用if语句求出的a、b中的最大值和使用条件表达式求出的a、b中的最大值完全一样,这就说明可以用条件表达式来替换if语句。这点从条件表达式的流程图中也可以看出,但是使用if语句时可以嵌套,条件表达式是否可以嵌套呢?答案是肯定的。下面来看看使用条件表达式语句嵌套的一般格式。
表达式1?表达式2:(表达式3?表达式4:(表达式5?表达式6:(……)))
嵌套条件表达式的流程图如图3-6所示。
图 3-6 嵌套条件表达式流程图
看下面的代码,其功能为取a、b、c三个数的最大值。
include<stdio.h>
int main(void)
{
int a,b,c;
int max1,max2;
a=2;
b=8;
c=12;
if(a>b)
if(a>c)
max1=a;
else
max1=c;
else
if(b>c)
max1=b;
else
max1=c;
max2=a>b?(a>c?a:c):(b>c?b:c);
printf("使用if语句求出的a、b、c中的最大值为:%d\n",max1);
printf("使用条件表达式求出的a、b、c中的最大值为:%d\n",max2);
return 0;
}
运行结果:
使用if语句求出的a、b、c中的最大值为:12
使用条件表达式求出的a、b、c中的最大值为:12
从上面的代码中可以发现,实现同样的功能所使用的条件表达式要比if语句要短小很多,但是使用条件表达式也存在另外一个问题,那就是代码的可读性变差,所以在编程中要根据实际情况选择是否使用条件表达式,不要一味追求简短,使得代码的可读性很差。
在使用条件表达式的时候还要注意,不要对其中的变量随便使用自加和自减运算符,如:
include<stdio.h>
int main(void)
{
int a,b,max;
a=7;
b=5;
max=a++>b?a:b;
printf("使用if语句求出的a、b中的最大值为:%d\n",max);
return 0;
}
运行结果:
使用if语句求出的a、b中的最大值为:8
发现运行结果较初始时a和b的比值发生了变化,所以在使用条件表达式的时候要尤其注意不要对变量使用自加和自减运算符,本书在讲解宏定义的时候也特地对其进行了深入的分析,如果读者对使用条件表达式的注意事项还是不够清楚,可以返回第2章关于宏定义注意事项的知识点,在此就不再过多讲解了。