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...