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
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
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後,其值已確定為...