c語言程式 i 3,k(iii為什麼k

2021-09-08 10:24:06 字數 6081 閱讀 3824

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)

C語言程式出錯,C語言程式沒有錯,但為什麼總顯示乙個錯誤

這個 需要重寫。比如函式putin2中,宣告的a是char型字元,後面scanf中卻要讓它接收乙個姓名字串,這樣的錯誤說明 構思很混亂,不是略改一下就能解決的 putin2函式中 char a 應該為乙個字串改為char a 100 字串a應該與運動員名字比較,也就是a與結構體的name2欄位比較。...

C語言程序為什么不能執行,C語言程式為什麼不能執行

include void main include void main 注意,你有變數未定義。並且有不少語法錯誤。比如printf 園的面積 2f n m 還有。儘量減少程式編幅。祝你學習愉快 付費內容限時免費檢視 回答請稍等哦 提問回答 c語言無法執行可能是因為執行期錯誤。這是指可執行程式執行過程...

c語言中為什麼相等xi443i

xone i xtwo i 4 i 4 一維陣列 copy下標轉變為二維陣列下標 xtwo i 4 3 i 4 xone i 4 4 3 i 4 二維陣列下標轉變為一維陣列下標 不知你說的啥意思,但那二者肯定不恆相等,除非x中全是同乙個數。c語言問題 int i,x 3 4 i x 1 1 是什麼意...