int x2 int yxx printf xd n ,xprintf yd n ,y求解詳細過程

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

1樓:

明明是c ,樓上的都說錯了,也就x++和++x的問題,首先定義x=2,

執行完int x=2,之後x的值是2;

執行int y = x++ * ++x;將*號分為左右兩邊,首先x++沒有變是2,左邊的結果是2-------之後執行了右邊,x++執行了,x變成了3,之後又執行了++x,x變成了4,右邊變成了4,也就是2*4=8了;

然後x變成了4,(首先執行x++,x加了1,又執行了一個++x,x又加了1)

接著執行printf("x = %d\n",x); 將x輸出結果為x=4;

最後執行 printf("y = %d\n",y); 將y輸出,結果為y=8;

最後輸出結果,x=4,y=8。

這是個運算子優先順序的問題,學習的時候學的,以後在專案中,很少用到,記得多加括號就解決這種問題了,

2樓:匿名使用者

這個題是c語言中關於運演算法優先順序的問題。單目運算子的優先順序高於雙目運算子,即int y = x++ * ++x;等價於int y =( x++) *( ++x);知道運算順序後還要明白自增運算的含義,在c中++在前表示先引用後自增,++在後表示先自增後引用。

執行int y = x++ * ++x;將*號分為左右兩邊,首先x++沒有變是2,左邊的結果是2-------之後執行了右邊,x++執行了,x變成了3,之後又執行了++x,x變成了4,右邊變成了4,也就是2*4=8了;

然後x變成了4,(首先執行x++,x加了1,又執行了一個++x,x又加了1)

3樓:匿名使用者

跟編譯器優化有關。

win下面結果x=4,y=9

4樓:匿名使用者

搞清楚++x 和x++ 就行 ++x是x先加1再運算,,x++則是相反

y=x++*++x=2*3=6 運算完後x=4

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

5樓:匿名使用者

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

du首先,逗號

zhi運算子是

dao取右邊

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

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

6樓:wuli學粑粑

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

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

y++取10,y為11

7樓:手機使用者

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

8樓:啦啦啦種太陽

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

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

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

9樓:匿名使用者

int main()

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

10樓:匿名使用者

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

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

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

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

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

11樓:亮劍和

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

寫錯了沒

12樓:

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

執行後輸出的結果是_________。

13樓:匿名使用者

3,2,0

因為 || 運算子檢測到第一個表示式結果為 true(非零值返回 true) 時會忽略後面的表示式。

14樓:匿名使用者

x 3 y 2 z 0 還有測試就能得到答案

15樓:chenglixia天枰

這道題本身就有問題吧,int型怎麼可以用||和&&來計數呢?

求解釋和答案!

16樓:匿名使用者

|int x=2,y=2,z=0,a;

a=++x||++y&&z++;

//上面等價於 x++; a= x || (++y&&z++); 由於x>0, 而右邊是 || 所以 不會執行 (++y&&z++)

printf(″%d,%d,%d\n″,x,y,z); //結果是 3,2,0

17樓:

a=++x||++y&&z++; //或運算||有短路功能。當第一個運算元++x的值3為非零時,不計算第二個運算元++y&&z++的值,直接返回真,因此,程式執行完成後,a=1,x=3,y=2,z=0。

18樓:

3,3,1;這時a==1。

自增問題:++在變數前是加1參加運算;在後是先運算後加1。到printf()時就是3,3,1了。

int x=10,y; y=(x++)+(--x)+(++x); printf("%d,%d\n",y,x); 執行結果為28,11. 求解釋

19樓:匿名使用者

看了下彙編, 貌似首先先做的減法。不知道ansi c標準是怎麼規定的。

32 000e c744241c movl $10, 28(%esp)

32 0a000000

7:test.c **** int y;

8:test.c **** y=(x++)+(--x)+(++x);

33 .loc 1 8 0

34 0016 ff4c241c decl 28(%esp)

35 001a 8b44241c movl 28(%esp), %eax

36 001e 01c0 addl %eax, %eax

37 0020 ff44241c incl 28(%esp)

38 0024 0344241c addl 28(%esp), %eax

39 0028 89442418 movl %eax, 24(%esp)

40 002c ff44241c incl 28(%esp)

9:test.c **** printf("%d, %d\n", y, x);

20樓:匿名使用者

從左往右計算啊,++的優先順序高於+,第一個先用後加,值為10,存入x,第二個先減在用,值為9,存入x,所以第一步為9+9,完後值加1,x值為10,後面不用說了吧,y=9+9+10.

很簡單的例子,int x=5;y=++x*++x;值為y=7*7,不知我說清楚沒,手機打的

21樓:匿名使用者

不同版本的c答案不一樣.你的答案是

在visual c++中除錯的結果28,11在turbo c2.0的答案是30,11在visual c++中如果有多餘2個以上的++或--運算時,從第3個開始x和前面的x的值就不一樣了.變成y=9+9+10=28.

在C語言中,若int x 2,y 2,z 2則表示式zxy 的值為求過程

答案為6 x 當這句執行完時才加一,同理y 因此計算z z x y 6 天外凝視 int x 2,y 2,z 2 z x y z x y 相當於z z x y x x 1 y y 1 不管有沒有加括號,都一樣的,都是最後表示式計算完才自加的,所以結果等於6 先進行z z x y 然後x,y再自加 x...

int x 1,y 2,z 3則表示式z xy

姚令怡周義 答案是5.後面是一個三目運算子。先求?前面的表示式,若表示式的值是0,則取 後面的值,非0取 前面的值,而自加運算子的用法是 x 先自增1在使用 x 先使用在自增1 所以x y?x y的值是2 z 2相當於z z 2 5. 計好樂智 結果是6 因為 運算子的優先順序低於後面的運算,所以先...

下面程式的輸出結果是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...