-
if(expression) 如果 expression=0 為 false,則表示式不等於 0 為 true。
c=a+b ;這是賦值語句,它返回最左邊的值,即 c
x--;字尾,先執行語句,然後自減。
x;字首,先減去,然後執行語句。
這裡 x--<5這裡你可以看一下整體 ( x<5, x=x-1) 所以當你輸入 5 時,你不會執行 printf("%d",x);但是 x 仍然必須減去 1 才能變成 4然後到 printf("%d", x++) 5 之後的 x++
但是輸入丟擲 x=x+1 之前的值,即 4
-
- + 變數後,計算為更改前的值。
所以在 x--<5 之後,x 自減為 4
否則,當得到輸出時,得到 x 的值,列印後,將 x 加成 5,所以輸出為 4,第二個問題括號內的表示式如果為 c=a+b,計算完表示式後,c=4,整個表示式的最後乙個值也是 4, 4 為 true,因為所有不是 0 的數字都為 true,因此輸出為 yes
-
1) -- 如果放在後面,會先執行運算,然後減去 1,所以輸入 5 後,先判斷 5 < 5,這是假的,然後執行其他。
類似地,printf(x++) 等價於 printf(x); x = x + 1;
2) c = a + 1 是賦值表示式,執行成功值為 1,因此列印 yes。如果要比較,應該是==
-
計算:從右到左,輸出到 Buffer。
1. 緩衝區是乙個堆疊。
2.第一步:將以下“i--”8處理到緩衝區中,i=7。 緩衝區:8<-(指標)。
第 2 步:將“i++”7 處理到緩衝區中,i=8。 緩衝區:
78< - 第 3 步:處理“--i”。 8 進入緩衝區,i=7
緩衝區:878 第 4 步:處理“++i” 首先自增量 1,然後 8 進入緩衝區,i=8
緩衝區:8878
3.輸出緩衝區資料(堆疊規則):8878
此外,自遞增、自遞減,也可能與編譯器有關。
-
在表示式中,++和標題一樣,在變數前面,在取變數值之前是自加減法。 變數之後,先取變數的值,然後進行自增自減。
例如:j=i++; 這意味著 i 的值首先分配給 j,然後 i 是自遞增的。 這也是下面**的意思。 您可以使用此想法來遵循。
-
i++ 和 ++i 在 C 語言中都是自動增量,但它們以不同的順序自增量。 ++i 表示 I 遞增 1 然後參與其他操作,而 i++ 表示 I 參與操作,i 的值遞增 1。
第四行被賦值 j, j=3,然後 i+1=4
第 5 行 printf 也被計算出來,認為執行了 i++ 操作 j=3,輸出為 i=4,然後計算出 i=i+1=5
在第 6 行中,i+1=5+1=6,然後 j=6
在第 7 行中,輸出 i+1=6+1=7,輸出 i=7J 不變或 6,第 6 行與第 1 行相同。
i- 1 一次輸出 6,j 也是 6,然後 i 減去 1 次 = 5;
最後兩行道理也留給樓主去思考,其實printf最好不要把計算步驟放進去,很容易忽略。
如果您不明白,請詢問。
-
6. X 希望對你有所幫助。
--對奧地利---的採用感到滿意
4. 首先,i++==1&&(j==3||k++==3) 是乙個 bai 邏輯表示式。
i++==1&&(j==3||k++==3)分為兩部分:i++==1和(+j==3||k++==3) 他們的關係是和關係。
因此,這兩個部分都將被執行。
i++==1
就是判斷此時i是否等於1(因為++是後來的),i=1;
執行此句後,i=2
然後執行第二部分。
+j==3||k++==3)
它分為兩部分。
j==3 和 k++==3。
這兩部分是 or 的關係。
如果第一部分滿足條件,則不執行以下部分。
如果第一部分不滿足條件,則執行下一部分。
j==3 是 j 加 1 先自己,然後判斷 j 是否等於 3
這部分的結果是真的。
所以後半部分沒有執行。
最終結果是 i=2 j=3 k=3
-
問題 1:當遵循 ++ 時,先執行語句,然後執行。 因此,4<2 不成立,取 y 的值,此時 y 沒有變化,所以它是 2。
問題2:這有點難。 關鍵是為什麼 k 的值是 3 而不是 4。 因為“or”運算,前面的++j已經是真的,所以k不再判斷,也就是k++不執行,所以k沒有變。
問題 3:不用說,--在後面,在 printf 中,原始值仍然是 23。 然後在執行 printf 後,它立即變為 22,while 中的值變為 ! 22。
房東,你有什麼問題嗎?
還有這樣乙個問題,i=1; a=i++;b=a;c=i+++i++;讓我們找出 abc 的值。 如果你把; 如果號碼被替換會發生什麼,都是相似的。 也就是說,自加法和自減法,所有這些都在單個語句中限定。
-
i=5;
它應該是 a=5,對吧?
x=(++a)+(a)+(a);
這種問題沒有必要分析。 在不同的編譯系統下,答案是不一樣的,在VC++下,答案是24。
-
說白了,這種無意義的操作在不同的編譯器上可能會產生兩種不同的結果。
我已經告訴過你了。
有從左到右,有從右到左,你不明白嗎?
這取決於編譯器。
這樣的問題毫無意義。
因為[像你這樣的公式的輸出]。
他輸出的值取決於你使用的編譯器型別]如果你不理解它,它真的沒有意義,你只能說:毫無意義。
-
這種可移植性很差,因為每個編譯器都有不同的解釋,根本無法用 GCC 編譯。
-
這種話題就是把字寫回去有幾種方法,是沒有意義的。
根據 C++ 的語義,答案應該是 22但是,有些編譯優化或編譯器不遵循規範,這可能會導致結果為 24
對於這種不確定且無意義的問題,我們只需要確保測試點是 ++ 的優先順序和返回值的語義,並且答案在編譯和優化時是不確定的。
答案 24 的由來:
t& operator++(
t operator+(const t&a)t o=5;
根據語義:o(6)。operater+(
t(14).operator+(o(8))=22
-
列印的 x 是什麼?
-
是的,由於 ++ 具有最高優先順序,因此第乙個 ++j 使 j=6; 但是 ++j 後跟 j=7,然後執行二進位加法得到結果 14,然後是 +(+j),因此結果是 22。 在申請過程中,最好不要使用,這樣會模稜兩可。
-
鍵入整個 **,並且此 q 的值為 21,除非此表示式之前有 ++
-
最好不要以這種方式使用自動遞增,因為不同版本的實現是不同且不明確的。
-
a-=a*a ;它相當於 a=a-a*a; 在本例中,a 的值為 5-5*5=-20
b=(a=3*5,a*4,a+5);這是乙個逗號表示式,b的值是逗號表示式最右邊的值,即a+5的值,逗號表示式的第一項是a=3*5;所以 a 的值變為 15,b 的值為 a+5=15+5=20
逗號表示式中間的 a*4 項沒有任何意義。
-
整數加 1 本身可以這樣寫:
a+=1;它相當於 a=a+1;。
但是有一種更簡單的方法可以用 C 語言編寫它,那就是 A++; 或 ++a;。 這稱為自我新增或自我增加; 意思很清楚,是自加一。
相應地,還有a--和--a,它們被稱為自減法,意思是自減法。
和 -- 分別稱為自動遞增運算子和自動遞減運算子。
自我遞增和自我遞減的例子:
#include
#include
int main()
結果:a=10,b=20
a=11, b=19
a=12, b=18
增量完成後,舊值將替換為新值,新值將儲存在當前變數中。 自動遞增和自遞減只能用於變數,而不能用於數字,例如 10++ 是錯誤。
目標。 值得注意的是,++在變數之前和之後是有區別的:
在它前面稱為預自動縮放(例如++a)。 先執行以前的自動增量操作,然後執行其他操作。
後來稱為後自增(例如A++),先執行後自增,再自增。
自減法(-同樣如此,有前減法和後減法之分。
請看下面的例子:
#include
#include
int main()
輸出: a=11, a1=11
b=21, b1=20
c=29, c1=29
d=39, d1=40
1)對於a1=++a,先執行++a,結果為11,然後將11賦給a1,所以a1的最終值為11。A 是自遞增的,最終值也是 11。
2)對於b1=b++,b的值不是立即加到1,而是把b的原始值給b1,然後把原來的值加到20,所以b1的值也是20。和 b
自遞增後,最終值為 21。
3)對於c1=--c,先執行--c,結果為29,然後將29分配給c1,所以c1的最終值為29。而 c 是自遞減的,最終值也是 29。
4)對於d1=d--,d的值不會立即減少1,而是將d的原始值交給d1,然後原始值將減少到40,因此d1的值也將是40。還有 d-子午線。
自約簡後,最終值為39。
可以看出:a1=++a; 首先執行自動遞增操作,然後執行分配操作。 和 b1=b++; 首先執行分配操作,然後執行自動遞增操作。 c1=--c;和 d1=d--; 也。
沒錯。
思路:要求乙個正整數n的位數,可以先定義乙個變數num,並初始化為0,將整數n依次除以10,直到為0,每除以10,變數num的個數就會加1,最後乙個num的值就是整數n的位數。 >>>More