可用条件表达式写为
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 又是一个条件表达式。
【例 5.8】
用条件表达式对上例重新编程,输出两个数中的大数。
5.4 switch 语句
C语言还提供了另一种用于多分支选择的 switch 语句, 其一般形式为:
其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有 case 后的语句。如表达式的值与所有 case 后的常量表达式均不相同时,则执行 default 后的语句。
switch(表达式){
case 常量表达式 1: 语句 1;
case 常量表达式 2: 语句 2;
…
case 常量表达式 n:
default
}
:
语句 n;
语句 n 1;
【例 4.9】
本程序是要求输入一个数字,输出一个英文单词。但是当输入 3 之后,却执行了 case3 以及以后的所有语句,输出了 Wednesday 及以后的所有单词。这当然是不希望的。为什么会出现这种情况呢?这恰恰反应了 switch 语句的一个特点。在 switch 语句中,"case 常量表达式"只相当于一个语句标号, 表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个 switch 语句,所以出现了继续执行所有后面 case 语句的情况。 这是与前面介绍的 if 语句完全不同的,应特别注意。为了避免上述情况,C语言还提供了一种 break 语句,专用于跳出 switch 语句,break 语句只有关键字 break,没有参数。在后面还将详细介绍。修改例题的程序,在每一 case 语句之后增加 break 语句, 使每一次执行之后均可跳出 switch 语句,从而避免输出不应有的结果。
【例 4.10】
在使用 switch 语句时还应注意以下几点:
1) 在 case 后的各常量表达式的值不能相同,否则会出现错误。
2) 在 case 后,允许有多个语句,可以不用{}括起来。
3) 各 case 和 default 子句的先后顺序可以变动,而不会影响程序执行结果。
4) default 子句可以省略不用。
5.5 程序举例【例 4.11】输入三个整数,输出最大数和最小数。