对于有些选择分支结构,可以使用简单的条件运算符来代替. 如:

if(a<b)
    min=a;
else
    min=b;

可以用下面的条件运算符来处理

min=(a<b)?a:b;

  其中"(a<b)?a:b"是一个"条件表达式",它是这样执行的:  如果a<b为真,则表达式取a值,否则取b值.

  条件运算符由两个符号组成"?"和":", 要求有3个操作对象,所以也叫它三目运算符,它是C语言中唯一的三目运算符.

    它的一般形式为:

        表达式1?表达式2:表达式3;

  以下是关于条件运算符的几点说明:

    (1) 通常情况下,表达式1是关系表达式或逻辑表达式,用于描述条件表达式中的条件,表达式2和表达式3可以是常量,变量或表达式.例如:

(x==y)?'Y':'N'
(d=b*b-4*a*c)>=0?sqrt(d):sqrt(-d)
ch=(ch>='A'&&ch<='Z')?(ch+32):ch

        以上均为合法的条件表达式.

    (2) 条件表达式的执行顺序为:先求解表达式1,若值为非0,表示条件为真,则求解表达式2,此时表达式2的值就作为整个条件表达式的值;

      若表达式1的值为0,表示条件为假,则求解表达式3,表达式3的值就是整个条件表达式的值.例如:

        (a>=0)?a:-a   执行结果是a的绝对值.

    (3) 在程序中,通过把条件表达式的值直接赋予某个变量.例如:

        min=(a<b)?a:b  执行结果就是将条件表达式的值赋予变量min,即将a和b二者中较小的数赋给min.

    (4) 条件表达式的优先级别仅高于赋值运算符,而低于前面遇到过的所有运算符.

        因此,min=(a<b)?a:b括号可以不要,可直接写成,min=a<b?a:b如果有x<y?x+1:y-1等效于x<y(x+1):(y-1)而不等效于(x<y?x+1:y)-1

    (5) 条件运算符的结合方向为"自右至左".

    (6) 条件表达式允许嵌套,即允许条件表达式中的表达式2和表达式3又是一个条件表达式.例如:

        x>0?1:x<0?-1:0

       上述条件表达式中,表达式3部分又是一个条件表达式.根据条件表达式的结合性,上述条件表达式等价于:

         x>0?1:(x<0?-1:0)

       其作用是判断x的符号情况.当x为正数时,该条件表达式的值为1;当x为负数时,该条件表达式的值为-1;当x为0时,该条件表达式的值为0.

    (7) 条件表达式不能取代一般的if语句,仅当if语句中内嵌的语句为赋值语句(且两个分支都给同一变量赋值)时才能代替if语句.例如:

        if(a%2==0)
            printf("even/n");
        else
            printf("odd/n");

      不能写成:

        (a%2==0)?printf("even/n"):printf("odd/n");

      但可以用下面语句代替:

        printf("%s/n",(a%2==0?"even":"odd");

      该语句的作用是:若 a 为偶数,输出 even;若 a 为奇数,输出odd.

     (8) 表达式1,表达式2,表达式3的类型可以不同.此时条件表达式的值的类型为它们中较高的类型.例如:

        main() {

          char c1, ch;

          ch = getchar();

          c1 = ch <= 'Z' && ch >= 'A' ? ' @ ' : ch ;

          putchar(c1);

        }

      该程序的作用是从键盘输入任意一个字符,判别它们是否大写字母,如果是,输出一个@;否则按原样输出 dot

      上例中,程序第6行是关键语句,该语句实现输入字符的判断,选择与更换工作.

      其执行过程为:先由此语句中的赋值号右侧的条件运算符对输入的字符进行判断和选择,若ch>='A'&&ch<='Z'成立,说明ch是大写英文字母,此时选@;否则仍选原字符ch,然后把选择的结果赋值给原变量ch 。

Java中的三目运算符 详解的更多相关文章

  1. java中的注解详解和自定义注解

    一.java中的注解详解 1.什么是注解 用一个词就可以描述注解,那就是元数据,即一种描述数据的数据.所以,可以说注解就是源代码的元数据.比如,下面这段代码: @Override public Str ...

  2. Java中dimension类详解

    Java中dimension类详解 https://blog.csdn.net/hrw1234567890/article/details/81217788

  3. [转载]java中import作用详解

    [转载]java中import作用详解 来源: https://blog.csdn.net/qq_25665807/article/details/74747868 这篇博客讲的真的很清楚,这个作者很 ...

  4. Java中日志组件详解

    avalon-logkit Java中日志组件详解 lanhy 发布于 2020-9-1 11:35 224浏览 0收藏 作为开发人员,我相信您对日志记录工具并不陌生. Java还具有功能强大且功能强 ...

  5. Java中反射机制详解

    序言 在学习java基础时,由于学的不扎实,讲的实用性不强,就觉得没用,很多重要的知识就那样一笔带过了,像这个马上要讲的反射机制一样,当时学的时候就忽略了,到后来学习的知识中,很多东西动不动就用反射, ...

  6. JAVA中Object类方法详解

    一.引言 Object是java所有类的基类,是整个类继承结构的顶端,也是最抽象的一个类.大家天天都在使用toString().equals().hashCode().waite().notify() ...

  7. Java中的多线程详解

    如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...

  8. js中的三目运算符详解

    判断 javascript中的三目运算符用作判断时,基本语法为: expression ? sentence1 : sentence2 当expression的值为真时执行sentence1,否则执行 ...

  9. Java中常见方法详解合集(方法的定义及语法结构)

    Java的方法定义 1.方法的定义 方法是控制对象的动作行为方式与准则,在Java中方法位于类体下又有另一种含义. 普通的方法在类中称为"实例方法",因为方法的调用需要创建对象,而 ...

随机推荐

  1. wamp的mysql密码修改

    ==方法1== 通过WAMP打开mysql控制台,提示输入密码,因为现在是空,所以直接按回车. 输入“use mysql”,意思是使用mysql这个数据库教程,提示“Database changed” ...

  2. Sublime Text 3 LESS、SASS、SCSS高亮插件、提示插件

    为sublime text 添加LESS语法高亮 功能:LESS高亮插件   下载   https://packagecontrol.io/packages/LESS 简介:用LESS的同学都知道,s ...

  3. 【javascript 变量和作用域】

    今天学习了javascript 的变量和作用域的基本知识,对于以前在开发中遇到的一些不懂的小问题也有了系统的认识,收获还是比较多的. [基本类型和引用类型] ECMAScript 变量可能包含两种不同 ...

  4. 定位 - MapKit-自定义大头针

    #import <Foundation/Foundation.h> #import <MapKit/MapKit.h> @interface PPAnnotation : NS ...

  5. 当今app行业 比较流行的 简称 汇总

    B=Business,即企业:C=Customers,即消费者,这样就好理解这些简称了:M=Medium,即媒介B2B:(Business To Business)商家对商家进行交易 如:阿里巴巴.生 ...

  6. SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-005-Bean的作用域@Scope、ProxyMode

    一. Spring的bean默认是单例的 But sometimes you may find yourself working with a mutable class that does main ...

  7. 【Xamarin挖墙脚系列:在VMware11中安装Mac10.11 EI Captain后的vmware tools】

    原文:[Xamarin挖墙脚系列:在VMware11中安装Mac10.11 EI Captain后的vmware tools] 如何安装 darwin.iso,百度去吧. 关键是对应版本的darwin ...

  8. JBossESB教程(一)——开发环境的搭建

    前言 上篇对SOA的概述里面,在说SOA构建需要考虑什么时,提到了ESB,它作为SOA的基础设施而存在. 从这篇开始,将对ESB的其中一个实现JBossESB进行一个从头开始的讲解,既然是从头开始,那 ...

  9. sql server 2005+ 行转列

    )) , 'aa') , 'bb') , 'aaa') , 'bbb') , 'ccc') go , , '') from tb group by id

  10. Android 在webView中创建web应用(译文)

    如果你想在客户端添加一个web应用程序或者仅仅一个web页面,你可以通过使用WebView,WebView是基于android中View的扩展,能够在Activity的layout中实现显示网页,它不 ...