第41章(1 / 3)

笑(二)實型變量

c語言中,實型變量分為單精度類型( float )和雙精度類型( double )兩種。如:

float a , b ; double m ;

在vc中,float 型數據在內存中占4個字節(32位),double型數據占8個字節。單精度實數提供7位有效數字,雙精度實數提供15~16位有效數字。實型常量不分float型和double型,一個實型常量可以賦給一個float 型或double型變量,但變量根據其類型截取實型常量中相應的有效數字。

注意:實型變量隻能存放實型值,不能用整型變量存放實型值,也不能用實型變量存放整型值。

(三)字符變量

字符變量用來存放字符常量,定義形式:

char 變量名;

其中關鍵字char定義字符型數據類型,占用一個字節的存儲單元。

例:char cr1,cr2; cr1=‘a’, cr2=‘b’;

將一個字符賦給一個字符變量時,並不是將該字符本身存儲到內存中,而是將該字符對應的ascii碼存儲到內存單元中。例如,字符′a′的ascii碼為65,在內存中的存放形式如下:0

由於在內存中字符以ascii碼存放,它的存儲形式和整數的存儲形式類似,所以c語言中字符型數據與整型數據之間可以通用,一個字符能用字符的形式輸出,也能用整數的形式輸出,字符數據也能進行算術運算,此時相當於對它們的ascii碼進行運算。

類型的自動轉換和強製轉換

當同一表達式中各數據的類型不同時,編譯程序會自動把它們轉變成同一類型後再進行計算。轉換優先級為:

char 《 int 《 float 《 double

即左邊級別“低“的類型向右邊轉換。具體地說,若在表達式中優先級最高的數據是double型,則此表達式中的其他數據均被轉換成double型,且計算結果也是double型;若在表達式中優先級最高的數據是float型,則此表達式中的其他數據均被轉換成float型,且計算結果也是float型。

在做賦值運算時,若賦值號左右兩邊的類型不同,則賦值號右邊的類型向左邊的類型轉換;當右邊的類型高於左邊的類型時,則在轉換時對右邊的數據進行截取。

除自動轉換外,還有強製轉換,表示形式是:

(類型)(表達式);例:(int)(a+b)

討論:當a值賦值為3.4,b值賦值為2.7,(int)(a+b)和(int)a+b的值分別為多少?

c運算符認識

c語言的運算符範圍很廣,可分為以下幾類:

、算術運算符:用於各類數值運算。包括加(+)、減(-)、乘(*)、除(/)、求餘(%)、自增(++)、自減(--)共七種。

、賦值運算符:用於賦值運算,分為簡單賦值(=)、複合算術賦值(+=,-=,*=,/=,%=)和複合位運算賦值(&=,|=,^=,》》=,《《=)三類共十一種。《=“” span=“”》

、逗號運算符:用於把若幹表達式組合成一個表達式(,)。

、關係運算符:用於比較運算。包括大於(》)、小於(《)、等於(==)、大於等於(=“”》=)、小於等於(《=)和不等於(!=)六種。《=“” span=“”》

、邏輯運算符:用於邏輯運算。包括與(&&)、或(||)、非(!)三種。

、條件運算符:這是一個三目運算符,用於條件求值(?:)。

、位操作運算符:參與運算的量,按二進製位進行運算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(《《)、右移(》》)六種。

8、指針運算符:用於取內容(*)和取地址(&)二種運算。

9、求字節數運算符:用於計算數據類型所占的字節數(sizeof)。

10、特殊運算符:有括號(),下標[],成員(→,。)等幾種。

另外,按參與運算的對象個數,c語言運算符可分為:單目運算符(如!)、雙目運算符(如+,-)和三目運算符(如?:)。

算術運算符和算術表達式

一、基本的算術運算符

(1)+(加法運算符或正值運算符,如2+5)。

(2)-(減法運算符或負值運算符,如4-2)。

(3)*(乘法運算符,如3*8)。

(4)/(除法運算符,如11/5)。

/的運算分為兩種情況:

a、“除”的左右兩邊都為整數時,所得結果必然是整數(注意:僅取整數部分,不是四舍五入)

比如:5/2的值為2,不是2.5,1/2的值為0。

b、“除”的左右兩邊至少有一個是實型數據(即小數)時,所得結果為實型數據。

比如:5/2.0的值為2.5,7.0/2.0的值為3.5.

(5)%(模運算符或稱求餘運算符,%兩側均應為整型數據,如9%7的值為2)。

需要說明的是:當運算對象為負數時,所得結果隨編譯器不同而不同,在vc中,結果的符號與被除數相同,比如:13%-2值為1,而-15%2值為-1。

二、算術表達式和運算符的優先級與結合性

算術表達式是用算術運算符和括號將運算量(也稱操作數)連接起來的、符合c語言語法規則的表達式。運算對象包括函數、常量和變量等。

在計算機語言中,算術表達式的求值規律與數學中的四則運算的規律類似,其運算規則和要求如下。

(1)在算術表達式中,可使用多層圓括號,但括號必須配對。運算時從內層圓括號開始,由內向外依次計算各表達式的值。

(2)在算術表達式中,對於不同優先級的運算符,可按運算符的優先級由高到低進行運算,若表達式中運算符的優先級相同,則按運算符的結合方向進行運算。

(3)如果一個運算符兩側的操作數類型不同,則先利用自動轉換或強製類型轉換,使兩者具有相同類型,然後進行運算。

三、自增自減運算符

作用:使變量的值增1或減1。

如:++i,--i (在使用i之前,先使i的值加1、減1)。 i++,i--(在使用i之後,使i的值加1、減1)。

(1)隻有變量才能用自增運算符(++)和自減運算符(--),而常量或表達式不能用,如10++或(x+y)++都是不合法的。

(2)++和--的結合方向是“自右向左“,如-i++,i的左邊是負號運算符,右邊是自增運算符,負號運算和自增運算都是“自右向左“結合的,相當於-(i++)。

在循環語句中常用到自增(減)運算符,在指針中也常用到該運算符,考生要弄清楚“i++”和“++i”及“i--”和“--i”的區別,特別弄清楚表達式的值和變量的值。

賦值運算符與賦值表達式一、賦值運算符與賦值表達式

賦值符號“=“就是賦值運算符,作用是將一個數據賦給一個變量或將一個變量的值賦給另一個變量,由賦值運算符組成的表達式稱為賦值表達式。一般形式為:

變量名=表達式

在程序中可以多次給一個變量賦值,每賦一次值,與它相應的存儲單元中的數據就被更新一次,內存中當前的數據就是最後一次所賦值的那個數據。

例:a=12;此表達式讀作“將10的值賦值給變量a”。

a、如果賦值號兩邊的運算對象類型不一致,係統會自動進行類型轉換,轉換的規則:將賦值號右邊表達式的值的類型轉換成賦值號左邊變量的類型,

例:int y=3.5;在變量y中最終存儲的是整數3。

b、可以將複製表達式的值再賦值給變量,形成連續賦值。

例如:x=y=25 是一個連續賦值表達式,x=y=25 等價於x=(y=25),所以表達式x=y=25 最終的值為25 。

二、複合的賦值運算符

在賦值運算符之前加上其他運算符可以構成複合賦值運算符。其中與算術運算有關的複合運算符是:+=,-=,*=,/=,%=。

兩個符號之間不可以有空格,複合賦值運算符的優先級與賦值運算符的相同。表達式n+=1等價於n=n+1,作用是取變量n中的值增1再賦給變量n,其他複合的賦值運算符的運算規則依次類推。

如求表達a+=a-=a*a 的值,其中a的初值為12 。

步驟:

(1)先進行“a-=a*a“運算,相當於a=a-a*a=12-144=-132 。(2)再進行“a+=-132“運算,相當於 a=a+(-132)==-264 。

逗號運算符和逗號表達式

在c語言中,逗號除了作為分隔符,還可以用作一種運算符----逗號運算符,用逗號運算符將幾個表達式連接起來,例如a=b+c,a=b*c等稱為逗號表達式。

一般形式為:

表達式1 ,表達式2 ,表達式3 ,…,表達式n

例:x=2,y=3,z=4

逗號表達式具有從左至右的結合性,即先求解表達式1,然後依次求解表達式2,直到表達式n的值。表達式n的值就是整個逗號表達式的值。上述的逗號表達式的值就是表達式z=4的值4.需要注意的是,逗號運算符是所有運算符中級別最低的。

例:有如下程序段:

main(){ int a=2,b=4,c=6,x,y; y=(x=a+b),(b+c); printf(“y=%d,x=%d”,y,x);}

程序顯示結果為:y=6,x=6

討論:將y=(x=a+b),(b+c);改為y=((x=a+b),b+c)的程序結果?

關係運算符和關係表達式一、 c語言中的邏輯值

c語言中的邏輯值隻有兩個:真(true)和假(flase)。用非零代表真,用零代表假。因此,對於任意一個表達式,如果它的值為零,就代表一個假值,如果它的值為非零,就代表一個真值。隻要值不是零,不管是正數,負數,整數,實數,都代表一個真值。例如-5的邏輯值為真。

二、邏輯表達式

“&&”和“||”的運算對象有兩個,故它們都是雙目運算符,而!的運算對象隻有一個,因此它是單目運算符。邏輯運算舉例如下:

(1)a&&b:當&&兩邊都為“真”時,表達式a&&b的值才是真。

值得注意的是:在數學中,關係式0

(2)a||b:當||兩邊有一個為“真”時,表達式a||b的值就是真。

(3)!a:表示取反,如果a為真,則!a為假,反之亦然。例如!-5的值就為0.

在c語言中,由&&或||組成的邏輯表達式,在某些特定情況下會產生“短路“現象。

(1)x && y && z ,隻有當x為真(非0)時,才需要判別y的值;隻有x和y都為真時,才需要去判別z的值;隻要x為假就不必判別y和z,整個表達式的值為0。口訣:“一假必假”。