『壹』 關於c語言的自加問題
你是在用turbo C2.0系統嗎?
前綴++和後綴++運算是有基本運算規則:
前綴++是:先算後取,即先對運算對象進行加1運算,再取運算對象的當前值作為表達式計算結果,所以 y=++i; 在i的初值為3時,表達式運算後y的內容為4,i的內容為4。
後綴++是:先取後算,即先取運算對象的當前值作為表達式計算結果,然後對運算對象進行加1運算,所以 y=i++; 在i的初值為3時,表達式運算後y的內容為3,i的內容為4。
當在一個表達式中存在多個單目運算,特別是對同一個變數的單目運算時,初學時可能會覺得結果怪異,但實際上在Turbo C系統中的運算也是非常有規律的,即前綴單目運算的優先順序高於後綴單目運算,所以整個表達式的運算過程是:
1、進行所有的前綴單目運算
2、取所有單目運算對象的當前值作為表達式的計算結果
3、進行所有的後綴單目運算
你所說的兩個題目的運算過程是:
1、j=(i++)+(i++)
全部後綴運算,先取後算,取單目運算對象的當前值做表達式的計算結果
3 3
進行加1運算
i=4; i=5;
所以計算結果 j=6; i=5
2、j=(i++)+(++i);
先進行前綴運算
i=4
取所有單目運算對象的當前值作為表達式的計算結果
4 4
進行後綴運算
i=5
所以計算結果是 j的計算結果是4+4=8 i的內容為5
『貳』 c語言自加計算
自後向前(右-》左)方向計算。即11+11+13+13=48
同理
int n=10,m=5;
a=(m++)+(++n)+(n++)+(++m);
結果為34(6+10+12+6=34)
『叄』 關於c語言的自加運算
我的編譯器運行以後確實是5,4,樓主是不是寫錯了,你的編譯環境是什麼,編譯器不同,有時候也得出不同結果.我用的win-tc
類似的問題,我以前搞不懂也常常問老師,老師說,實際在編程中,很少會用到這樣的連續自加,編程最終都會解決實際問題,工程,項目,所以樓主不用在這類問題上傾注太多的精力,老師當時也是這樣對我說的,但前提是你希望在編程道路上繼續走下去.
『肆』 c語言中自加自減問題 i++,++i有什麼區別,怎麼計算,麻煩舉幾個簡單易懂的例子。
比如現在i的值是20, 那麼i++所在語句A(A即為i++之前最後一個分號和之後第一個分號之間那條語句)在使用i時i都等於20(即把A中所有i++用i替換),執行完後額外執行一條i加上1的語句。而++i所在語句B執行前,先額外執行一個i=i+1,然後把B中的++i用i替換掉就好。
【代碼M;
a=(i++)*2;
代碼N;】
等價於
【M;
a=i*2;
i=i+1;
N;】
...........................
【M;
a=(++i)*2;
N;
】
等價於
【M;
i=i+1;
a=i*2;
N;】
『伍』 關於C語言中的自加運算
後者還是0 1 2 3 4,自加在這里++i和i++是一樣的,for循環是這樣運行的:i=0時,檢驗i是不是<5,如果是進入循環體輸入了i也就是0,然後執行f最後一個一個語句i++或者++i,獲得新的i,繼續循環,所以這里++i和i++是一樣的,都相當於i+1。
如果說表達式是int a,b,c,d;
a=b=0;
c=a++; //相當於c=a;a++;結果是c的值為0;a的值為1
d=++b; //相當於b++;d=b;結果是d的值為1;b的值為1
你所說的問題中不涉及到先加後用還是先用後加的問題。
我水平有限,希望你聽懂了,謝謝,好好學習,天天向上。
『陸』 C語言中自加的用法是怎樣的
你好!!!
i=0;
while(s1[i]!='\0')
i++;
中的i++改成++i結果就是一樣的,
首先我們分析一下幾次循環的過程吧:
第一次:i=0,循環while(s1[0]!='\0'),然後i++,注意i++是後加操作,就是想使用i的現在的值,然後再加一,但是這里我們在I++這一步並沒有使用i的值,所以一旦i++指向完畢後i的值就是1了,然後再循環while(s1[1]!='\0'),然後i++,後面的依次類推、、、、、
雖然i++改成++i結果是一樣的,但是對於編譯器來說是不一樣的我們還是把題目修改一下再說那裡不同:
i++,改成p=i++,第一次循環即i=0;那麼執行p=i++的是先使用i的值的,然後再加一,即p=0,i=1,而要是改成p=++i,那麼p=1,i=1,
當編譯器執行p=i++的執行,先要保存i的值(即保留現象等一些工作都的有編譯器來做),然後把此時i的支付給p,然後利用剛才i保留的值在加一
但是要是執行p=++i,編譯器就不需要做些保留現象等工作,就是直接把i的值加一,然後把i的值賦給p
由此可以看出i++,比++i所作的工作要多,開銷要大一點,但是我們平時寫循環的時候都寫成這樣:for(i=0;i<m;i++)而不是
for(i=0;i<m;++i),其實後面的循環的效率比前面的高。
『柒』 C語言的,自加,和自減演算法,怎麼算我發一個代碼,大神幫我看看
int
a=x++;
//a此時知的值是6,因為x++是運算完在使x+1,執行完道此段代碼後x的值是7
printf("%d",x++);
//先把x的值輸出回(7)後,答x在+1,執行完此段代碼後x的值是8
//x++是最後使x的值加1,++x是先使x的值加1,然後在進行其他計算。
『捌』 C語言 自加運算符
C語言中區分前自增與後自增,它們都有副作用,尤其是後自增。
前自增可能更好一點,它不產生臨時變數,效率更高一些。
++y相當於:y=y+1;在變數的使用之前先自增。
y++相當於:y; 其它語句... y=y+1;也就是使用它時,它的值不變,在其使用之後的某一時刻但在再次使用它前其值加一。而且不同的編譯器不一定有一致的實現行為。
a=(y++)+(y++)+(y++) 這是一條語句,通常的編譯器實現會將此語句一次性掃描完成。這種情況下,y++會保持其值不變,此語句完成後,將y的值遞增3次。
b=(++y)+(++y)+(++y)這也是一條語句,編譯器掃描完此語句後,先將y遞增3次,再作+運算,將運算結果賦予b,此時b應該為24。 但是不同的系統及編譯器不一定這樣實現,還有可能y依次遞增,其結果是21。
『玖』 c語言中的自加問題:q=(++j)+(++j)+(++j)
驗證就是22.想了一會,發表下自己的看法。
我覺得多個自增在一起,只允許配對原則。
也就是說每次只有兩個自增的時候才能滿足先算括弧;
先說q=(++j)+(++j)+(++j)=((++j)+(++j))+(++j)
此時第一個和第二配對,先算括弧自增,j=7,在求和為7+7=14。
此時就是14在與(++j)配對。先算括弧自增j=8,在求和得14+8=22.
如果是4個(++j),則22與(++j)配對,先算括弧自增j=9,在求和得22.+9=31;
5個就是41,
6個就是52…………
同理可以推出N個的情況,初值為a,則N個前自增後的和為(a+2)*N+(0.5)*(N-1)(N-2);
(這個公式推了我好久)
如果正確的話就給分;