c語言三目運算子怎麼用,C語言三目運算子怎麼用

2021-03-29 13:01:32 字數 3769 閱讀 9393

1樓:天雲一號

c語言中只有一個三目運算子,就是條件運算子(? :)條件運算子的一般使用格式如下:

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

舉例如下:

max = (a>b) ? a : b; // 取變數a, b中較大的一個,並賦值給變數max

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樓:匿名使用者

三目運算子是?:結構的運算

所謂三目就是需要三個變數對能進行運算的操作舉個簡單的例子:

a=2>1?3:4

可分成幾個部分,用括號分開:

(a=)(2>1)?(3):(4)

最左邊是賦值操作

第二個部分是一個判斷

第三和第四部分是兩個常數

首先判斷第三部分是否成立,成立即選擇第三部分,否則選擇第四部分像上面那個2>1成立,所以就執行了a=3

這種運算還可以巢狀

比如判斷year是不是閏年,是則返回1,不是返回0year=(year%100==0)?(year%400==0?1:0):(year%4==0?1:0)

4樓:

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

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++)

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

5樓:匿名使用者

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

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

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

6樓:匿名使用者

運算子是有運算順序的。

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

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

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

7樓:匿名使用者

條件操作符是一個三目操作符

條件表示式?表示式1:表示式2

先計算條件表示式,若為真,對表示式1求值,求值的結果為整個條件操作符表示式的值;

若為假,對表示式2求值,求值的結果為整個條件操作符表示式的值。

如:s = ( x < 0 ) ? -1 : x * x;

表示當x<0時返回-1;當x>=0是返回x平方。

8樓:匿名使用者

a>b:a?b

如果a大於b返回a 如果相反則返回b

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

9樓:

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

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

10樓:匿名使用者

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

11樓:匿名使用者

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

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

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

12樓:匿名使用者

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

a a a a 分步 1 a a a a a 9 a 9 a a 9,a 6 2 a 6 a 6 6 a 12a a a a 1 a a a 9 2 a 9 a 9 9 a 0 3 a 0 a 0 在c語言中11種賦值運算子的具體含義,用法?1.六個變數 表示式的賦值 是賦值運算子,是除後賦值,是乘...

C三目運算子是什麼,C中三目運算子是什麼,怎麼用

include int main a b?a b 其實dao就相當回於 答if a b return a else return b 就是唯一的那個吧 條件?滿足時 不滿足時。c 中三目運算子是什麼,怎麼用 三目運算子是?結構的運算 所謂三目就是需要三個變數進行運算的操作。版它等權價於短if els...

c語言運算子 和各有什麼功能,C語言運算子 和 各有什麼功能?

表示按位或,規則是一個為1或二個都為1,結果為1,表示按位異或,規則是相同為0,相異為1。首先把兩個運算元化成二進位制,然後按位進位制操作 5 35的二進位制00000101 3的二進位制00000011 00000111 化為十進位制是7 5 35的二進位制00000101 3的二進位制00000...