条件运算符要求有3个操作对象,称三目(元)运算符,它是c语言中唯一的一个三目运算符。条件表达式的一般形式为: 表达式1?表达式2∶表达式3(1) 条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。 max = (a>b) ? a : b执行结果就是将条件表达式的值赋给max。也就是将a和b二者中大者赋给max。(2) 条件运算符优先于赋值运算符,因此上面赋值表达式的求解过程是先求解条件表达式,再将它的值赋给max。条件运算符的优先级别比关系运算符和算术运算符都低。因此 max = (a > b) ? a : b括号可以不要,可写成 max = a > b ? a : b如果有 a > b ? a : b+1相当于a > b ? a : (b+1), 而不相当于(a>b ? a : b)+1。(3) 条件运算符的结合方向为“自右至左”。如果有以下条件表达式:a > b ? a : c > d ? c : d相当于a > b ? a : (c > d ? c : d)如果a=1,b=2,c=3,d=4,则条件表达式的值等于4。(4) 条件表达式还可以写成以下形式: a>b? (a=100) : (b=100)或 a>b? printf("%d",a) : printf("%d",b);即“表达式2”和“表达式3”不仅可以是数值表达式,还可以是赋值表达式或函数表达式。上面第二个条件表达式相当于以下if-else语句: if(a>b) printf("%d", a); else printf("%d", b);(5) 条件表达式中,表达式1的类型可以与表达式2和表达式3的类型不同。如x? 'a': 'b'x是整型变量,若x=0,则条件表达式的值为'b'。表达式2和表达式3的类型也可以不同,此时条件表达式的值的类型为二者中较高的类型。如 x>y? 1 : 1.5如果x≤y,则条件表达式的值为1.5,若x>y,值应为1,由于1.5是实型,比整型高,因此,将1转换成实型值1.0。(6) 条件表达式不能取代一般的if语句,只有在if语句中内嵌的语句为赋值语句(且两个分支都绐同一个变量赋值)时才能代替if语句。如以下if语句就无法用一个条件表达式代替. if (a>b) printf("%d",a); else printf("%d",b); 但可以用下面的语句代替: printf ("%d", a>b? a : b ); 即将条件表达式的值输出。 ★ 这个方法有点意思,以前没见过,收藏着。该站第一界编程比赛中有个叫"knocker"的"家伙"编的程序短小精悍,其中就有这么个东东http://www.programfan.com/club/showbbs.asp?id=112966--------------------------------------试验小程序:<1>#include int main(){ int a, b; scanf("%d %d", &a, &b); printf("%d\n", a>b? (a=100) : (b=100) ); // a>b由输入的a,b值判断, 与后面赋值无关 return 0;}<2>#include int main(){ int a, b; scanf("%d %d", &a, &b); a>b? printf("%d\n",a):printf("%d\n",b); //总是输出两个数中最大者,呵呵 return 0;}<3>#include int main(){ int a, b; scanf("%d %d", &a, &b); printf("%d\n", a > b ? a : b); //<2>的改进,看上去简洁点 ^_^ return 0;}<4> 大写转小写#include int main(){ char ch; ch = getchar(); ch = (ch >= 'A' && ch <= 'Z' ? ch+32 : '*' ); //这个方法不错 if (ch != '*') putchar(ch), putchar('\n'); return 0;}★ 大写字母的ASCII码小, 小写字母的ASCII码大, 相差32 , 如果"不慎"忘了这个差是32, 还可以用 'a'-'A' 来代替,即#include int main(){ char ch; ch = getchar(); ch = (ch >= 'A' && ch <= 'Z' ? ch+('a'-'A') : '*' ); if (ch != '*') putchar(ch), putchar('\n'); return 0;}

评论