C語言問題

時間 2022-04-30 13:20:08

1樓:牛比的琭琭

很不規範的程式。。您這樣濫用操作符很可能會產生一些莫名其妙的錯誤。

最好的辦法 ,是在沒有把握的時候把他們分開寫。

我想你出錯的關鍵是在z+=-x+++(++y||++z); 這裡||符號採取的是「短路求值」 即 當左邊條件為真時(++y總為真)不會再去求右邊表示式的值

也就是說 ++z 根本沒執行, 所以和你預計的相差1

2樓:伊·梵

其實你的問題應該可以提公升一下:

為什麼(++y||++z)中++z沒有執行?

根據輸出的結果,你列印出x,y,z的值

printf("%d,%d,%d",x,y,z);

這樣就發現x++和++y都被執行了,只有++z沒有執行然後你繼續思考,就會懷疑||,你的問題就會是:

|| 運算子有什麼特別的?

記住一條:永遠不要輕易懷疑編譯器,因為編譯器總是對的。

3樓:匿名使用者

你的2,0,3是對的,關鍵是這一步 z+=-x+++(++y||++z);

先取x=2,所以-x 就是 -2;

而++y||++z 的值顯然為 1;

所以 z+=-2+1;

所以最後輸出的為-1.

4樓:

z+=-x+++(++y||++z);

可以分解為:

z=z+((-x)+(++y||++z));

x=x+1;

因為y=1,所以不用往後看了,(計算機同樣不會計算後面的表示式)就知道或運算的結果為1

(++y||++z)=1

-x=-2

所以z=-1;

5樓:

z+=-x++ + (++y||++z);

這句的 ++z 沒執行,因為 || 運算子的關係,++y已經確定是真值,||之後不再

進行計算,此時()內表示式的值為1,

所以z=-1

6樓:

因為||符號的作用是:假入符號前面成立,後面的就不做運算了

7樓:柔陽寶

前兩個你求出來了

這時z=0; x=2; y=1;

z+=-x+++(++y||++z);

z = 0 -2 +(1);

8樓:匿名使用者

z=0-(2)+(2||1)=-2+1=-1

c語言問題,C語言問題。

考驕 用指標將兩個字串連結接起來,前一個while迴圈,確定s1字串走完,第二個while開始將s1的逐個字元複製給s1走完,也就是末尾,這樣就可以把字串都匯入到s1中 最後一個空寫的應該寫return s1 長魚修韋 很久沒碰這東西了。我來解釋下 第一個while的迴圈是為了讓指標指向第一個字串的...

C語言問題,c語言問題?

自我程式設計 列印輸出乙個ok。因為前面迴圈for語句有分號結束。所以後面的printf語句不在迴圈內,不受迴圈語句影響。 理佑平鄲胭 結果是22 7 7 8 22 你可以將 i i i i是先 1再計算,還有這裡的運算順序是從左到右,所以應該是7 7 i 14 8 22 前兩個相加時,i先加1,加...

c語言問題,C語言問題?

這個問題說難不難,但理解可能有點玄乎而已,但是打個比方來理解就太容易掌握啦!就是說scanf的認定讀取,比如你單純的scanf c ch 那麼實際上已經認定了第乙個字元出現就把它賦予給ch,如果是你的scanf c 前面多了乙個空格,所以就認定了出現第乙個空格後的字元賦予給ch,如果寫成這樣 sca...