c語言自增問題 關於c語言中自加自減的問題?

2023-05-13 01:35:06 字數 6131 閱讀 8887

1樓:匿名使用者

是這樣的,由於++有著最高的優先順序,第乙個++j,使得j=6;但是後面緊跟著的++j使j=7了,然後先進行乙個二元運算加法,得到結果14,然後再+(+j),從而得到的結果是22。在應用的過程中,最好不要使用,會歧義。

2樓:我本山中一布衣

你把整個**敲出來,這個q的值是21,除非在這個表示式前還有個++

3樓:匿名使用者

最好不要這樣使用自增,各版實現不一樣,有歧義。

關於c語言中自加自減的問題?

4樓:韶光幻景

如果是a--,就是先輸出a的值,再對a進行「--的操作。

如果是--b,就是先把b的值進行「--的操作以後,再輸出b的值。

int a,b;a=b=5;

printf("%d %d",a--,b);

printf("%d %d",a--,b);

printf("%d %d",a--,b);

printf("%d %d",a--,b);

printf("%d %d",a--,b);

第一行:第乙個是a--,先輸出a,此時a是5,輸出5,再a--,a是4(儲存在記憶體中沒有輸出)。然後對b進行--操作後b是4,再輸出此時的b所以第一行輸出5和4

第二行:a此時是4,輸出4,--操作後a是3;--操作b後,b是3,輸出b,所以第二行輸出4和3。

第三四五行同理。

手打望,謝謝,有不明白的可以繼續追問。祝樓主生活愉快。

c語言中可以使用自增和自減的資料型別是哪些?

5樓:娛樂小八卦啊

自加++自減--運算的資料型別可以是float和double。

在c語言中,並不是所有變數都可以使用自增自減操作符;可以使用自增自減操作符的資料型別有:int、float、double 、char、long。

自增(++將變數的值加1,分字首式(如++i) 和字尾式(如i++)字首式是先加1再使用;字尾式是先使用再加1。

自減(--將變數的值減1, 分字首式(如--i)和字尾式(如i--)字首式是先減1再使用;字尾式是先使用再減1。

c語言的自增自減問題

6樓:勿忘心安

計算:從右往左,並輸出到「緩衝區」。

1、緩衝區是一堆疊。

2、第一步:處理後面的「i--」8進入緩衝區,i=7。緩衝區:8 <-指標)

第二步:處理「i++」7進入緩衝區,i=8。

緩衝區:7 8<-第三步:處理」--i「。

8進入緩衝區,i=7.緩衝區:8 7 8第四步:

處理「++i」 先自增1,然後8進入緩衝區,i=8 .緩衝區: 8 8 7 8

3、輸出緩衝區資料(棧規則):8 8 7 8另外自增 、自減 、還可能和編譯器有關係 。

7樓:小雲小冉

這裡首先說一句,你這種用法應該是不合法的,至少是很不可取的。因為像+、-這類算術運算子c語言並未規定運算元的求值順序,在不同的編譯器上,有可能先求做運算元,也有可能先求右運算元。所以建議不要採用這種不確定的式子。

你這裡是先求左運算元,也就是先求++n表示式的值,因為是字首自增,表示式(左運算元)值為6,此時n也變為6.然後求右運算元值,即表示式n++;的值,因為是字尾自增,所以表示式的值是6,因此第二運算元的值是6,因此結果是36.之後n變為7.

8樓:匿名使用者

scanf輸入6[x=6], x>5成立, 緊接著無條件執行x++[x=7], 由於前面條件滿足, printf輸出7

scanf輸入4[x=4], x>5不成立, 緊接著無條件執行x++[x=5], 由於前面條件不滿足, printf輸出5, 執行x--[x=4]

因此輸入6時得到輸出7; 輸入4時得到輸出5

9樓:已存在這個名字

輸入6的時候,滿足if語句,x+1,輸出7,程式結束;

輸入4的時候,不滿足if語句,x+1,輸出5,x-1,程式結束。

10樓:傻仔青蛙

++在前面表示先進行變數自增,再執行算式,所以m=++i,先執行++i,i變為9,再賦值給m;

在後面表示先進行算式,再執行變數自增,所以n=j++,先執行n=j,n被賦值為10,再j自增為11

11樓:匿名使用者

++前,表示先自加,後運算。

後++,表示先運算,後自加。

所以,m=++i;先執行自加,即i=i+1;得i=9;

再運算,m=i;得m=9;

n=j++;先運算,即n=j;得n=10;

再自加,即j=j+1;得j=11;

結果就是:i=9,j=11,m=9,n=10.

12樓:匿名使用者

有乙個簡單的記憶方法,++在前,就是先自增,i在後,就是自增以後再給值;相反,i在前,就是先給出i的值,++在後,就是把值給出來以後再自增。

m=++i; i先自增,自增以後為9,然後把9給mn=j++;先把j的值10給n,然後再自增,j變成了11所以得結果。

13樓:看灰過來了

把自增或者自減表示式作為函式引數,本身就應該被避免的,因為不同的編譯系統,在計算的時候,方法並不統一。例如;

i=1;c=fun(i,++i);

當從左向右計算,那就是c=fun(1,2);

要是從右向左計算,就是c=fun(2,2);

這類問題不必深究,而是應該在呼叫函式之前,將實參的值給它確定了,然後再作為實參去呼叫函式。

14樓:唐博

第一段**:

i是先增加i的值,然後使用。

p=f(i,++i); 是先執行++i,後進行函式呼叫。因為執行了++i以後,i的值已經變成了3,所以相當於p=f(3,3);

你可以在函式f裡面把a和b的值列印出來,你會發現a和b都是3.

第二段**:

i++是先使用i的值,然後把i的值加1.

所以相當於先執行p=f(2,2);

執行之後,把i的值變成3.答案應該是0.

我懷疑你們老師的課件寫錯了,建議你去問問他。

15樓:windy笨笨狗

主要自增自減問題,方面你記憶,給個方法。

x++表示式的值從左到右看x的位置,此時x在++左,還沒有++,故 x++表示式的值就是x值。

相反++x,x在++右邊,表示式的值即x+1的值但是不管哪種,只要執行完了,x的值就+1

x--,x一樣。

故: 6時: if(6>5) ,輸出 74時: if(4>5)不滿足, 執行x--,但是此時x已經執行了一遍++,故x在--前為5

x--表示式的值 為5

16樓:錢柯偉有錢

這個問題以前我也不懂,現在會了。不懂確實很煩人。首先,i=8,m=++i,前置是先+1,再取值,那麼m=9,而此時的i就是+1之後的運算結果,i=9.

j=10,n=j++.在後,就是先取值,再+1;那麼n先取值就是的值就是j+1後的值,j=11.

c語言自加自減的問題

17樓:匿名使用者

1、c語言中,後置自增(自減)是在執行完所在語句後,變數的值再自增(自減)。

2、舉例說明如下:

int num=0, s=0;

while(num++<3)

第1次執行while時,num=0,第1次執行完while後,num=1,此時,s=0+1=1

第2次執行while時,num=1,第2次執行完while後,num=2,此時,s=1+2=3

第3次執行while時,num=2,第3次執行完while後,num=3,此時,s=3+3=6

第4次執行while時,由於num=4>3,所以推出迴圈,最後s=6

18樓:匿名使用者

你要知道「++在變數前後的區別。

在前,比如「++x",是先將自增,再賦值,那麼n = x)+(x)就是4+5 = 9

然後,「x--"就是先賦值再自減,那麼剛剛經過n = x)+(x)後,x=5,帶入m=(x--)x--)還是等於9。

我覺得答案錯了,不要迷信答案,你自己到vc或者turbo c上跑一下不就解決了。

19樓:

因為++x是先把x自加1,然後再運算。第一次++x,x=4,第二次++x,x=5;然後n=x+x,n=5+5;

因為x--是先運算再自減1,所以m=5+5;m=10

20樓:匿名使用者

他這個是x變數的儲存問題。先看。

n = x)+(x);

從右至左,先算++x,x=4,這裡x在暫存器裡的值是4,再算++x,x=5。

注意,關鍵點來了,那這時候,n是等於4+5嗎,不是的。

在進行加法時,a+b,暫存器會在得到a,b的值以後才會開始加法計算,現在,a,b的位址都指向x,當最後x=5時,實際上把a的值也做了改變,變成了5,千萬不要想當然認為有乙個臨時變數來儲存開始x=4的值,沒有的。所以結果自然是x+x = 10

同理到x--

c語言自增自減? 50

21樓:自我程式設計

在表示式裡,像題目這種++,在變數前面就是先自增自減再取變數值。在變數後面先取變數值再自增自減。

比如:j=i++;意思就是先取i的值賦值給j,以後i再自增。後面**也是這個意思。你可用這個思路跟著**走一遍。

22樓:abchhh是我

i++和++i都是c語言裡的自增,但是它們自增的順序不同。++i表示,i自增1後再參與其它運算,而i++ 則是i參與運算後,i的值再自增1。

第4行先賦值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=7;j不變還是6第行與第行同理。

i-一次1輸出6,j也是6,之後i再減1次=5;

最後2行道理也是這樣留作樓主思考吧,其實printf最好不要放計算步驟,容易忽略的。

不懂歡迎追問。

c語言自增自減問題

23樓:俞西初琲瓃

i=5;

應該是a=5吧?

x=(+a)+(a)+(a);

這種問題沒有必要分析的。在不同的編譯系統下,答案不一樣,在vc++下,答案是24。

24樓:伊蕊那拉若騫

很直接了當的告訴你,這個無意義的運算在不同的編譯器上可能會有兩種不同的結果。

都已經告訴你了。

有從左往右,也有從右往左,難道還不明白嗎?

這取決於編譯器。

此類問題是毫無意義的。

因為[像你這樣公式的輸出]

他的所輸出的值取決於你用什麼樣的編譯器]~你還不明白那就真是說不通了,只能說:無意義。

25樓:匿名使用者

這種**可移植性很差,因為每個編譯器的解釋不太一樣,gcc裡根本編譯不過。

26樓:匿名使用者

這種題目就是回字有幾種寫法,毫無意義。

如果按照c++的語意,答案應該是22.但其中又存在編譯優化或者編譯器不遵守規範,可能導致結果是24.

對於這種不確定而且無意義的題目,我們只需要確定其考點在於++的優先順序和返回值的語意,答案隨著編譯和優化是不定的。

答案24的由來:

t& operator++(

t operator+(const t&a)

t o=5;

按照語意:o(6).operater+(

t(14).operator+(o(8))=22

C語言自加問題,C語言 陣列 字元陣列 自加問題

字尾加加是先計算表示式再自加,k i i 對於第乙個i來說,其表示式是i i 對於第2個i來說其表示式是i i,因此先計算i i得到6,再計算第乙個i 得到4,再計算第2個i 得到5,最後i的值為5,k的值為6。後自增i i是在表示式完成運算才進行自加的,而先加 i則相反,是先自加,後完成,所以k ...

請問C 語言中前自增和後自增的區別

for int a 1 a 5 a 先a 1 在判斷迴圈.for int a 1 a 5 a 先判斷迴圈,在a 1 總體來說,在一行表示式中 前 他高於其他運算子的優先順序,所以先算這個.後 反之 c 中,x和x 就是前自增和後自增 有什麼區別。比如x y應該怎麼算?其實應該這樣問,在vc6中有什麼...

新手求教C語言自增自減問題

對於 i 與 i 這種表示式,不同的編譯器或編譯環境可能各處不同的解釋 無特殊癖好的程式設計師程式設計都會加上括號,防止歧義。這是錯的 正確的說法是,c不同的compiler對乙個函式的引數有不同的運算順序 所以不要把會對變數本身造成影響的 作為乙個函式的引數最後 這個問題沒有肯定的答案,你需要把i...