c語言中設a1b2c3d4執行,C語言中設a 1,b 2,c 3,d 4 執行printf d d d d n ,a b c,c a b,c a b ,b c 的結果是什麼

2021-04-21 09:56:09 字數 4186 閱讀 7621

1樓:匿名使用者

c語言提供一種特殊的運算子——逗號運算子。用它將兩個表示式連線起來專。如:

3+5,6+8稱為逗號表示式,又屬稱為「順序求值運算子」。逗號表示式的一般形式為表示式1,表示式2逗號表示式的求解過程是:先求解表示式1,再求解表示式2。

整個逗號表示式的值是表示式2的值。例如,上面的逗號表示式「3+5,6+8」的值為14。又如,逗號表示式a=3*5,a*4對此表示式的求解,讀者可能會有兩種不同的理解:

一種認為「3*5,a*4」是一個逗號表示式,先求出此逗號表示式的值,如果a的原值為3,則逗號表示式的值為12,將12賦給a,因此最後a的值為12。另一種認為:「a=3*5」是一個賦值表示式」,「a*4」是另一個表示式,二者用逗號相連,構成一個逗號表示式。

這兩者哪一個對呢?賦值運算子的優先順序別高於逗號運算子,因此應先求解a=3*5(也就是把「a=3*5」作為一個表示式)。經計算和賦值後得到a的值為15,然後求解a*4,得60。

整個逗號表示式的值為60。

在c語言中 main() {int a=1,b=2,c=3; printf("%d,%d,%d,%d\n",a=b=c,a=b==c,a==(b==c),a==(b==c);}執行結

2樓:匿名使用者

a=b=c //將c的值3賦給b,再將b=c的值3賦給a,整個表示式的值是3

a=b==c //vc2005測試結果是3,我自己算應該是1,這個我不是很清楚。

a==(b==c) //先判斷b==c,結果是1,再判斷a==1,結果是0

a==(b==c) //先判斷b==c,結果是1,再判斷a==1,結果是0

3樓:

!a=b=c,a=b==c,a==(b==c),a==(b==c)第一個 a=b=c 是一個賦值語句 使得 a=b=c=3 所以輸出 3

第二個 a=b==c 先對 b==c判斷 即 3==3 是正確的 所以 a=1

第三個 a==(b==c) 由之前的賦值可以知道 b=c=3 所以 b==c 判斷為 1

再對a==1 進行判斷 ,結果為真 所以是1第四個 和第三個一樣 也是一樣的

後來我在cfree5.0測試了一下

發現用這樣

#include

main()

你會發現輸出的值是1

而如果是用

#include

main()

發現是 3,0,0,0

第二個是0

我懷疑是printf函式的處理表示式的問題每一個編譯器的處理 應該是不一樣的

我在第二個加了括號,也沒用。結果還是0

我們現在還在學逗號運算子,這些,都是我自己推的。。

僅是愚見

4樓:

因為後面三個是「==」(等於號),顯然c是不等於b的,按邏輯值處理成0.

程式如下:

#include

main()

結果為3,0,0,0

5樓:笑引幽

因為先a==(b==c);運算返回0,==是關係運算子,b==c返回0 ,a==(b==c)返回0

然後 a==(b==c), 同樣得到0,

a=b==c, a的值就變成0了

a=b=c a,b,c都值為3,整個表示式返回3所以輸出 3,0,0,0

6樓:張效群

第一個a=b=c 是賦值語句,最終結果是a=3傳給前面;第二個a=b==c,是先作比較運算==,結果為真,即非0,一般為1,所以此時a=1,並把結果賦予前面;第三個是判斷語句,b==c為真,結果為1,a==1,結果為真,即1,並賦予前面;第四個同樣為1;

所以最終結果是3,1,1,1的哦

c語言中int a=1,b=2,c=3; c=(a+=a+2),(a=b,b+3); printf

7樓:匿名使用者

c語言copy提供一種特殊的運算子——逗號運算子。用它將兩個表示式連線起來。如:

3+5,6+8

稱為逗號表示式,又稱為「順序求值運算子」。逗號表示式的一般形式為表示式1,表示式2

逗號表示式的求解過程是:先求解表示式1,再求解表示式2。整個逗號表示式的值是表示式2的值。例如,上面的逗號表示式「3+5,6+8」的值為14。又如,逗號表示式

a=3*5,a*4

對此表示式的求解,讀者可能會有兩種不同的理解:一種認為「3*5,a*4」 是一個逗號表示式,先求出此逗號表示式的值, 如果a的原值為3,則逗號表示式的值為12,將12賦給a, 因此最後a的值為12。另一種認為:

「a=3*5」是一個賦值表示式」,「a*4」是另一個表示式,二者用逗號相連,構成一個逗號表示式。這兩者哪一個對呢?賦值運算子的優先順序別高於逗號運算子, 因此應先求解a=3*5(也就是把「a=3*5」作為一個表示式)。

經計算和賦值後得到a的值為15,然後求解a*4,得60。整個逗號表示式的值為60。

8樓:匿名使用者

c=(a+=a+2),(a=b,b+3);

->c=(a+=a+2);(a=b,b+3);

->c=(a+=a+2);a=b;b+3;

9樓:焚香木弋

int a=1,b=2,c=3;

c=(a+=a+2),(a=b,b+3);

相當於兩個順序語句:

先執行了c=(a+=a+2)這個語句得出c=a=a+1+2=4;

然後執行a=b,b+3;得出a=b=2;後面專的b+3單純是迷惑人

屬而已,不起作用。

所以輸出的答案是a=2,b=2,c=4;

10樓:沫宸萱

樓主自己敲下**執行結果不就知道了?

11樓:康康

2,2,4

可以自己編譯跑一下啊,比來問以後效率得多

c語言中設a=4,b=3,c=2,d=1則表示式:a

12樓:瑞春楓

結果是1;

首先判斷條件a<=b,如果成立則取a的值,不成立則取(c<=d?a:d)的值;對於c<=d?

a:d,先判斷c<=d,如果成立則取a的值,不成立則取d的值;所以,很明顯,你的表示式裡一開始a<=b條件就成立了,直接就取a的值了,a的值就是1,所以結果是1。

13樓:鄞昆誼犁晗

答案在vc6.0上跑出來是1

說句實話,如果是考試題還可以理解

如果真的**寫成這樣就很無語了

c語言, int a=1,b=2,c=3,d=4; if((a=2)&&(b=1)) c=2;

14樓:匿名使用者

int a=1,b=2,c=3,d=4;

if((a=2)&&(b=1)) c=2;

a=2表示賦值2給a,同時檢查結果2是不是真, 當然是,所以又檢查b=1,

b=1 同上,結果也是真,所以執行c=2;

if((c==3)||(d==-1)) a=5;

c=2!=3 ,d=4!=-1,所以不執行a=5;

printf("%d,%d,%d,%d\n",a,b,c,d);

正確結果為:2 1 2 4

如果你的答案是5 1 2 -1,則說明你if((c==3)||(d==-1)) a=5;這句寫錯了,

應該是if((c==3)||(d=-1)) a=5; 是d=-1不是d==-1

c=2!=3為假,因為是||或關係,所以會再判斷d=-1,-1非0為真,會執行a=5

這樣結果為

a=5 b=1 c=2 d=-1

15樓:匿名使用者

我執行的結果是2,1,2,4

第一個if中a=2(b=1)是賦值,和a==2(b==1)是不一樣的

16樓:匿名使用者

if((a=2)&&(b=1)) 相當於if(2&&1) ,結果很明顯

17樓:雪月靈妖

1.結果是: 2,1,2,4

不知道你為什麼是5,1,2,-1

2.if((a=2)&&(b=1))

a=2 => 2 真

b=1 => 1 真

c 語言中2d 2d什麼意思,C語言中的 2d是什麼意思

2d就是寬度2 輸出整數 2d 就是輸出寬度2整數 後面帶個 號 輸出就是 2d是c語言中printf函式的輸出格式說明符。具體解釋如下 使輸出的int型的數值以2位的固定位寬輸出。如果不足2位,則在前面補空格 如果超過2位,則按實際位數輸出。注 如果輸出的數值不是int型,則進行強制型別轉換為in...

設inta1,b2,c3,d4,則下列條件表示式的

結果為1,他是兩個條件關係的巢狀,條件關係為1 2 3,1滿足,則結果為2,1不滿足,則結果為3 如果int a 1,b 2,c 3,d 4,則條件表示式 a b?a c d?c d 的值是多少?要求解答詳細點哈,當a b 成立 則結果就是 a 如果 a b 不成立 則結果要判斷 c 2,c 所以這...

c語言已知a 5,b 6,c 7,d 8,m 2,n 2執行

答案不可能是復2,答案應制該是0,這是一個邏輯表達bai式不可能出現0,1之外的數du字。前邊 的優zhi先級高於賦值也就是先dao判斷a b是假,也就是0,把這個零賦值給m,此時m 0,因為邏輯符號 有短路效應,也就是說前邊只有出現假,就不會接著判斷後邊的一部分,所以整體表示式是假,也就是0 答案...