int x 5 int y 2 x xx 8xprintfd ,y求程式的結果並解釋

時間 2021-08-30 10:52:55

1樓:焮欣

這個題目與逗號表示式以及++運算有關係。

首先x+=x++,x+8,++x這個表示式可以變成x+=x++,++x

然後從右往左來:++x得到x=6;

繼續x+=x++ 得到x+=6從而x=12從而x+=x++,x+8,++x表示式的值為12y=2+(x+=x++,x+8,++x)=14;

所以輸出結果是14

2樓:海獅

這個是vc6的編譯結果

8: int y=2+(x+=x++,x+8,++x);

00412c0f mov eax,dword ptr [ebp-4] //x是dword ptr [ebp-4]

00412c12 add eax,dword ptr [ebp-4]

00412c15 mov dword ptr [ebp-4],eax //x=x+5=10

00412c18 mov ecx,dword ptr [ebp-4]

00412c1b add ecx,1

00412c1e mov dword ptr [ebp-4],ecx //x=x+1=11

00412c21 mov edx,dword ptr [ebp-4]

00412c24 add edx,1

00412c27 mov dword ptr [ebp-4],edx //x=x+1=12

00412c2a mov eax,dword ptr [ebp-4]

00412c2d add eax,2

00412c30 mov dword ptr [ebp-8],eax //y=x+2=14

結果是14,中間的x+8沒有用,所以沒有編譯

3樓:匿名使用者

一樓兄弟的回答,好像有點不對啊。。。

這個題目的確是與逗號表示式以及++運算有關係。不過可不是那個解釋法。。。

借用一下這位兄臺的格式:

首先(x+=x++,x+8,++x)這個表示式可以變成(x+=x++,++x)

然後從左往右來:x+=x++,得x=11。(這個地方可以到c 中試驗一下,原式可變為x=x+x++,x=5,x++=6,所以x+=x++最後的值為11)。繼而++x 得到12;

從而(x+=x++,x+8,++x表)達式的值為12y=2+(x+=x++,x+8,++x)=14所以輸出結果是14.

不知各位是否同意我的說法?

4樓:

2+(10,19,20)

5樓:

y = 2+(11,19,12);

y=14;

x++;//5

x+=5;//11

x+8;//19

++x; //12

y = 2+12;

int x=5; int y=2+(x+=x++,x+8,++x); printf("%d",y); 結果是多少,為什麼?請大俠們解釋清楚點,謝謝!

6樓:匿名使用者

int x=5;

int y=2+(x+=x++,x+8,++x); //這裡括裡面要取的值是最後一個逗號後面的值

//前面依次執行 x+=x++,這個是先用了x再x++ x+=x相當於 x=x+x =5+5=10 再x++ x=11,然後是x+8,x不變,最後是++x,x=12,所以y=12+2=14

printf("%d",y); //輸出14

7樓:匿名使用者

結果為14

y的值為括號內最左邊的式子的值加上2; 括號內的計算順序是從右向左。

8樓:嘿若

14.。。。。跑出來的~

#include void main() { int x=5; int y=2+(x+=x++,x+8,++x); printf("%d",y); }

9樓:

(x+=x++,x+8,++x) 逗號語句,【這裡不等價於:x=x+(x++,x+8,++x)】,應該和編譯器有關吧!

先算的x++,x+8,++x,得x=7,然後x=5+7,x就成了12了。

最後y=2+12=14

10樓:5千零一

逗號運算,取最後一個的值

int x=5; int y=2+(x+=x++,x+8,++x); printf("%d",y); 結果是多少?x=(y=4,z=16,k=32),x的值是32?

11樓:孔桂枝和亥

括號裡,逗號運算子是從左往右的,整個表示式的值跟最右邊的語句有關

回。1、x++表示先使用x的值然後答自增,那麼表示式x+=x++之後,x的值是11;x+8不影響x的值;++x後值為12;那麼y=14。

2、從左往右,最後的值就是32。

#include void main() { int x=5; int y=2+(x+=x++,x+8,++x); printf("%d",y); }

12樓:僧素蘭斐淑

(x+=x++,x+8,++x)

逗號語句,抄【這裡不

等價於:x=x+(x++,x+8,++x)】,應該和編譯器有關吧!

先算的x++,x+8,++x,得x=7,然後x=5+7,x就成了12了。

最後y=2+12=14

13樓:壬竹青冷詩

#include

intmain()

主要copy

問題在這句:y+=x++*x++;

它等價於:

y+=x*x;

x++;

x++;

也就是說,y+=1;

x+=1;x+=1;

結果自然是3,2.

下述程式段的輸出結果是 int x=10; int y=x++; printf(「%d,%d」,(x++,y),y++); 答案是 11,10

14樓:匿名使用者

先放張圖,規律bai很容易看出來吧

du首先,逗號

zhi運算子是

dao取右邊

這裡涉及到引數的求回值順序,即確定答最右側y++輸出是5後,自增1,導致下一步中間y++輸出是6,之後再自增1,最後y的輸出自然就是7。

是不是眼熟,這不就是棧嘛,後進先出,這題不太會考察,出題人估計都沒想到這一層,只是單純想考逗號和自增運算。

15樓:wuli學粑粑

這樣想行不行,最後printf((%d%d),y,y++);

應該先把y++算出來(++二級運算子比分隔運算子高)

y++取10,y為11

16樓:手機使用者

我覺得是這樣的,首先逗號運算子輸出的是最後一個表示式的值,這是毋庸置疑的,逗版號表示式中y的值是11,權(上面的回答已經解釋得很清楚了,我就不做解釋了),至於之後的那個y++的值,問題出在printf函式上,程式只呼叫了一次該函式,在這次呼叫中,既把y放在逗號表示式中輸出第一個結果,又讓y執行y++操作輸出第二個結果,所以兩個輸出都是針對一開始初始化的y進行的,若是呼叫兩次printf函式,y++的結果才是11

17樓:啦啦啦種太陽

printf先算(x++,y)後算y++是10 10

後算(x++,y)先算y++是11 10

所以是printf計算順序的問題?我也不知道是不是,小白弱弱的猜一下

18樓:匿名使用者

int main()

輸出:11,10 (因為你的y的值是x而不是x加1)

19樓:匿名使用者

「(x++,y) 是逗號表達du式zhi,取第一個dao子表示式的值作為整個表

回達式的值,故整個表示式的值為11,然答後x達到12」 非也。「逗號表示式」這種說法我不置可否,逗號運算子在此處起連線作用,相當於「·····然後····」的意思,最終生效的是最後那一串**。第一輸出的是y,第二輸出的也是y。

上述**中,y只有初始化,沒有賦值(除了y++以外,但此處對後輸出的y沒有影響),因此輸出結果必然是相同的。

「y++ 整個表示式的值是10,然後y達到12」 這也太說不過去了吧,y最終達到12了?

問問題的這位大概是沒有自己動手操作的吧?如果是的話,這裡就勸一句:盡信書不如無書,實際操作才是硬道理。

20樓:亮劍和

printf(「%d,%d」,(x++,y),y++)?

寫錯了沒

21樓:

int y=x++; 這個是先把x的值賦值給y,然後x自身在++明白否?

下面程式的輸出結果是int x 2 int y 3 x xx 4x printfd ,y

刀秀慧 y應該是9,括號裡是三個表示式,用逗號運算子連線,所以順序從左到右,第一個表示式結束後x的值為5,即x x 由於是後置 所以先算x x x,x 4,再算x x 5,第二個表示式幾乎沒用,所以直接算第三個,由於是前置 所以x的值變為6,最後在加上前邊的3就是9了。 樂酷科技 x x x 4,x...

已知int x 1,y執行yx5x10語句後,x的值為多少呢?謝謝高人回答哦

首先要明白 x和x 的區別,x是變數x先進行自加,運算結果再參與運算,x 是x先參與運算,之後變數再自加,明白這個這個問題就不難了。之後再看表示式,y是一個boolean值,是兩個表示式 之後的結果,對 操作符來說,如果前面的表示式為真,再運算後面的表示式,兩者取與運算,如果前面的表示式為假,將不會...

1 如果是int x 0 cout《 x 4 5,x x 5 ,x 25結果又如何呢

1.int x 0 cout x 4 5,x x 5 x 25 輸出的結果100,x 100,x 25的值丟失 2.int a 5,b 6,w 1,x 2,y 3,z 4 a w x b y z 上述語句執行後,邏輯表示式的值為0,a的值為0,b的值為6,因為,運算在執行完a w x後,其值已確定為...