c語言?三目運算子用法問題,C語言? 三目運算子用法問題。

時間 2021-06-17 07:19:22

1樓:

不帶括號,實際上是這樣的效果(","優先順序略低,一般都是最後執行咯)。

temp<=n ? (temp *= 2,m++):(temp = (temp-n)*2-1),m++;

也就是說,不帶括號,你temp<=n成立時候,m++總是會執行兩次,當然對於temp>n是沒問題的。

帶括號,自己比較好理解。

然後,你如果想寫的高大上,簡單點又正確,可以只加後面一個括號。即下面的方式。

temp<=n ? temp *=2,m++:(temp=(temp-n)*2-1,m++)

個人是非常不建議這麼些,**給別人看挺麻煩。

2樓:匿名使用者

三目運算子為a?b:c即有三個參與運算的量。由條件運算子組成條件表示式的一般形式為:

表示式1? 表示式2: 表示式3

其求值規則為:如果表示式1的值為真,則以表示式2 的值作為條件表示式的值,否則以表示式2的值作為整個條件表示式的值。 條件表示式通常用於賦值語句之中。

例如條件語句:

if(a>b) max=a;

else max=b;

可用條件表示式寫為 max=(a>b)?a:b; 執行該語句的語義是:如a>b為真,則把a賦予max,否則把b 賦予max。

使用條件表示式時,還應注意以下幾點:

1. 條件運算子的運算優先順序低於關係運算子和算術運算子,但高於賦值符。因此 max=(a>b)?a:b可以去掉括號而寫為 max=a>b?a:b

2. 條件運算子?和:是一對運算子,不能分開單獨使用。

3. 條件運算子的結合方向是自右至左。

例如:a>b?a:c>d?c:d應理解為

a>b?a:(c>d?c:d) 這也就是條件表示式巢狀的情形,即其中的表示式3又是一個條

件表示式。

void main(){

int a,b,max;

printf("\n input two numbers: ");

scanf("%d%d",&a,&b);

printf("max=%d",a>b?a:b);

3樓:匿名使用者

三目運算: 條件?值1:值2,是根據條件的值分別值1或值2

對於本題就是依據你的取值,分別取(temp *= 2, m++) 和(temp = (temp - n)*2-1, m++)

若把?:中:前後的兩個()去掉,會出現錯誤!

4樓:匿名使用者

運算子是有運算順序的。

比如你上面括號裡面的*運算子優先順序高於=,++也高於三目運算子。推薦你看一下運算子優先順序。

就這個程式而言,主要問題是,逗號運算子優先順序比三目運算優先順序還低,去掉括號後,造成先做了三目運算,後做逗號運算。

希望這個回答對你有幫助。

5樓:8棒棒鼠

運算是分級別的,人看不懂,電腦也就會看錯

6樓:煙禎鄂雨

表示式1?表示式2

:表示式3

這個三目運算子的作用是:如果表示式1成立,則取表示式2的值,否則取表示式3的值

上面的式子等價於:

a=3,b=4;

(a>b)?(

(b>=2)?1:2):(

(a>b)?2:1

);由於a>b不成立,所以執行

(a>b)?2:1;

由於a>b不成立,所以取1

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

7樓:

這裡涉及了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語言這個角度是無法判別的,這是個實現問題,如果要想寫出健壯的可移植的**就應該避免這種表述。

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

8樓:匿名使用者

右結合性是運算子的一種性質。對於某一箇中綴運算子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語言的條件運算子具有右結合性

9樓:匿名使用者

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

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

c語言 三目運算子

10樓:匿名使用者

不帶括號,實際上是這樣的效果(","優先順序略低,一般都是最後執行咯)。 temp<=n ? (temp *= 2,m++):

(temp = (temp-n)*2-1),m++; 也就是說,不帶括號,你tempn是沒問題的。帶括號,自己比較好理解。然後,你如果想寫的高大上,簡單點又正確,可以只加後面一個括號。

即下面的方式。 temp<=n ? temp *=2,m++:

(temp=(temp-n)*2-1,m++) 個人是非常不建議這麼些,**給別人看挺麻煩。

11樓:

)前面的逗號先去掉

最後面)後的分號也去掉

c語言三目運算子問題。

12樓:陌上

如果y值為0則輸出的是後面的「no」然後回車,如果不為0則直接輸出回車。判斷語句中0為假。不為0為真。

C語言中三目運算子是什麼,C語言 三目運算子

墨汁諾 選擇運算,就是a b?c那個。三目運算子為a?b c即有三個參與運算的量。由條件運算子組成條件表示式的一般形式為 其求值規則為 如果表示式1的值為真,則以表示式2的值作為條件表示式的值,否則以表示式2的值作為整個條件表示式的值。條件表示式通常用於賦值語句之中。 尋涵衍歷氣 就是 和 這2個符...

c語言邏輯運算子問題,c語言邏輯運算子 我不明白 和 到底是怎麼運算的

x y z 優先順序,所以上式等價於 x y z 這裡 x和 y z 是同級別的,表示式從左往右掃描,x成立,後面就直接跳過,輸出100 x y z 同理,優先順序 x y z x值是0,跳過 y 但是這隻能說明 的左邊是0,右邊還是要計算的,z執行了,所以最後輸出0,1,0 說明白點,這裡的優先順...

c語言運算子

夜 晨 a 按位或 00000101 00000010 00000111 結果7b 邏輯或 只要有一個為真,總的值就為真,只有當所有的都為假時,總的式子才為假。兩邊都為真 結果 真 非零數 c 按位與 00000101 00000010 00000000 結果 0 d 邏輯與 只要有一個為假,總的表...