1樓:仙戈雅
樓上的兄弟都已分析過了,如果你學過資料結構中的棧就會學逆波蘭演算法。這道題就是典型的逆波蘭問題。
這先是執行i+i+i=3+3+3=9
最後執行了3次i++.
第一次i++=4
第二次i++=5
第三次i++=6
2樓:匿名使用者
這是i++和++i的區別。舉個例子吧 x=1;y=0; y=x++那麼y=1; 同樣 x=1;y=0; y=++x;則y=2;所以++i是先++後賦值。i++是先賦值,後++
3樓:
i++的值是i ;++i返回的值是i+1;所以最後結果是3*i=9
4樓:ai看雪
3+3+3就是9嘛;
在c語言中,i++是先引用再自增,如果你輸出i的值的話,應該會是6
5樓:曠若英
這題硬要說就是後置++是先用再加,也就是先取出i的值計算,在表示式結束後再+1。建議樓主不要看類似一個表示式中有多個++,尤其是同一變數++的東西,因為這種行為在c標準中尚未定義,也就是i的運算結果和編譯器有關,i最後是4還是6誰也說不準。在實際程式設計中一定不要有這種表示式出現。
6樓:匿名使用者
i++取i之前的值,在++,所以是3+3+3=9
7樓:匿名使用者
這道題我也思考過 似乎很有問題
貌似與系統棧有關 三次都用了i的數值
8樓:匿名使用者
i=? 各位大神給看看 剛學 老師給的作業
9樓:匿名使用者
i=3; k=(i++)+(i++)+(i++);
相當於i=3; k=i+i+i; i++; i++; i++;
10樓:
分解開來就是:
i=3;
k=i+i+i;
i++;
i++;
i++;
你看k是幾?
c語言中,int i=3,k=(i++)+(i++)+(i++);為什麼執行結果是後k=9,i=6?求解。
11樓:匿名使用者
這裡涉及到運來算順序的
源問題。i++指先使用i的值,再將i加一。所以,k先等於三個i相加,結果是k=9。
i的值使用完畢後,再從第一個i++開始,對i加一,此時i=4;對第二個i++使i加一,此時i=5;最後對第三個i++使i加一,此時i=6。
12樓:丁家宜大寶
這個是因為(i++)不bai
就是以dui的值來算嗎?加法是從左zhi
至右dao每兩個和在一起計算,i++是算版完後再加權的吧樓主還要注意這個問題
i=5; (++i)+(++i)+(++i)=22; 因為是從左至右計算,++i是要先算的,因此前兩個(++i)統一算為7+7=14;再算最後一個14+8=22;
c語言程式設計 k=(i++)+(++i)+(++i)
13樓:匿名使用者
abc的值
bai和i的值當然不一樣,i++和++i都是du從左到右的順序計算zhi
的,daoi++先取值後相加,++i先相加後取內值,如a=++i就是先容相加後把值給a,a=i++就是先把值給a,然後再相加。所以兩次的值不一樣。
你計算的錯了,那個式子是(i++)+(++i)+(++i),帶括號的時候括號裡的是要被優先計算的,i的初始值是2,所以應該是3+4+5=12。第2段**a=i++的時候,先給值傳給a再相加,所以a=2,後面的b=++i和c=++i是先相加後給值,所以b=4,c=5,2+4+5=11。如果對++i和i++還不太清楚,給我發email吧,lefthands@vip.
qq.com
14樓:匿名使用者
i++是先賦值再加1,++i是先加1再賦值第一個k=3+4+4=10,i=4
第二個k=2+4+4=10,i=4
我是這麼認為,不知道對不對
好久前學的
15樓:匿名使用者
我知道,但這裡不是說一兩下就說清楚了,加我,我跟你細說
c語言的問題:int i=3; k=(i++)+(++i)+(i++);
16樓:
字首優先順序大於字尾
++,--運算子優先順序大於()
所以先是運算中間那個()裡面的++i,
i就變成4,然後兩個字尾同時執行i++。
字尾(i++)的值是還沒加1之前的值。
字首(++i)的值是加了1之後的值。
所以式子就是4+4+4=12
17樓:
k=(i++)+(++i)+(i++)---i=3k=(i++)+(++i)+3-------i=4k=(i++)+5+3-----------i=5k=5+5+3---------------i=6++i 自增後用於運算
i++ 運算後自增
我忘了是左序運算還是右序運算了,不過不管左還是右,對這題來說,結果是一樣的..^_^
18樓:
看看彙編吧,如果你懂彙編。
--------------
10: int i=3;
00401028 mov dword ptr [ebp-4],3
11: int k;
12: k=(i++)+ (++i)+(i++) ;
0040102f mov eax,dword ptr [ebp-4]
00401032 add eax,1
00401035 mov dword ptr [ebp-4],eax //i=4
00401038 mov ecx,dword ptr [ebp-4] //ecx=4
0040103b add ecx,dword ptr [ebp-4] //ecx=ecx+4=8
0040103e add ecx,dword ptr [ebp-4] //ecx=ecx+4=12
00401041 mov dword ptr [ebp-8],ecx //k=12
00401044 mov edx,dword ptr [ebp-4]
00401047 add edx,1 //第一個i++
0040104a mov dword ptr [ebp-4],edx
0040104d mov eax,dword ptr [ebp-4]
00401050 add eax,1 //第二個i++
00401053 mov dword ptr [ebp-4],eax
13: cout< 00401056 mov ecx,dword ptr [ebp-8] 00401032 add eax,1 i=4。 然後執行三個加。 ----------------------------------------- 注:如果你使用vc編寫的話。 可以在表示式前設定斷點, 然後執行到斷點,點右鍵, 選「go to dissamble」,然後上面 每一個彙編指令都可一步一步走, 19樓: (++i) 後 i = 4 然後就做三個i相加,4 + 4 + 4 = 12。 lz感興趣的話可以研究: k = (++i) + (++i) + (++i); 看看在linux下的gcc和vc的結果是不是相同。 20樓:誓死護飛兒 10: int i=3; 00401028 mov dword ptr [ebp-4],3 11: int k; 12: k=(i++)+ (++i)+(i++) ; 0040102f mov eax,dword ptr [ebp-4] 00401032 add eax,1 00401035 mov dword ptr [ebp-4],eax //i=4 00401038 mov ecx,dword ptr [ebp-4] //ecx=4 0040103b add ecx,dword ptr [ebp-4] //ecx=ecx+4=8 0040103e add ecx,dword ptr [ebp-4] //ecx=ecx+4=12 00401041 mov dword ptr [ebp-8],ecx //k=12 00401044 mov edx,dword ptr [ebp-4] 00401047 add edx,1 //第一個i++ 0040104a mov dword ptr [ebp-4],edx 0040104d mov eax,dword ptr [ebp-4] 00401050 add eax,1 //第二個i++ 00401053 mov dword ptr [ebp-4],eax 13: cout< 00401056 mov ecx,dword ptr [ebp-8] 00401032 add eax,1 i=4。 然後執行三個加。 ----------------------------------------- 注:如果你使用vc編寫的話。 可以在表示式前設定斷點, 然後執行到斷點,點右鍵, 選「go to dissamble」,然後上面 每一個彙編指令都可一步一步走, 21樓:匿名使用者 哦,怎麼我得出的結果是11啊! c語言中設i=3,j=4,k=i+++j, k,i,j分別等於多少? 22樓:金色潛鳥 int i=3,j=4; int k; k=i+++j; 按運bai算符優先順序,可du寫成zhi k=(i++) + j; i++ 是字尾加加,表dao達式裡用原值,出了表示式自增回1; 所以上面 答運算可寫成2個式子: k=(i) + j; i=i+1; 所以得: k=7 i=4 j=4 23樓:殘若惜雨 i++和++i的優先順序是相同的,因此按照從左到右的自然順序執行。i++,i為4,j為4,k為7 c語言中((j++||k++)&&i++)是什麼意思 24樓:12345額時代 是一條賦值語句,zhidao=左邊是變數k,右邊是表示式,操作方法如下: 1、早c語言中,i++的意思是先進行表示式運算,再進行自增運算。 2、從結果來看,把i++的運算過程拆分開,等效於i=i+1,可以看到運算結果是一致的。 3、但是在表示式運算過程中,i++會先進行表示式運算,然後才會進行自增運算。 4、根據執行結果可以看到b=j;賦值運算結束之後j=j+1,即j進行自增運算。 5、而++i的意思是先進行自增或者自減運算,再進行表示式運算。 6、通過運算結果可以發現,如果僅從i的值來看,++i和i++最終的i值是一樣的,都是i自增加了1.。 25樓:華夏沉默 j與k進行或運算,(若j不為0,則或運算的結果為1,或運算以後j自加1,k不變,因為j不為0就可判斷或運算結果為1,不需要對k判斷;若j為0,則或運算後,j和k的值都自加1。) j和k或運算的結果(0或者1)在與i進行與運算(若或運算的結果為0,則與運算的結果為0,i的值不進行自加1操作,因為0和任何數與都是0,不需要再對i判斷了;若前面或運算的值為1,則再與i與運算後,i的值自加1) 億華聯眾 你寫 時的編碼不正確,如果有中文有有可能出現亂碼 編碼問題,有的編碼不支援中文,在編寫時更改下原始檔的編碼即可,一般都是utf 8編碼。 小痞子 你在最後的那個函式裡 在沒有輸入之前呼叫了輸出函式printf 而a和b在為輸入之前 裡面的值是不確定的,也就是隨機的 夜黑黎 可能有漢字 陣列... k i i 按符號的優先順序,先計算 i,這時,i 5,再計算k i i,分子分母都是5,所以答案是1 這個和求值循序有關 c語法沒有規定運算子求值循序 除逗號運算子,邏輯運算子,條件運算子外 求值循序不同的編譯器是不一定相同的 所以表示式a b,可以理解為a加上b,也可以理解為b加上a,一般情況下... 那你得看看for迴圈執行過程了 第一步,執行i 0 第二步,判斷n!0,真就執行迴圈體 假就跳出第三步,執行i 你說第二次執行迴圈後,i 1,n 0,這樣,才執行到第二次迴圈的第二步,所以要接著執行i 當執行到第三次迴圈判斷n 0了,才跳出迴圈啊 這是因為i 在二次迴圈時 i 1 n 0 還不等於 ...C語言執行程式顯示為什麼有亂碼,c語言執行結果亂碼怎麼解決?
i 4 j 3 k 1,為什麼kii printf k d n nk輸出 k
C語言迴圈問題,為什麼for迴圈後i