Ⅰ 關於c語言的自加自減運算
具體分析:
首先須知: a++ 就是a先做其他運算,再做自加運算比如 a++*b a與b相乘5*8=40 然後a自加=6
++a 是a先做自加運算,再做其他運算,比如 ++a*b a先加得到7=6+1,然後再與b相乘,7*8=56
a--和--a也是同理。
然後自減的情況 a*b=7*8=56 然後a自減 7-1=6
然後a先自減 a=6-1=5 然後與b相乘 a*b=5*8=40
不知說明白嗎?
樓主須區分優先順序和自加減的情況,自加減的優先順序和單目運算相同。
其次,自加減操作情況有時不同,如題所見,須特別分析。
最後,自加減的情況一般很少參與運算,比如 d=++a+a++ 不太出現似乎。
Ⅱ C語言自增自減運算符
樓上說的對,單主要還是要看While的語句,才是循環條件,題目種的,do執行的b的±,while執行a的±,只看a就行,
循環一次a加1,加到0結束循環。
所以a的初值一定要是負數,才有可能加到0,不然死循環
-2可以循環2次,
Ⅲ C語言的自加自減運算符
這兩個都是未定義行為,因為(y++)+(y++)+(y++)裡面沒有順序點,所以你無法保證執行完第一個y++之後,y的值是否增加了,如果增加了,那麼第二個y++就會是6。
只有順序點才能確定一個副作用被實現,在這里,副作用就是確保y++之後,y加1。
下面的那個++y亦是同理。
至於什麼是順序點,可以參考這個:
C/C++語言定義(語言的參考手冊)明確定義了順序點的概念。順序點位於:
1. 每個完整表達式結束時。完整表達式包括變數初始化表達式,表達式語句,return語句的表達式,以及條件、循環和switch語句的控製表達式(for頭部有三個控製表達式);
2. 運算符 &&、||、?: 和逗號運算符的第一個運算對象計算之後;
3. 函數調用中對所有實際參數和函數名表達式(需要調用的函數也可能通過表達式描述)的求值完成之後(進入函數體之前)。
Ⅳ C語言自加自減問題~~~~
我舉個例子吧,你看看:
#include<stdio.h>
void
main()
{
int
i=2;
printf("%d,%d,%d,%d,\n",i++,++i,i,i++);
printf("%d\n",i);
}
首先,應該說明的是在不同的編譯環境中結果是不一樣的。
關於本段代碼在VC++6.0中的規則如下:
1、printf函數的執行順序是由右到左的
2、前自增運算符(++i)先加1,再使用i,此時i已經加了1;
3、後自增運算符(i++)先使用i,再加1,***注意這里是關鍵所在,VC++6.0後自增運算是要在整條語句結束以後才自加1的,(VC++6.0比較變態)***
所以:
printf("%d,%d,%d,%d,\n",i++,++i,i,i++);
從右往左運算:
i++得到2(i=2,後加1在整條語句執行完才進行,這里先記下)
i還是2
(i=2,原因見上一行)
++i得到3(i=3,先加1,後使用)
i++得到3(i=3,後加1在整條語句執行完才進行,這里先記下)
所以輸出結果為:3,3,2,2
然後計算剛才的兩次後自增運算後,i=5
printf("%d\n",i);
所以,結果是5
Ⅳ C語言中自加自減的問題
第一,y[j++]= x[i]; 等效於 y[j]= x[i]; j++; 前者只是比較緊湊的寫法,話說這也是後加的典型用法。
第二,y[j]-=1怎麼會有語法錯誤,它是把指針y指向的下標為j的元素的值賦為-1.這里的-號是指正負的負,而不是減法的意思。
第三,-1的意思只是做一個標記,在這個代碼的里的意思是表示數據結束了,後面沒有數據了的意思。具體看 for(i=0; y[i]>=0; i++) printf("%5.1f ",y[i]); 看看循環終止條件就應該明白了。不過這樣的做法挺垃圾,不推薦這么搞。
Ⅵ 什麼是C語言中關於自加自減
自增分前綴自增和後綴自增。無論是什麼,執行自增都有1個副作用,就是原來變數的值會增加1。例如int a=1;a++;或int a=1;++a;執行後,a==2。
而他們的區別就在於整個自增表達式的值不同。如(a++)的值是變數a自增以前的值,如上面例子,(a++)==1。而(++a)的值則是變數a自增以後的值,即(++a)==1+1==2。
結合性分為左結合和右結合,只有優先順序相同時才看結合性,例如表達式a+b*c+d-e*f,因為乘法優先順序別高於加減,所以a+(b*c)+d-(e*f),又因+-運算是左結合,所以只a+(b*c)再(a+(b*c))+d再(a+(b*c)+d)-(e*f),假如是右結合,就先d-(e*f),也就反過來了。這里其實看不出有什麼區別,怎麼樣結果都一樣。
但看到*p++運算就不同了,因為*與++運算同一優先順序,左結合結果就是(*p)++,右結合就是*(p++),這是區別很大的,書上還很多例子,你可以自己去看的。
強制轉換問題就是在可以轉換的情況下按要求轉換。如float x=9.9;
則(int)x==9。將實型轉為整型是採用截掉小數部分的做法。
例如還可以整型轉字元常量等等,例如,int a=97;則(char)a=='a',因為字元a的ASCLL碼為97。
()裡面即是你要轉換的類型。
Ⅶ c語言的自加自減問題。。。
結果是8沒錯,在這里採用的是do......while()的循環結構,至少執行一次,在程序開頭,分別給c和k賦了初值,使c='A',k=0,在執行循環語句時是這樣一個流程:
switch後的表達式(c++)先將'A'用來與case後的常量表達式結果比較後再自增使c='B',此時用於比較的是c自增前的值,滿足第一種情況,執行k++,然後跳出switch結構,執行k++,第一次循環結果為k=2,然後判斷c是否小於'G',第一次自增後的c的值為'B',小於'G',所以執行第二次循環,c++,將'B'拿去與case後的常量表達式判斷,c自增變為'C',此時滿足switch語句中的第二個條件,執行k--,又因為其後沒有終止語句,繼續執行k+=2,跳出switch結構,執行k++,此次循環結束結構為k=4,依次執行第三次循環,第四次循環,第五次循環,第六次循環,結果分別為7,2,21,8。
總的來說,在這個程序中與要注意的有以下幾點:
1.對自增自減的理解,切記諸如 i++ 一類的是先賦值,在自增,也就是先將原來的值用於參加運算,再使自身加一, i--是同一個道理,而++i ,--i 則剛好相反,是先自增,再賦值。
2.在switch結構中,每一個case後的常量表達式的值都應不同,不然就自相矛盾了,而至於在case語句後是否要跟一個終止語句,則要按情況來決定,如果沒有終止語句,則要依次執行下去直到遇見終止語句或語句末尾為止。
3.這個程序在自己估算結果時,只有兩種情況,因為在執行k=k%2時只有兩個結果,1和0,從這也只能得到兩個值,而真實結果也只能是這兩個值中的一個。
希望這能幫助你。
Ⅷ c語言中自加自減怎麼運算
自加++自減--運算的數據類型可以是Float和Double。
在c語言中,並不是所有變數都可以使用自增自減操作符;可以使用自增自減操作符的數據類型有:int、float、double 、char、long。
自增(++) :將變數的值加1,分前綴式(如++i) 和後綴式(如i++) 。前綴式是先加1再使用;後綴式是先使用再加1。
自減(--):將變數的值減1, 分前綴式(如--i)和後綴式(如i--)。前綴式是先減1再使用;後綴式是先使用再減1。
(8)c語言加到滿足條件進行自減運算擴展閱讀
自增與自減運算符還遵循以下規律:
1、可以用於整數類型byte、 short、 int、 long, 浮點類型float、 double,以及字元串類型char
2、在Java5.0及以上版本中,它們可以用於基本類型對應的包裝器類Byte、Short、Integer、 Long、 Float、 Double、Character
3、它們的運算結果的類型與被運算的變數的類型相同。
前自增自減操作優先順序大於賦值運算符(=),而後置自增自減操作的優先順序小於賦值運算符,後自增自減操作後表達式的值不會發生改變。指針的自增自減是將指針所指的地址加1或減1的操作。
Ⅸ C語言自加自減問題
計算:從右往左,並輸出到「緩沖區」。
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
另外自增 、自減 、還可能和編譯器有關系 。
(9)c語言加到滿足條件進行自減運算擴展閱讀:
後綴表達式 2級
postfix-expression [ expression ],數組下標運算。
postfix-expression ( argument-expression-list),函數調用,括弧內的參數可選。
postfix-expression . identifier,成員訪問,
postfix-expression -> identifier,成員訪問,->號之前應為指針。
postfix-expression ++,後綴自增
postfix-expression --,後綴自減
( type-name ) { initializer-list }
( type-name ) { initializer-list , } 復合初始化,C99後新增。
Ⅹ C語言自加自減運算
從左往右看,比如++m,就是m的值先自加1,再調用,而m++就是先調用m,再自加1. 舉個例子 #include <stdio.h> main() { int a=1,b=1; printf("%d,%d",++a,b++); //輸出就是2,1 } a的值先自加1,再調用,而b++就是先調用m。 --m m-- 同樣的意思,只不過是減法而已