正文

[022] 条件运算符2006-02-19 14:18:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wentao/10254.html

分享到:

条件运算符要求有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;}  

阅读(6315) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册