三目運算符詳解


 三目運算符詳解

 

  對於有些選擇分支結構,可以使用簡單的條件運算符來代替. 如:

  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(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 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM