1樓:匿名使用者
9: int i = 3;
00401028 mov dword ptr [ebp-4],3
10: int j=0;
0040102f mov dword ptr [ebp-8],0
11: j = (++i)+(++i)+(++i);
00401036 mov eax,dword ptr [ebp-4];dword ptr [ebp-4]就是i,初值為3
00401039 add eax,1;
0040103c mov dword ptr [ebp-4],eax;這時 i = 4;
0040103f mov ecx,dword ptr [ebp-4]
00401042 add ecx,1
00401045 mov dword ptr [ebp-4],ecx; 這時i = 5;
00401048 mov edx,dword ptr [ebp-4]; edx = 5
0040104b add edx,dword ptr [ebp-4]; edx = 5+5
0040104e mov eax,dword ptr [ebp-4]; eax = 5;
00401051 add eax,1
00401054 mov dword ptr [ebp-4],eax;這時 i=6;
00401057 add edx,dword ptr [ebp-4]; 所以edx = 5+5+6 = 16;
0040105a mov dword ptr [ebp-8],edx; 所以j = 16;
這是vc++6.0下的彙編結果,上面有解釋為什麼是16
其他的也一樣,除錯的時候看下彙編就知道了
2樓:only釗
第一個1.是4+4+4
2.是3+3+4
第二個1.是5+5+5
2.是3+5+5
第三個1.是5+5+5
2.是5+3+5
只要記得i++是先用後加++i是先加後用然後自己在不同平臺除錯就知道該平臺的運算方式了……
3樓:匿名使用者
與平臺相關,計算的順序不同,一個從左向右,一個從右向左
4樓:許瑞答問狂
不同的系統,計算方向不同,這就是自加運算子要慎用的原因!
若有如下定義和語句int i=3,j;j=(++i)+(++i)+--i;執行後i,j的值分別是?為什麼?
5樓:金色潛鳥
計算結果 與編譯器有關,與編譯的優化選擇有關。
i 沒問題 得 4。
因為 i=3; --i 得 2, (++i) 得 3, 再 (++i) 得 4。最終 i=4.
j 的結果 就不一定了。
例如: ms vc++ 編譯器優化 /o1, /o2, /og 等, j =12;
/od 和 預設 得 j=14.
至於問 「為什麼」,只有編譯器 生產商 或設計者 才知道。普通使用者難猜。
程式設計師寫程式時要 避免 這種 含義不清,多義性的語句。
例如分開寫成: a=i+1; b=i+1; c=i-1; j=a+b+c; 那就無2義性。也就不必浪費時間去研究j得幾,為何得幾。
6樓:emm名字沒有了
付費內容限時免費檢視
回答您好呀很高興為您解答!
若有如下定義和語句int i=3,j;j=(++i)+(++i)+--i;執行後i,j的值分別是4,14。
希望回答對您有所幫助!
祝您生活愉快![微笑]
提問為什麼
回答i 沒問題 得 4。
因為 i=3; --i 得 2, (++i) 得 3, 再 (++i) 得 4。最終 i=4.
j 的結果 就不一定了。
例如: ms vc++ 編譯器優化 /o1, /o2, /og 等, j =12;
/od 和 預設 得 j=14.
更多8條
設i,j,k均為int型變數,則執行完「for (i=0,j=0;i<=j;i++,j
7樓:
for (i=0,j=0;i<=j;i++,j 連個反括號也木有,怎麼看?不過但看著一部分,for迴圈的語句是不執行的!
8樓:匿名使用者
當第一次迴圈時,i=0,j=0,已經滿足結束條件i<=j, 不會在執行;
9樓:匿名使用者
for(第一部分;第二部分;第三部分)
其中第一部分為初始化用,第二部分判斷用,第三部分跳步用,每次進入for迴圈前都需判斷第二部分是否成立,如果成立,執行迴圈體並按第三部分跳步。
for(i=0,j=0;i<=j;i++,j語句不完整,但i=j會進入迴圈體
10樓:匿名使用者
這個for語句沒什麼作用的 因為初始時候就結束了
11樓:心情不錯
沒有要求輸出。。。錯題
設有定義「int j,i;」,則執行「j=(i=1,1+9)>9?i++||++i:++i;」後,i,j的值為()
12樓:匿名使用者
先執行(i=1,1+9)>9,()表示式的值,是()內最右邊式子的結果,所以是10,10>9,所以第2步是執行i++||++i.
因為之前已執行了i=1,所以i++的取值是1,取值後將i變成2,所以i++||++i的左邊是邏輯真值,根據編譯器的優化,右邊的++i不再計算,所以i++||++i的最終結果是真,即1,所以j=1
c語言 設i,j,k均為int型變數,則執行完下面的for迴圈後,k的值為_____.
13樓:
c語言 設i,j,k均為int型變數,則執行完下面的for迴圈後,k的值為10。
for(i=0,j=10;i<=j;i++,j--) k=i+j;表示,i初始值為0,j初始值為10。判斷i是否小於等於j。如果成立,則k為i+j,i為i+1,j為j-1。
繼續迴圈判斷,直至,i大於j時,結束迴圈。因此,當i=5,j=5時,k=5+5=10時,最後一次迴圈。當i=6,j=4時,結束迴圈。
14樓:一嘆
執行完下面的for迴圈後,k的值為10。
語句的執行過程:
首先進入for迴圈,對i和j進行賦值操作,然後判斷條件,i<=j因為i=0,j=10,所以條件成立執行k=i+j=0+10=10,然後再進入下一次迴圈,迴圈的後執行k=i+j的結果k一直等於10。
當i=6,j=4時迴圈的條件不滿足了,退出迴圈,所以k=10,得出k一直等於10。
15樓:鬆浩慨
k最後一次被賦值時i=j=5,所以k=10
然後i變為6,j變為4,退出迴圈
int i=1,j=2; int k=i+++j; 第二條語句的意思是 k=(i++)+j 還是k=i=(++j)為什麼
16樓:匿名使用者
第二個的語句是 k=(i++)+j這個 因為自身的增加 即i++的優先順序會高於+
希望我的回答能幫助到你
17樓:匿名使用者
因為運算子優先順序為++大於+
所以第二條語句應該是k=(i++)+j
分解為下面的步驟
1.i+j;(由於i++是先使用i值在表示式中進行運算,再自加1)2.k=第1步的結果3;
3.i++;(i從1自加為2)
18樓:匿名使用者
i和j之間有三個+
沒有用()來區分的話 都是從左前右執行的
那麼你的語句以 k=(i++)+j執行
19樓:匿名使用者
k=(i++)+j;
在c語言中,儘可能多的從左到右的結合運算子
20樓:
1:你沒有去判斷n和m這兩個數哪個更大
2:在使用k之前你並沒有賦值
3:第一個for迴圈應該寫成:for(k = m; k <= n; k )
4:第二個for迴圈應該寫成:for(i = 0; i <= j; i )
5:第二個for迴圈內的if和break是一個語句塊 前後加大括號6:建議將j定義為int型別 後面sqrt(k)的值強轉為int型別注意:for迴圈的三個表示式的執行順序
for(表示式1;表示式2;表示式3)
1:執行表示式1
2:執行表示式2
3:如果表示式2為假 退出迴圈
4:如果表示式2為真 執行迴圈體
5:執行表示式3
6:從第2條重新開始執行(即:執行表示式2 進入新的一次迴圈)
設函式f x 的定義域為,則f sinx 的定義域是
小小芝麻大大夢 因為f x 的定義域為 0,1 所以0 sinx 1,因為sinx是以2 為週期的函式,且在0到 區間內滿足0 sinx 1,所以f sinx 的定義域是 2k 2k k屬於整數。正弦函式y sinx,在直角三角形abc中,c 90 ab是 c的對邊c,bc是 a的對邊a,ac是 b...
已知極限的定義 設Xn為一數列,如果存在常數a,對於任意給定的正數 不論它多么小 ,總存在正
未若輕初 關於極限定義的幾點解釋 1 n是項數。是我們解出來的項數,從這一項 第n項 起,它後面的每一項 的值與極限值之差的絕對值小於任何一個給定的數 2 由於 是任給的一個很小的數,n是據此算出的數。可能從第n項起,也可 能從它後面的項起,數列的每一項之值與極限值之差的絕對值小於 是理論上假設的數...
設f為R上單調函式,定義g x f x 0 ,證明函式g在R上每點都右連續
麴飛睢可 解 g x 為r上週期為1的函式,則g x g x 1 函式f x x g x 在區間 0,1 正好是一個週期區間長度 的值域是 2,5 令x 1 t,當x 0,1 時,t x 1 1,2 此時,f t t g t x 1 g x 1 x 1 g x x g x 1 所以,在t 1,2 時...