表达式1? 表达式2: 表达式3
其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。 条件表达式通常用于赋值语句之中。
例如条件语句:
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可以去掉括号而写为 max=a>b?a:b
2. 条件运算符?和:是一对运算符,不能分开单独使用。
3. 条件运算符的结合方向是自右至左。
例如:
a>b?a:c>d?c:d应理解为
a>b?a:(c>d?c:d) 这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条
件表达式。
以下两个例题展示了,一般三目运算符的应用和嵌套三目运算符的应用。
1:个人所得税收取规定:工资大于1000元的部分将扣除5%的个人所得税。小于1000元的部分不扣除个人所得税。要求用户输入基本工资,计算税后工资。 (用三目运算符来做)
2: 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。(用三目运算符来做)
1:
#include <stdio.h>
int main(int argc,const char *argv[])
{
float m,a; //计算税后工资 一般的三目运算符
printf("请用户输入基本工资是:\n");
scanf("%f",&m);
a=m-(m-1000)*0.05;
m=(m>1000)?a:m;
printf("税后的工资是:%.2f\n",m);
return 0;
}
2:
#include <stdio.h>
int main(int argc,const char *argv[])
{
float grade; // 嵌套的三目运算 输出等级 ABC
char a;
printf("请输入同学的分数是:\n");
scanf("%f",&grade);
a=(grade>=90)? 'A':(grade>60? 'B':'C');//此时需要一个字符a用来接收
printf("该同学的成绩表示为:%c\n",a);
return 0;
}