c語言條件運算子請給我舉個用了多個條件運算子的例子,並解釋

2021-04-11 15:44:08 字數 4104 閱讀 4104

1樓:匿名使用者

int a = 3, b = 4, c = 5, x;

x=a>b?(a>c?a:c):(b>c?b:c);

這個是求三個數的最大值的**,可以看到其過版程類權似int a = 3, b = 4, c = 5, x;

if(a>b)

else

c語言中條件運算子的結合性

2樓:匿名使用者

c語言中,逗號運算子和條件運算子還有單目運算子是有結合性的,逗號運算子左結合性條件運算子右結合性單目運算子:++、--、+(正)-(負)、*、&、!右結合性

c語言中 怎樣理解三目運算子(條件運算子)的右結合性??

3樓:

這裡涉及了c中的優先順序、結合性、求值順序。

結合性只有在相同優先順序的運算子間才起作用,比如a+b*c,+與*優先順序不同,這裡根本不用去管結合性。而a+b+c則需要進行結合性考慮了,如果+為左結合性,那麼應該理解為:(a+b)+c,如果+為右結合性,那麼應該理解為a+(b+c),當然了,我們已經知道+為左結合性了。

對於?:,在c中與它優先順序相同的只有它自己,因此只有連續的?:才會體現出它的右結合性,即a?

b:c?d:

e中,根據右結合性可知應理解為a?b:(c?

d:e)。顯然,上述問題中是體現不出這種結合性來的。

再者,還有乙個求值順序的問題,a?b:c中,c語言規定先對a求值,非零則對b求值並作為該表示式的值,為零則對c求值並作為表示式的值,並且b和c中有且僅有乙個會被求值。

對於題目中的就應該是:先進行(--a == b++)的求值,根據是否為零,會對(a++)或(b++)進行求值。說白了,也就是只有兩種可能性:

可能性1:先算(--a == b++),再算(a++);可能性2:先算(--a == b++),再算(b++)。

至於(--a == b++)中到底是先算--a 還是b++則僅從c語言這個角度是無法判別的,這是個實現問題,如果要想寫出健壯的可移植的**就應該避免這種表述。

總結一下,就是先看優先順序,次看結合性,有的求值有序,有的則無序。

4樓:匿名使用者

右結合性是運算子的一種性質。對於某乙個中綴運算子op,如果 a op b op c 等價於 a op ( b op c) 就可以說運算子具有右結合性。

對於c語言的條件運算子 a?b:c 而言,判斷優先順序和結合性的時候,中間的表示式 b 不納入判斷。

c語言的條件運算子具有這樣的性質: a ? b :

c ? d : e 等價於 a ?

b : (c ? d :

e),因此一些人說c語言的條件運算子具有右結合性

5樓:匿名使用者

實際上,一條語句中出現多次同乙個變數的自增或自減是不合規範的,因為這種寫法出現的結果是不確定的,根據編譯器而定。a++表示語句執行後a = a + 1,到底有多後?有2個a++怎麼辦?

這都是編譯器內部機制的問題。真正好的程式設計師是避免這種情況的。

c語言中條件運算子的結合性?

6樓:匿名使用者

grade=score>=90?'a':score<=70?'c':'b';

相當於:

if(score>=90)

grade='a';

else

if(score<=70)

grade='c';

else

grade='b';

a?b:c中間的?:是乙個三目運算子,而不是2個單目運算子

關於c語言條件運算子的結合順序?!!!

7樓:匿名使用者

樓主注意,結合順序不等於求值順序。條件表示式的求值順序是這樣規定的:

test ? exp1 : exp2;

條件測試部分test非零版,表示式權exp1被求值,否則表示式exp2被求值,並且保證exp1和exp2兩者之中只有乙個被求值。該運算子是右結合的值是要告訴你:後面不管跟了多大多長的表示式只要它是合法的那就整個被看作exp2。

所以a>b?a:c>d?c:d 當然相當於a > b ? a : (c>d?c:d)

別說你後面只是乙個(c>d?c:d),就算你後面是優先順序比條件運算子還高的操作符組成的表示式,它也得按照條件運算子的求值規則求值。

比如說a > b ? (x = 200) : (x+y);

加號的優先順序比條件運算子高好幾個等級,答案還不是照樣是200。這樣,我看int a = x>y?(x = 200):(y = 350); 就不要我再作解釋了吧!

8樓:匿名使用者

200結合順序是怎樣和哪個先執行是兩回事。

這裡很明顯是先比較x>y,然後選擇了執行a=x=200。

y=350沒有做,所以y最後還是50

環境:vc++6.0,devcpp4.9.9.0

9樓:匿名使用者

max = num1>num2?num1:num2是乙個三元運算子,?前的為真,則執行:前的

?前的為假,則執行:後的

因此,答案為200.

10樓:匿名使用者

200x>y是真那麼執行x=200,最後賦值給a的也就是200

這還用除錯?跟你說的結合有關係麼?

c語言中 怎樣理解三目運算子(條件運算子)的右結合性?

11樓:

這裡涉及了c中的優先順序、結合性、求值順序。

結合性只有在相同優先順序的運算子間才起作用,比如a+b*c,+與*優先順序不同,這裡根本不用去管結合性。而a+b+c則需要進行結合性考慮了,如果+為左結合性,那麼應該理解為:(a+b)+c,如果+為右結合性,那麼應該理解為a+(b+c),當然了,我們已經知道+為左結合性了。

對於?:,在c中與它優先順序相同的只有它自己,因此只有連續的?:才會體現出它的右結合性,即a?

b:c?d:

e中,根據右結合性可知應理解為a?b:(c?

d:e)。顯然,上述問題中是體現不出這種結合性來的。

再者,還有乙個求值順序的問題,a?b:c中,c語言規定先對a求值,非零則對b求值並作為該表示式的值,為零則對c求值並作為表示式的值,並且b和c中有且僅有乙個會被求值。

對於題目中的就應該是:先進行(--a == b++)的求值,根據是否為零,會對(a++)或(b++)進行求值。說白了,也就是只有兩種可能性:

可能性1:先算(--a == b++),再算(a++);可能性2:先算(--a == b++),再算(b++)。

至於(--a == b++)中到底是先算--a 還是b++則僅從c語言這個角度是無法判別的,這是個實現問題,如果要想寫出健壯的可移植的**就應該避免這種表述。

總結一下,就是先看優先順序,次看結合性,有的求值有序,有的則無序。

12樓:年定籍菱

右結合性是運算子的一種性質。對於某乙個中綴運算子op,如果aopbop

c等價於aop

(bopc)

就可以說運算子具有右結合性。

對於c語言的條件運算子

a?b:c

而言,判斷優先順序和結合性的時候,中間的表示式b不納入判斷。c語言的條件運算子具有這樣的性質:a?

b:c?

d:e等價於a?

b:(c?

d:e),因此一些人說c語言的條件運算子具有右結合性

13樓:載瑰瑋愈閒

c語言中右結合的運算子有:

c語言中怎樣理解三目運算子(條件運算子)的右結合性

14樓:匿名使用者

右結合性是運算子的一種性質。對於某乙個中綴運算子op,如果 a op b op c 等價於 a op ( b op c) 就可以說運算子具有右結合性。

對於c語言的條件運算子 a?b:c 而言,判斷優先順序和結合性的時候,中間的表示式 b 不納入判斷。

c語言的條件運算子具有這樣的性質: a ? b :

c ? d : e 等價於 a ?

b : (c ? d :

e),因此一些人說c語言的條件運算子具有右結合性

C語言運算子都有那些,c語言中有哪些運算子,各有什麼功能?

運算子的種類c語言的運算子可分為以下幾類 1.算術運算子 用於各類數內值運算。包括加 減 乘容 除 求餘 或稱模運算,自增 自減 共七種。2.關係運算子 用於比較運算。包括大於 小於 等於 大於等於 小於等於 和不等於 六種。3.邏輯運算子 用於邏輯運算。包括與 或 非 三種。4.位操作運算子 參與...

C語言中算數運算子,關係運算子,邏輯運算子的優先級別

1級優先順序 左結合 圓括號 下標運算子 指向結構體成員運算子 運算高於關係高於邏輯高於付值 去看一下教材,譚浩強 第三版 c語言的運算子的優先順序 邏輯運算子 條件運算子 賦值運算子 關係運算子 算術運算子。它們之間的優先順序 1 最高端 出現同級別運算子時的結合方向是從左往右 下面級別沒寫結合順...

c語言邏輯運算子 關係運算子 算術運算子的優先順序是怎麼樣的

邏輯運算子裡的非運算 算術運算子 關係運算子 邏輯運算子裡的與運算 邏輯運算子裡的或運算 優先順序 算數運算 關係運算 邏輯運算。按等級高到低排列 1 非運算。2 算數運算子,例如a b,進行運算。版 3 關係運算子,例如a b,進行比 權較。4 和 也就是與運算和或運算。5 賦值運算子,例如a b...