譚浩強(qiáng)-經(jīng)典-c++(第三版)教程-第2章課件(ppt)_第1頁
譚浩強(qiáng)-經(jīng)典-c++(第三版)教程-第2章課件(ppt)_第2頁
譚浩強(qiáng)-經(jīng)典-c++(第三版)教程-第2章課件(ppt)_第3頁
譚浩強(qiáng)-經(jīng)典-c++(第三版)教程-第2章課件(ppt)_第4頁
譚浩強(qiáng)-經(jīng)典-c++(第三版)教程-第2章課件(ppt)_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第第2章章 數(shù)據(jù)類型與表達(dá)式數(shù)據(jù)類型與表達(dá)式2.1 C+的數(shù)據(jù)類型的數(shù)據(jù)類型2.2 常量常量2.3 變量變量2.4 C+的運(yùn)算符的運(yùn)算符2.5 算術(shù)運(yùn)算符與算術(shù)表達(dá)式算術(shù)運(yùn)算符與算術(shù)表達(dá)式2.6 賦值運(yùn)算符與賦值表達(dá)式賦值運(yùn)算符與賦值表達(dá)式2.7 逗號運(yùn)算符與逗號表達(dá)式逗號運(yùn)算符與逗號表達(dá)式計(jì)算機(jī)處理的對象是數(shù)據(jù),而數(shù)據(jù)是以某種特定的計(jì)算機(jī)處理的對象是數(shù)據(jù),而數(shù)據(jù)是以某種特定的形式存在的(例如整數(shù)、浮點(diǎn)數(shù)、字符等形式)。形式存在的(例如整數(shù)、浮點(diǎn)數(shù)、字符等形式)。不同的數(shù)據(jù)之間往往還存在某些聯(lián)系(例如由若干不同的數(shù)據(jù)之間往往還存在某些聯(lián)系(例如由若干個(gè)整數(shù)組成一個(gè)整數(shù)數(shù)組)。數(shù)據(jù)結(jié)構(gòu)指的是數(shù)據(jù)

2、個(gè)整數(shù)組成一個(gè)整數(shù)數(shù)組)。數(shù)據(jù)結(jié)構(gòu)指的是數(shù)據(jù)的組織形式。例如,數(shù)組就是一種數(shù)據(jù)結(jié)構(gòu)。不同的組織形式。例如,數(shù)組就是一種數(shù)據(jù)結(jié)構(gòu)。不同的計(jì)算機(jī)語言所允許使用的數(shù)據(jù)結(jié)構(gòu)是不同的。處的計(jì)算機(jī)語言所允許使用的數(shù)據(jù)結(jié)構(gòu)是不同的。處理同一類問題,如果數(shù)據(jù)結(jié)構(gòu)不同,算法也會不同。理同一類問題,如果數(shù)據(jù)結(jié)構(gòu)不同,算法也會不同。例如,對例如,對10個(gè)整數(shù)排序和對包含個(gè)整數(shù)排序和對包含10個(gè)元素的整型數(shù)個(gè)元素的整型數(shù)組排序的算法是不同的。組排序的算法是不同的。C+可以使用的數(shù)據(jù)類型如下:可以使用的數(shù)據(jù)類型如下:2.1 C+的數(shù)據(jù)類型的數(shù)據(jù)類型數(shù)據(jù)類型數(shù)據(jù)類型基本類型基本類型整型整型短整型短整型(short int

3、)整型整型(int) 長整型長整型(long int)字符型字符型(char)浮點(diǎn)型浮點(diǎn)型 單精度型單精度型(float)雙精度型雙精度型(double)長雙精度型長雙精度型(long double)布爾型布爾型(bool)構(gòu)造類型構(gòu)造類型枚舉類型枚舉類型(enum)數(shù)組類型數(shù)組類型結(jié)構(gòu)體類型結(jié)構(gòu)體類型(struct)共用體類型共用體類型(union)類類型類類型(class)指針類型指針類型引用類型引用類型空類型空類型(void)布爾型就是邏輯型,空類型就是無值型。布爾型就是邏輯型,空類型就是無值型。C+的數(shù)據(jù)包括常量與變量,常量與變量都具有類的數(shù)據(jù)包括常量與變量,常量與變量都具有類型。由以

4、上這些數(shù)據(jù)類型還可以構(gòu)成更復(fù)雜的數(shù)據(jù)型。由以上這些數(shù)據(jù)類型還可以構(gòu)成更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。例如利用指針和結(jié)構(gòu)體類型可以構(gòu)成表、樹、結(jié)構(gòu)。例如利用指針和結(jié)構(gòu)體類型可以構(gòu)成表、樹、棧等復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。棧等復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。C+并沒有統(tǒng)一規(guī)定各類數(shù)據(jù)的精度、數(shù)值范圍和并沒有統(tǒng)一規(guī)定各類數(shù)據(jù)的精度、數(shù)值范圍和在內(nèi)存中所占的字節(jié)數(shù),各在內(nèi)存中所占的字節(jié)數(shù),各C+編譯系統(tǒng)根據(jù)自己編譯系統(tǒng)根據(jù)自己的情況作出安排。書中表的情況作出安排。書中表2.1列出了列出了Visual C+數(shù)值數(shù)值型和字符型數(shù)據(jù)的情況。型和字符型數(shù)據(jù)的情況。說明:說明:(1) 整型數(shù)據(jù)分為長整型整型數(shù)據(jù)分為長整型(long int)、一般整型一

5、般整型(int)和和短整型短整型(short int)。在在int前面加前面加long和和short分別表分別表示長整型和短整型。示長整型和短整型。(2) 整型數(shù)據(jù)的存儲方式為按二進(jìn)制數(shù)形式存儲,整型數(shù)據(jù)的存儲方式為按二進(jìn)制數(shù)形式存儲,例如十進(jìn)制整數(shù)例如十進(jìn)制整數(shù)85的二進(jìn)制形式為的二進(jìn)制形式為1010101,則在,則在內(nèi)存中的存儲形式如圖內(nèi)存中的存儲形式如圖2.1所示。所示。圖圖2.1 (3) 在整型符號在整型符號int和字符型符號和字符型符號char的前面的前面,可以加可以加修飾符修飾符signed(表示表示“有符號有符號”)或或unsigned(表示表示“無符號無符號”)。如果指定為。如

6、果指定為signed,則數(shù)值以補(bǔ)碼形則數(shù)值以補(bǔ)碼形式存放,存儲單元中的最高位式存放,存儲單元中的最高位(bit)用來表示數(shù)值的用來表示數(shù)值的符號。如果指定為符號。如果指定為unsigned,則數(shù)值沒有符號,全則數(shù)值沒有符號,全部二進(jìn)制位都用來表示數(shù)值本身。例如短整型數(shù)據(jù)部二進(jìn)制位都用來表示數(shù)值本身。例如短整型數(shù)據(jù)占兩個(gè)字節(jié)占兩個(gè)字節(jié) ,見圖,見圖2.2。圖圖2.2有符號時(shí),能存儲的最大值為有符號時(shí),能存儲的最大值為215-1,即,即32767,最,最小值為小值為-32768。無符號時(shí),能存儲的最大值為。無符號時(shí),能存儲的最大值為216-1,即即65535,最小值為,最小值為0。有些數(shù)據(jù)是沒有負(fù)

7、值的,可。有些數(shù)據(jù)是沒有負(fù)值的,可以使用以使用unsigned,它存儲正數(shù)的范圍比用它存儲正數(shù)的范圍比用signed時(shí)時(shí)要大一倍。要大一倍。(4) 浮點(diǎn)型浮點(diǎn)型(又稱實(shí)型又稱實(shí)型)數(shù)據(jù)分為單精度數(shù)據(jù)分為單精度(float)、雙精雙精度度(double)和長雙精度和長雙精度(long double)3種,在種,在Visual C+ 6.0中,對中,對float提供提供6位有效數(shù)字,對位有效數(shù)字,對double提提供供15位有效數(shù)字,并且位有效數(shù)字,并且float和和double的數(shù)值范圍不的數(shù)值范圍不同。對同。對float分配分配4個(gè)字節(jié),對個(gè)字節(jié),對double和和long double分配分

8、配8個(gè)字節(jié)。個(gè)字節(jié)。(5) 表中類型標(biāo)識符一欄中,方括號表中類型標(biāo)識符一欄中,方括號 包含的部包含的部分可以省寫,如分可以省寫,如short和和short int等效,等效,unsigned int和和unsigned等效。等效。常量的值是不能改變的,一般從其字面形式即可判常量的值是不能改變的,一般從其字面形式即可判別是否為常量。常量包括兩大類,即數(shù)值型常量別是否為常量。常量包括兩大類,即數(shù)值型常量(即常數(shù)即常數(shù))和字符型常量。如和字符型常量。如12,0,-3為整型常量,為整型常量,4.6,-1.23為實(shí)型常量,包含在兩個(gè)單撇號之間的為實(shí)型常量,包含在兩個(gè)單撇號之間的字符為字符常量,如字符為字

9、符常量,如a,x。這種從字面形式即可這種從字面形式即可識別的常量稱為識別的常量稱為“字面常量字面常量”或或“直接常量直接常量”。2.2 常量常量 2.2.1 什么是常量什么是常量(1) 一個(gè)整數(shù),如果其值在一個(gè)整數(shù),如果其值在-32768+32767范圍內(nèi),范圍內(nèi),認(rèn)為它是認(rèn)為它是short int型,它可以賦值給型,它可以賦值給short int型、型、int型和型和long int型變量。型變量。(2) 一個(gè)整數(shù),如果其值超過了上述范圍,而在一個(gè)整數(shù),如果其值超過了上述范圍,而在-2147483648+2147483647范圍內(nèi),則認(rèn)為它是范圍內(nèi),則認(rèn)為它是long int型,可以將它賦值

10、給一個(gè)型,可以將它賦值給一個(gè)int或或long int型變量。型變量。(3) 如果某一計(jì)算機(jī)系統(tǒng)的如果某一計(jì)算機(jī)系統(tǒng)的C+版本(例如版本(例如Visual C+)確定確定int與與long int型數(shù)據(jù)在內(nèi)存中占據(jù)的長型數(shù)據(jù)在內(nèi)存中占據(jù)的長度相同,則它們能夠表示的數(shù)值的范圍相同。因此,度相同,則它們能夠表示的數(shù)值的范圍相同。因此,一個(gè)一個(gè)int型的常量也同時(shí)是一個(gè)型的常量也同時(shí)是一個(gè)long int型常量,可型常量,可以賦給型或以賦給型或long int型變量。型變量。(4) 常量無常量無unsigned型。但一個(gè)非負(fù)值的整數(shù)可以型。但一個(gè)非負(fù)值的整數(shù)可以賦值給賦值給unsigned整型變量,

11、只要它的范圍不超過變整型變量,只要它的范圍不超過變量的取值范圍即可。量的取值范圍即可。數(shù)值常量就是通常所說的常數(shù)。在數(shù)值常量就是通常所說的常數(shù)。在C+中,數(shù)值常中,數(shù)值常量是區(qū)分類型的,從字面形式即可識別其類型。量是區(qū)分類型的,從字面形式即可識別其類型。1. 整型常量整型常量(整數(shù))的類型整數(shù))的類型在上一節(jié)中已知道:在上一節(jié)中已知道: 整型數(shù)據(jù)可分為整型數(shù)據(jù)可分為int,short int,long int以及以及unsigned int,unsigned short,unsigned long等類別。整型常量也分為以上等類別。整型常量也分為以上類別。為什么將數(shù)值常量區(qū)分為不同的類別呢?因類

12、別。為什么將數(shù)值常量區(qū)分為不同的類別呢?因?yàn)樵谶M(jìn)行賦值或函數(shù)的參數(shù)虛實(shí)結(jié)合時(shí)要求數(shù)據(jù)類為在進(jìn)行賦值或函數(shù)的參數(shù)虛實(shí)結(jié)合時(shí)要求數(shù)據(jù)類型匹配。型匹配。那么,一個(gè)整型常量怎樣從字面上區(qū)分為以上的類那么,一個(gè)整型常量怎樣從字面上區(qū)分為以上的類別呢?別呢?2.2.2 數(shù)值常量數(shù)值常量一個(gè)整型常量可以用一個(gè)整型常量可以用3種不同的方式表示:種不同的方式表示: (1) 十進(jìn)制整數(shù)。如十進(jìn)制整數(shù)。如1357,-432,0等。在一個(gè)整型常等。在一個(gè)整型常量后面加一個(gè)字母量后面加一個(gè)字母l或或L,則認(rèn)為是則認(rèn)為是long int型常量。型常量。例如例如123L,421L,0L等,這往往用于函數(shù)調(diào)用中。等,這往往用

13、于函數(shù)調(diào)用中。如果函數(shù)的形參為如果函數(shù)的形參為long int,則要求實(shí)參也為則要求實(shí)參也為long int型,此時(shí)用型,此時(shí)用123作實(shí)參不行,而要用作實(shí)參不行,而要用123L作實(shí)參。作實(shí)參。(2) 八進(jìn)制整數(shù)。在常數(shù)的開頭加一個(gè)數(shù)字八進(jìn)制整數(shù)。在常數(shù)的開頭加一個(gè)數(shù)字0,就表,就表示這是以八進(jìn)制數(shù)形式表示的常數(shù)。如示這是以八進(jìn)制數(shù)形式表示的常數(shù)。如020表示這表示這是八進(jìn)制數(shù)是八進(jìn)制數(shù)20,即(,即(20)8,它相當(dāng)于十進(jìn)制數(shù),它相當(dāng)于十進(jìn)制數(shù)16。(3) 十六進(jìn)制整數(shù)。在常數(shù)的開頭加一個(gè)數(shù)字十六進(jìn)制整數(shù)。在常數(shù)的開頭加一個(gè)數(shù)字0和一和一個(gè)英文字母個(gè)英文字母X(或或x),就表示這是以十六進(jìn)制

14、數(shù)形式就表示這是以十六進(jìn)制數(shù)形式表示的常數(shù)。如表示的常數(shù)。如0X20表示這是十六進(jìn)制數(shù)表示這是十六進(jìn)制數(shù)20,即,即(20)16,它相當(dāng)于十進(jìn)制數(shù),它相當(dāng)于十進(jìn)制數(shù)32。2. 浮點(diǎn)數(shù)的表示方法浮點(diǎn)數(shù)的表示方法一個(gè)浮點(diǎn)數(shù)可以用兩種不同的方式表示:一個(gè)浮點(diǎn)數(shù)可以用兩種不同的方式表示: (1) 十進(jìn)制小數(shù)形式。如十進(jìn)制小數(shù)形式。如21.456,-7.98等。它一般由等。它一般由整數(shù)部分和小數(shù)部分組成,可以省略其中之一整數(shù)部分和小數(shù)部分組成,可以省略其中之一(如如78.或或.06,.0),但不能二者皆省略。,但不能二者皆省略。C+編譯系統(tǒng)編譯系統(tǒng)把用這種形式表示的浮點(diǎn)數(shù)一律按雙精度常量處理,把用這種形

15、式表示的浮點(diǎn)數(shù)一律按雙精度常量處理,在內(nèi)存中占在內(nèi)存中占8個(gè)字節(jié)。如果在實(shí)數(shù)的數(shù)字之后加字個(gè)字節(jié)。如果在實(shí)數(shù)的數(shù)字之后加字母母F或或f,表示此數(shù)為單精度浮點(diǎn)數(shù),如表示此數(shù)為單精度浮點(diǎn)數(shù),如1234F,-43f,占占4個(gè)字節(jié)。如果加字母個(gè)字節(jié)。如果加字母L或或l,表示此數(shù)為長雙精表示此數(shù)為長雙精度數(shù)度數(shù)(long double),在在GCC中占中占12個(gè)字節(jié),在個(gè)字節(jié),在Visual C+ 6.0中占中占8個(gè)字節(jié)。個(gè)字節(jié)。(2) 指數(shù)形式指數(shù)形式(即浮點(diǎn)形式即浮點(diǎn)形式)一個(gè)浮點(diǎn)數(shù)可以寫成指數(shù)形式,如一個(gè)浮點(diǎn)數(shù)可以寫成指數(shù)形式,如3.14159可以表可以表示為示為0.314159101,3.141

16、59100,31.415910-1,314.15910-2等形式。在程序中應(yīng)表示為:等形式。在程序中應(yīng)表示為: 0.314159e1,3.14159e0,31.4159e-1 ,314.159e-2,用字用字母母e表示其后的數(shù)是以表示其后的數(shù)是以10為底的冪,如為底的冪,如e12表示表示1012。其一般形式為其一般形式為數(shù)符數(shù)符 數(shù)字部分?jǐn)?shù)字部分 指數(shù)部分指數(shù)部分上面各數(shù)據(jù)中的上面各數(shù)據(jù)中的0.314159,3.14159, 31.4159, 314.159 等就是其中的數(shù)字部分??梢钥吹剑旱染褪瞧渲械臄?shù)字部分??梢钥吹剑?由于由于指數(shù)部分的存在,使得同一個(gè)浮點(diǎn)數(shù)可以用不同的指數(shù)部分的存在,使

17、得同一個(gè)浮點(diǎn)數(shù)可以用不同的指數(shù)形式來表示,數(shù)字部分中小數(shù)點(diǎn)的位置是浮動指數(shù)形式來表示,數(shù)字部分中小數(shù)點(diǎn)的位置是浮動的。例如:的。例如: a=0.314159e1;a=3.14159e0;a=31.4159e-1;a=314.159e-2;以上以上4個(gè)賦值語句中,用了不同形式的浮點(diǎn)數(shù),但個(gè)賦值語句中,用了不同形式的浮點(diǎn)數(shù),但其作用是相同的。其作用是相同的。在程序中不論把浮點(diǎn)數(shù)寫成小數(shù)形式還是指數(shù)形式,在程序中不論把浮點(diǎn)數(shù)寫成小數(shù)形式還是指數(shù)形式,在內(nèi)存中都是以指數(shù)形式在內(nèi)存中都是以指數(shù)形式(即浮點(diǎn)形式即浮點(diǎn)形式)存儲的。例存儲的。例如不論在程序中寫成如不論在程序中寫成314.159或或314.1

18、59e0,31.4159e1,3.14159e2, 0.314159e3等形式,在內(nèi)存等形式,在內(nèi)存中都是以規(guī)范化的指數(shù)形式存放,如圖中都是以規(guī)范化的指數(shù)形式存放,如圖2.3所示。所示。圖圖2.3數(shù)字部分必須小于數(shù)字部分必須小于1,同時(shí),小數(shù)點(diǎn)后面第一個(gè)數(shù),同時(shí),小數(shù)點(diǎn)后面第一個(gè)數(shù)字必須是一個(gè)非字必須是一個(gè)非0數(shù)字,例如不能是數(shù)字,例如不能是0.0314159。因。因此此314.159和和314.159e0,31.4159e1,3.14159e2, 0.314159e3在內(nèi)存中表示成在內(nèi)存中表示成0.314159103。存儲單。存儲單元分為兩部分,一部分用來存放數(shù)字部分,一部分元分為兩部分,一

19、部分用來存放數(shù)字部分,一部分用來存放指數(shù)部分。為便于理解,在圖用來存放指數(shù)部分。為便于理解,在圖2.3中是用中是用十進(jìn)制表示的,實(shí)際上在存儲單元中是用二進(jìn)制數(shù)十進(jìn)制表示的,實(shí)際上在存儲單元中是用二進(jìn)制數(shù)來表示小數(shù)部分,用來表示小數(shù)部分,用2的冪次來表示指數(shù)部分的。的冪次來表示指數(shù)部分的。對于以指數(shù)形式表示的數(shù)值常量,也都作為雙精度對于以指數(shù)形式表示的數(shù)值常量,也都作為雙精度常量處理。常量處理。 1. 普通的字符常量普通的字符常量用單撇號括起來的一個(gè)字符就是字符型常量。如用單撇號括起來的一個(gè)字符就是字符型常量。如a,#,%,D都是合法的字符常量,在內(nèi)存中占一都是合法的字符常量,在內(nèi)存中占一個(gè)字節(jié)

20、。注意:個(gè)字節(jié)。注意: 字符常量只能包括一個(gè)字符,字符常量只能包括一個(gè)字符,如如AB 是不合法的。字符常量區(qū)分大小寫字母,是不合法的。字符常量區(qū)分大小寫字母,如如A和和a是兩個(gè)不同的字符常量。撇號是兩個(gè)不同的字符常量。撇號()是定是定界符,而不屬于字符常量的一部分。如界符,而不屬于字符常量的一部分。如couta;輸出的是一個(gè)字母輸出的是一個(gè)字母“a”,而不是而不是3個(gè)字符個(gè)字符“a ”。2.2.3 字符常量字符常量2. 轉(zhuǎn)義字符常量轉(zhuǎn)義字符常量除了以上形式的字符常量外,除了以上形式的字符常量外,C+還允許用一種特還允許用一種特殊形式的字符常量,就是以殊形式的字符常量,就是以 “”開頭的字符序開

21、頭的字符序列。例如,列。例如,n代表一個(gè)代表一個(gè)“換行換行”符。符?!癱outn; ” 將輸出一個(gè)換行,其作用與將輸出一個(gè)換行,其作用與“coutendl; ” 相同。這種相同。這種“控制字符控制字符”,在屏幕上是不能顯示的。,在屏幕上是不能顯示的。在程序中也無法用一個(gè)一般形式的字符表示,只能在程序中也無法用一個(gè)一般形式的字符表示,只能采用特殊形式來表示。采用特殊形式來表示。常用的以常用的以“”開頭的特殊字符見書中表開頭的特殊字符見書中表2.2。3. 字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法將一個(gè)字符常量存放到內(nèi)存單元時(shí),實(shí)際上并不是將一個(gè)字符常量存放到內(nèi)存

22、單元時(shí),實(shí)際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符相把該字符本身放到內(nèi)存單元中去,而是將該字符相應(yīng)的應(yīng)的ASCII代碼放到存儲單元中。如果字符變量代碼放到存儲單元中。如果字符變量c1的值為的值為a,c2的值為的值為b,則在變量中存放的是則在變量中存放的是a的的ASCII碼碼97,b 的的ASCII碼碼98,如圖,如圖2.4(a)所示,所示,實(shí)際上在內(nèi)存中是以二進(jìn)制形式存放的,如圖實(shí)際上在內(nèi)存中是以二進(jìn)制形式存放的,如圖2.4(b)所示。所示。圖圖2.4既然字符數(shù)據(jù)是以既然字符數(shù)據(jù)是以ASCII碼存儲的,它的存儲形式碼存儲的,它的存儲形式就與整數(shù)的存儲形式類似。這樣,在就與整數(shù)的存儲

23、形式類似。這樣,在C+中字符型中字符型數(shù)據(jù)和整型數(shù)據(jù)之間就可以通用。一個(gè)字符數(shù)據(jù)可數(shù)據(jù)和整型數(shù)據(jù)之間就可以通用。一個(gè)字符數(shù)據(jù)可以賦給一個(gè)整型變量,反之,一個(gè)整型數(shù)據(jù)也可以以賦給一個(gè)整型變量,反之,一個(gè)整型數(shù)據(jù)也可以賦給一個(gè)字符變量。也可以對字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)賦給一個(gè)字符變量。也可以對字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算,此時(shí)相當(dāng)于對它們的算,此時(shí)相當(dāng)于對它們的ASCII碼進(jìn)行算術(shù)運(yùn)算。碼進(jìn)行算術(shù)運(yùn)算。例例2.1 將字符賦給整型變量。將字符賦給整型變量。#include using namespace std;int main( ) int i,j; /i和和j是整型變量是整型變量i=A; /將一個(gè)字符常量賦給

24、整型變量將一個(gè)字符常量賦給整型變量ij=B; /將一個(gè)字符常量賦給整型變量將一個(gè)字符常量賦給整型變量jcouti jn; /輸出整型變量輸出整型變量i和和j的值,的值,n 是換行符是換行符return 0;執(zhí)行時(shí)輸出執(zhí)行時(shí)輸出 65 66i和和j被指定為整型變量。但在第被指定為整型變量。但在第5和第和第6行中,將字行中,將字符符A和和B分別賦給分別賦給i和和j,它的作用相當(dāng)于以下兩個(gè)它的作用相當(dāng)于以下兩個(gè)賦值語句:賦值語句:i65;j66;因?yàn)橐驗(yàn)锳和和B的的ASCII碼為碼為65和和66。在程序的第。在程序的第5和和第第6行是把行是把65和和66直接存放到直接存放到i和和j的內(nèi)存單元中。因的

25、內(nèi)存單元中。因此輸出此輸出65和和66??梢钥吹剑涸谝欢l件下,字符型數(shù)據(jù)和整型數(shù)據(jù)可以看到:在一定條件下,字符型數(shù)據(jù)和整型數(shù)據(jù)是可以通用的。但是應(yīng)注意字符數(shù)據(jù)只占一個(gè)字節(jié),是可以通用的。但是應(yīng)注意字符數(shù)據(jù)只占一個(gè)字節(jié),它只能存放它只能存放0255范圍內(nèi)的整數(shù)。范圍內(nèi)的整數(shù)。例例2.2 字符數(shù)據(jù)與整數(shù)進(jìn)行算術(shù)運(yùn)算。下面程序的字符數(shù)據(jù)與整數(shù)進(jìn)行算術(shù)運(yùn)算。下面程序的作用是將小寫字母轉(zhuǎn)換為大寫字母。作用是將小寫字母轉(zhuǎn)換為大寫字母。#include using namespace std;int main( )char c1,c2; c1=a; c2=b; c1=c1-32; c2=c2-32; co

26、utc1 c2endl; return 0;運(yùn)行結(jié)果為運(yùn)行結(jié)果為A Ba的的ASCII碼為碼為97,而,而A的的ASCII碼為碼為65,b為為98,B為為66。從。從ASCII代碼表中可以看到每一個(gè)小寫字代碼表中可以看到每一個(gè)小寫字母比它相應(yīng)的大寫字母的母比它相應(yīng)的大寫字母的ASCII代碼大代碼大32。C+符符數(shù)據(jù)與數(shù)值直接進(jìn)行算術(shù)運(yùn)算,數(shù)據(jù)與數(shù)值直接進(jìn)行算術(shù)運(yùn)算,a-32得到整數(shù)得到整數(shù)65,b-32得到整數(shù)得到整數(shù)66。將。將65和和66存放在存放在c1,c2中,由于中,由于c1,c2是字符變量,因此用是字符變量,因此用cout輸出輸出c1,c2時(shí),得到字時(shí),得到字符符A和和B(A的的AS

27、CII碼為碼為65,B的的ASCII碼為碼為66)。4. 字符串常量字符串常量用雙撇號括起來的部分就是字符串常量,如用雙撇號括起來的部分就是字符串常量,如abc,Hello!,a+b,Liping都是字符串常量。都是字符串常量。字符串常量字符串常量abc在內(nèi)存中占在內(nèi)存中占4個(gè)字節(jié)個(gè)字節(jié)(而不是而不是3個(gè)字個(gè)字節(jié)節(jié)),見圖,見圖2.5。圖圖2.5編譯系統(tǒng)會在字符串最后自動加一個(gè)編譯系統(tǒng)會在字符串最后自動加一個(gè)0作為字符作為字符串結(jié)束標(biāo)志。但串結(jié)束標(biāo)志。但0并不是字符串的一部分,它只并不是字符串的一部分,它只作為字符串的結(jié)束標(biāo)志。如作為字符串的結(jié)束標(biāo)志。如 coutabcendl; 輸出輸出3個(gè)

28、字符個(gè)字符abc,而不包括而不包括0。注意:注意: a和和a代表不同的含義,代表不同的含義,a是字符串常是字符串常量,量,a 是字符常量。前者占兩個(gè)字節(jié),后者占是字符常量。前者占兩個(gè)字節(jié),后者占1個(gè)個(gè)字節(jié)。請分析下面的程序片段:字節(jié)。請分析下面的程序片段: char c; /定義一個(gè)字符變量定義一個(gè)字符變量c=a; /正確正確c=a; /錯(cuò)誤,錯(cuò)誤,c只能容納一個(gè)字符只能容納一個(gè)字符字符串常量要用字符數(shù)組來存放,見第字符串常量要用字符數(shù)組來存放,見第5章。章。請思考:請思考: 字符串常量字符串常量abcn包含幾個(gè)字符包含幾個(gè)字符?不是不是5個(gè)而是個(gè)而是4個(gè)字符,其中個(gè)字符,其中“n”是一個(gè)轉(zhuǎn)義

29、字符。但是一個(gè)轉(zhuǎn)義字符。但它在內(nèi)存中占它在內(nèi)存中占5個(gè)字節(jié)個(gè)字節(jié)(包括一個(gè)包括一個(gè)“0”字符字符) 。編。編譯系統(tǒng)遇到譯系統(tǒng)遇到“”時(shí)就會把它認(rèn)作轉(zhuǎn)義字符的標(biāo)志,時(shí)就會把它認(rèn)作轉(zhuǎn)義字符的標(biāo)志,把它和其后的字符一起作為一個(gè)轉(zhuǎn)義字符。把它和其后的字符一起作為一個(gè)轉(zhuǎn)義字符。如果如果“”后面的字符不能與后面的字符不能與“”組成一個(gè)合法組成一個(gè)合法的轉(zhuǎn)義字符的轉(zhuǎn)義字符(如如c),則在編譯時(shí)顯示出錯(cuò)信息。則在編譯時(shí)顯示出錯(cuò)信息。如果希望將如果希望將“”字符也作為字符串中的一個(gè)字符,字符也作為字符串中的一個(gè)字符,則應(yīng)寫為則應(yīng)寫為abcn,此時(shí)字符包括此時(shí)字符包括5個(gè)字符,即個(gè)字符,即a,b,c,n。如果有以

30、下輸出語句:如果有以下輸出語句:coutabcnendl;則會輸出:則會輸出: abc,然后換行。同理執(zhí)行然后換行。同理執(zhí)行coutI say Thank you!n;的輸出是:的輸出是: I say Thank you!如果在一個(gè)字符串中最后一個(gè)字符為如果在一個(gè)字符串中最后一個(gè)字符為“”,則表,則表示它是續(xù)行符,下一行的字符是該字符串的一部分,示它是續(xù)行符,下一行的字符是該字符串的一部分,且在兩行字符串間無空格。如且在兩行字符串間無空格。如coutWe must study C /本行最后的本行最后的“”后面后面的空格和換行均不起作用的空格和換行均不起作用+ hard!; /本行的字符緊連在

31、上一行最后的本行的字符緊連在上一行最后的“”前面字符之后前面字符之后則輸出則輸出: We must study C+ hard!為了編程和閱讀的方便,在為了編程和閱讀的方便,在C+程序設(shè)計(jì)中,常用程序設(shè)計(jì)中,常用一個(gè)符號名代表一個(gè)常量,稱為符號常量,即以標(biāo)一個(gè)符號名代表一個(gè)常量,稱為符號常量,即以標(biāo)識符形式出現(xiàn)的常量。識符形式出現(xiàn)的常量。例例2.3 符號常量的使用。符號常量的使用。 #define PRICE 30 /注意這不是語句,末尾不要加分號注意這不是語句,末尾不要加分號int main ( ) int num,total;num=10;total=num * PRICE;couttot

32、al=totalendl;return 0; 2.2.4 符號常量符號常量程序中用預(yù)處理命令程序中用預(yù)處理命令#define指定指定PRICE在本程序在本程序單位中代表常量單位中代表常量30,此后凡在本程序單位中出現(xiàn)的,此后凡在本程序單位中出現(xiàn)的PRICE都代表都代表30,可以和常量一樣進(jìn)行運(yùn)算,程序,可以和常量一樣進(jìn)行運(yùn)算,程序運(yùn)行結(jié)果為運(yùn)行結(jié)果為 total=300 請注意符號常量雖然有名字,但它不是變量。它的請注意符號常量雖然有名字,但它不是變量。它的值在其作用域值在其作用域(在本例中為主函數(shù)在本例中為主函數(shù))內(nèi)是不能改變的,內(nèi)是不能改變的,也不能被賦值。如用賦值語句也不能被賦值。如用賦

33、值語句“PRICE=40;”給給PRICE賦值是錯(cuò)誤的。賦值是錯(cuò)誤的。 使用符號常量的好處是:使用符號常量的好處是:(1) 含義清楚。含義清楚。(2) 在需要改變一個(gè)常量時(shí)能做到在需要改變一個(gè)常量時(shí)能做到“一改全改一改全改”。 如如#define PRICE 35其實(shí)在前面的例子中已經(jīng)多次用到了變量。在程序其實(shí)在前面的例子中已經(jīng)多次用到了變量。在程序運(yùn)行期間其值可以改變的量稱為變量。一個(gè)變量應(yīng)運(yùn)行期間其值可以改變的量稱為變量。一個(gè)變量應(yīng)該有一個(gè)名字,并在內(nèi)存中占據(jù)一定的存儲單元,該有一個(gè)名字,并在內(nèi)存中占據(jù)一定的存儲單元,在該存儲單元中存放變量的值。請注意區(qū)分變量名在該存儲單元中存放變量的值。

34、請注意區(qū)分變量名和變量值這兩個(gè)不同的概念,見圖和變量值這兩個(gè)不同的概念,見圖2.6。圖圖2.6 2.3 變量變量 2.3.1 什么是變量什么是變量先介紹標(biāo)識符的概念。和其他高級語言一樣,用來先介紹標(biāo)識符的概念。和其他高級語言一樣,用來標(biāo)識變量、符號常量、函數(shù)、數(shù)組、類型等實(shí)體名標(biāo)識變量、符號常量、函數(shù)、數(shù)組、類型等實(shí)體名字的有效字符序列稱為標(biāo)識符(字的有效字符序列稱為標(biāo)識符(identifier)。)。簡單簡單地說,標(biāo)識符就是一個(gè)名字。變量名是標(biāo)識符的一地說,標(biāo)識符就是一個(gè)名字。變量名是標(biāo)識符的一種,變量的名字必須遵循標(biāo)識符的命名規(guī)則。種,變量的名字必須遵循標(biāo)識符的命名規(guī)則。C+規(guī)定標(biāo)識符只能

35、由字母、數(shù)字和下劃線規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線3種字種字符組成,且第一個(gè)字符必須為字母或下劃線。下面符組成,且第一個(gè)字符必須為字母或下劃線。下面列出的是合法的標(biāo)識符,也是合法的變量名:列出的是合法的標(biāo)識符,也是合法的變量名:sum, average, total, day, month, Student_name, tan, BASIC, li_ling下面是不合法的標(biāo)識符和變量名:下面是不合法的標(biāo)識符和變量名:2.3.2 變量名規(guī)則變量名規(guī)則M.D.John, $123, #33, 3G64, Ling li, C+, Zhang-ling, U.S.A.注意,在注意,在C+中,大寫

36、字母和小寫字母被認(rèn)為是兩中,大寫字母和小寫字母被認(rèn)為是兩個(gè)不同的字符。因此,個(gè)不同的字符。因此,sum和和SUM是兩個(gè)不同的變是兩個(gè)不同的變量名。一般地,變量名用小寫字母表示,與人們?nèi)樟棵R话愕?,變量名用小寫字母表示,與人們?nèi)粘A?xí)慣一致,以增加可讀性。應(yīng)注意變量名不能與常習(xí)慣一致,以增加可讀性。應(yīng)注意變量名不能與C+的關(guān)鍵字、系統(tǒng)函數(shù)名和類名相同。在國外軟的關(guān)鍵字、系統(tǒng)函數(shù)名和類名相同。在國外軟件開發(fā)工作中,常習(xí)慣在變量前面加一個(gè)字母以表件開發(fā)工作中,常習(xí)慣在變量前面加一個(gè)字母以表示該變量的類型,如示該變量的類型,如iCount表示這是一個(gè)整型變量,表示這是一個(gè)整型變量,cSex表示這是一個(gè)

37、字符型變量。表示這是一個(gè)字符型變量。C+沒有規(guī)定標(biāo)識符的長度(字符個(gè)數(shù)),但各個(gè)沒有規(guī)定標(biāo)識符的長度(字符個(gè)數(shù)),但各個(gè)具體的具體的C編譯系統(tǒng)都有自己的規(guī)定。有的系統(tǒng)取編譯系統(tǒng)都有自己的規(guī)定。有的系統(tǒng)取32個(gè)字符,超過的字符不被識別。個(gè)字符,超過的字符不被識別。在在C+語言中,要求對所有用到的變量作強(qiáng)制定義,語言中,要求對所有用到的變量作強(qiáng)制定義,也就是必須也就是必須“先定義,后使用先定義,后使用”,如例,如例2.2和例和例2.3那樣。定義變量的一般形式是那樣。定義變量的一般形式是 變量類型變量類型 變量名表列;變量名表列;變量名表列指的是一個(gè)或多個(gè)變量名的序列。如變量名表列指的是一個(gè)或多個(gè)變

38、量名的序列。如float a,b,c,d,e; 定義定義a,b,c,d,e為單精度型變量,注意各變量間以逗為單精度型變量,注意各變量間以逗號分隔,最后是分號。號分隔,最后是分號??梢栽诙x變量時(shí)指定它的初值。如可以在定義變量時(shí)指定它的初值。如 float a=83.5,b,c=64.5,d=81.2,e; /對變量對變量a,c,d指定指定了初值,了初值,b和和d未指定初值未指定初值2.3.3 定義變量定義變量C語言要求變量的定義應(yīng)該放在所有的執(zhí)行語句之語言要求變量的定義應(yīng)該放在所有的執(zhí)行語句之前,而前,而C+則放松了限制,只要求在第一次使用該則放松了限制,只要求在第一次使用該變量之前進(jìn)行定義即

39、可。也就是說,它可以出現(xiàn)在變量之前進(jìn)行定義即可。也就是說,它可以出現(xiàn)在語句的中間,如語句的中間,如int a; /定義變量定義變量a(在使用在使用a之前定義之前定義)a=3; /執(zhí)行語句,對執(zhí)行語句,對a賦值賦值float b; /定義變量定義變量b(在使用在使用b之前定義之前定義)b=4.67; /執(zhí)行語句,對執(zhí)行語句,對b賦值賦值char c; /定義變量定義變量c(在使用在使用c之前定義之前定義)c=A; /執(zhí)行語句執(zhí)行語句 ,對,對c賦值賦值C+要求對變量作強(qiáng)制定義的目的是:要求對變量作強(qiáng)制定義的目的是:(1) 凡未被事先定義的,不作為變量名,這就能保凡未被事先定義的,不作為變量名,這

40、就能保證程序中變量名使用得正確。例如,如果在聲明部證程序中變量名使用得正確。例如,如果在聲明部分寫了分寫了int student;而在執(zhí)行語句中錯(cuò)寫成而在執(zhí)行語句中錯(cuò)寫成statent。如如statent=30;在編譯時(shí)檢查出在編譯時(shí)檢查出statent未經(jīng)定義,作為錯(cuò)誤處理。未經(jīng)定義,作為錯(cuò)誤處理。輸出輸出“變量變量statent未經(jīng)聲明未經(jīng)聲明”的信息,便于用戶發(fā)的信息,便于用戶發(fā)現(xiàn)錯(cuò)誤,避免變量名使用時(shí)出錯(cuò)?,F(xiàn)錯(cuò)誤,避免變量名使用時(shí)出錯(cuò)。(2) 每一個(gè)變量被指定為一確定類型,在編譯時(shí)就每一個(gè)變量被指定為一確定類型,在編譯時(shí)就能為其分配相應(yīng)的存儲單元。如指定和為能為其分配相應(yīng)的存儲單元。如

41、指定和為int型,一般的編譯系統(tǒng)對其各分配型,一般的編譯系統(tǒng)對其各分配4個(gè)字節(jié),并按整個(gè)字節(jié),并按整數(shù)方式存儲數(shù)據(jù)。數(shù)方式存儲數(shù)據(jù)。(3) 指定每一變量屬于一個(gè)特定的類型,這就便于指定每一變量屬于一個(gè)特定的類型,這就便于在編譯時(shí),據(jù)此檢查該變量所進(jìn)行的運(yùn)算是否合法。在編譯時(shí),據(jù)此檢查該變量所進(jìn)行的運(yùn)算是否合法。例如,整型變量例如,整型變量a和和b,可以進(jìn)行求余運(yùn)算:可以進(jìn)行求余運(yùn)算:a%b是是“求余求余”(見(見24 節(jié)),得到節(jié)),得到a/b的余數(shù)。如的余數(shù)。如果將果將a和和b指定為實(shí)型變量,則不允許進(jìn)行指定為實(shí)型變量,則不允許進(jìn)行“求余求余”運(yùn)算,在編譯時(shí)會給出有關(guān)的出錯(cuò)信息。運(yùn)算,在編譯

42、時(shí)會給出有關(guān)的出錯(cuò)信息。允許在定義變量時(shí)對它賦予一個(gè)初值,這稱為變量允許在定義變量時(shí)對它賦予一個(gè)初值,這稱為變量初始化。初值可以是常量,也可以是一個(gè)有確定值初始化。初值可以是常量,也可以是一個(gè)有確定值的表達(dá)式。如的表達(dá)式。如float a,b=5.78*3.5,c=2*sin(2.0);表示定義了表示定義了a,b,c為單精度浮點(diǎn)型變量,對為單精度浮點(diǎn)型變量,對b初始化初始化為為5.78*3, 對對c初始化為初始化為2*sin(2.0),在編譯連接后,在編譯連接后,從標(biāo)準(zhǔn)函數(shù)庫得到正弦函數(shù)從標(biāo)準(zhǔn)函數(shù)庫得到正弦函數(shù)sin(2.0)的值,因此變量的值,因此變量c有確定的初值。變量有確定的初值。變量a

43、未初始化。未初始化。如果對變量未賦初值,則該變量的初值是一個(gè)不可如果對變量未賦初值,則該變量的初值是一個(gè)不可預(yù)測的值,即該存儲單元中當(dāng)時(shí)的內(nèi)容是不知道的。預(yù)測的值,即該存儲單元中當(dāng)時(shí)的內(nèi)容是不知道的。例如,若未對例如,若未對a和和b賦值,執(zhí)行輸出語句賦值,執(zhí)行輸出語句2.3.4 為變量賦初值為變量賦初值 couta b cendl;輸出結(jié)果可能為輸出結(jié)果可能為1.48544e-38 15 1.81858 (各次運(yùn)行情況可能不同各次運(yùn)行情況可能不同)初始化不是在編譯階段完成的(只有在第初始化不是在編譯階段完成的(只有在第4章中介章中介紹的靜態(tài)存儲變量和外部變量的初始化是在編譯階紹的靜態(tài)存儲變量和

44、外部變量的初始化是在編譯階段完成的),而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦予段完成的),而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦予初值的,相當(dāng)于執(zhí)行一個(gè)賦值語句。例如,初值的,相當(dāng)于執(zhí)行一個(gè)賦值語句。例如,int a=3;相當(dāng)于以下兩個(gè)語句相當(dāng)于以下兩個(gè)語句 :int a; / 指定為整型變量指定為整型變量 a=3; / 賦值語句,將賦給賦值語句,將賦給 對多個(gè)變量賦予同一初值,必須分別指定,不能寫對多個(gè)變量賦予同一初值,必須分別指定,不能寫成成float a=b=c=4.5;而應(yīng)寫成而應(yīng)寫成 float a=4.5,b=4.5,c=4.5;或或float a,b,c=4.5;a=b=c;在定義變量時(shí),如果加

45、上關(guān)鍵字在定義變量時(shí),如果加上關(guān)鍵字const,則變量的則變量的值在程序運(yùn)行期間不能改變,這種變量稱為常變量值在程序運(yùn)行期間不能改變,這種變量稱為常變量(constant variable)。例如,例如,const int a=3; /用用const來聲明這種變量的值不能改變,來聲明這種變量的值不能改變,指定其值始終為指定其值始終為3在定義常變量時(shí)必須同時(shí)對它初始化在定義常變量時(shí)必須同時(shí)對它初始化(即指定其值即指定其值),此后它的值不能再改變。常變量不能出現(xiàn)在賦值號此后它的值不能再改變。常變量不能出現(xiàn)在賦值號的左邊。例如上面一行不能寫成的左邊。例如上面一行不能寫成const int a;a=3

46、; /常變量不能被賦值常變量不能被賦值可以用表達(dá)式對常變量初始化,如可以用表達(dá)式對常變量初始化,如2.3.5 常變量常變量const int b=3+6,c=3*cos(1.5); /b的值被指定為的值被指定為9,c的值被的值被指定為指定為3*cos(1.5)但應(yīng)注意,由于使用了系統(tǒng)標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)但應(yīng)注意,由于使用了系統(tǒng)標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)cos,必必須將包含該函數(shù)有關(guān)的信息的頭文件須將包含該函數(shù)有關(guān)的信息的頭文件“cmath”(或或math.h)包含到本程序單位中來,可以在本程序單包含到本程序單位中來,可以在本程序單位的開頭加上以下位的開頭加上以下#include命令:命令:#include 或或 #

47、include 變量的值應(yīng)該是可以變化的,怎么值是固定的量也變量的值應(yīng)該是可以變化的,怎么值是固定的量也稱變量呢?其實(shí),從計(jì)算機(jī)實(shí)現(xiàn)的角度看,變量的稱變量呢?其實(shí),從計(jì)算機(jī)實(shí)現(xiàn)的角度看,變量的特征是存在一個(gè)以變量名命名的存儲單元,在一般特征是存在一個(gè)以變量名命名的存儲單元,在一般情況下,存儲單元中的內(nèi)容是可以變化的。對常變情況下,存儲單元中的內(nèi)容是可以變化的。對常變量來說,無非在此變量的基礎(chǔ)上加上一個(gè)限定:量來說,無非在此變量的基礎(chǔ)上加上一個(gè)限定: 存儲單元中的值不允許變化。因此常變量又稱為只存儲單元中的值不允許變化。因此常變量又稱為只讀變量讀變量(read-only-variable)。請區(qū)

48、別用請區(qū)別用#define命令定義的符號常量和用命令定義的符號常量和用const定定義的常變量。符號常量只是用一個(gè)符號代替一個(gè)字義的常變量。符號常量只是用一個(gè)符號代替一個(gè)字符串,在預(yù)編譯時(shí)把所有符號常量替換為所指定的符串,在預(yù)編譯時(shí)把所有符號常量替換為所指定的字符串,它沒有類型,在內(nèi)存中并不存在以符號常字符串,它沒有類型,在內(nèi)存中并不存在以符號常量命名的存儲單元。而常變量具有變量的特征,它量命名的存儲單元。而常變量具有變量的特征,它具有類型,在內(nèi)存中存在著以它命名的存儲單元,具有類型,在內(nèi)存中存在著以它命名的存儲單元,可以用可以用sizeof運(yùn)算符測出其長度。與一般變量惟一運(yùn)算符測出其長度。與

49、一般變量惟一的不同是指定變量的值不能改變。用的不同是指定變量的值不能改變。用#define命令定命令定義符號常量是義符號常量是C語言所采用的方法,語言所采用的方法,C+把它保留把它保留下來是為了和下來是為了和C兼容。兼容。C+的程序員一般喜歡用的程序員一般喜歡用const定義常變量。雖然二者實(shí)現(xiàn)的方法不同,但定義常變量。雖然二者實(shí)現(xiàn)的方法不同,但從使用的角度看,都可以認(rèn)為用了一個(gè)標(biāo)識符代表從使用的角度看,都可以認(rèn)為用了一個(gè)標(biāo)識符代表了一個(gè)常量。有些書上把用了一個(gè)常量。有些書上把用const定義的常變量也定義的常變量也稱為定義常量,但讀者應(yīng)該了解它和符號常量的區(qū)稱為定義常量,但讀者應(yīng)該了解它和符

50、號常量的區(qū)別。別。C+的運(yùn)算符十分豐富,使得的運(yùn)算符十分豐富,使得C+的運(yùn)算十分靈活的運(yùn)算十分靈活方便。例如把賦值號方便。例如把賦值號(=)也作為運(yùn)算符處理,這樣,也作為運(yùn)算符處理,這樣,a=b=c=4就是合法的表達(dá)式,這是與其他語言不同就是合法的表達(dá)式,這是與其他語言不同的。的。C+提供了以下運(yùn)算符:提供了以下運(yùn)算符:(1) 算術(shù)運(yùn)算符算術(shù)運(yùn)算符 +(加加)-(減減) *(乘乘) /(除除) %(整除求余整除求余)+(自加自加) -(自自減減)(2) 關(guān)系運(yùn)算符關(guān)系運(yùn)算符(大于大于)(小于小于) (等于等于)(大于或等于大于或等于)(小于或等于小于或等于)!(不等于不等于)2.4 C+的運(yùn)算

51、符的運(yùn)算符() 邏輯運(yùn)算符邏輯運(yùn)算符 (邏輯與邏輯與) |(邏輯或邏輯或) !(邏輯非邏輯非)() 位運(yùn)算符位運(yùn)算符 (按位右移按位右移) (按位與按位與) |(按位或按位或) (按位異或按位異或) (按位取反按位取反)() 賦值運(yùn)算符賦值運(yùn)算符 (及其擴(kuò)展賦值運(yùn)算符及其擴(kuò)展賦值運(yùn)算符)() 條件運(yùn)算符條件運(yùn)算符 (?:)() 逗號運(yùn)算符逗號運(yùn)算符 (,)() 指針運(yùn)算符指針運(yùn)算符 (*)(9) 引用運(yùn)算符和地址運(yùn)算符引用運(yùn)算符和地址運(yùn)算符 ()(10) 求字節(jié)數(shù)運(yùn)算符()求字節(jié)數(shù)運(yùn)算符()(11) 強(qiáng)制類型轉(zhuǎn)換運(yùn)算符(強(qiáng)制類型轉(zhuǎn)換運(yùn)算符( (類型類型) 或類型或類型( ))(12) 成員運(yùn)算

52、符成員運(yùn)算符 (.)(13) 指向成員的運(yùn)算符指向成員的運(yùn)算符 (-)(14) 下標(biāo)運(yùn)算符下標(biāo)運(yùn)算符 ( )(15) 其他其他 (如函數(shù)調(diào)用運(yùn)算符()(如函數(shù)調(diào)用運(yùn)算符()在本章中主要介紹算術(shù)運(yùn)算符與算術(shù)表達(dá)式,賦值在本章中主要介紹算術(shù)運(yùn)算符與算術(shù)表達(dá)式,賦值運(yùn)算符與賦值表達(dá)式,逗號運(yùn)算符與逗號表達(dá)式,運(yùn)算符與賦值表達(dá)式,逗號運(yùn)算符與逗號表達(dá)式,其他運(yùn)算符將在以后各章中陸續(xù)介紹。其他運(yùn)算符將在以后各章中陸續(xù)介紹。(加法運(yùn)算符,或正值運(yùn)算符。如(加法運(yùn)算符,或正值運(yùn)算符。如3+5,+3)(減法運(yùn)算符,或負(fù)值運(yùn)算符。如(減法運(yùn)算符,或負(fù)值運(yùn)算符。如5-2,-3)* (乘法運(yùn)算符。如乘法運(yùn)算符。如3

53、*5)(除法運(yùn)算符。如(除法運(yùn)算符。如5/3)(模運(yùn)算符,或稱求余運(yùn)算符,兩側(cè)均應(yīng)為整(模運(yùn)算符,或稱求余運(yùn)算符,兩側(cè)均應(yīng)為整型數(shù)據(jù),如的值為)。型數(shù)據(jù),如的值為)。2.5 算術(shù)運(yùn)算符與算術(shù)表達(dá)式算術(shù)運(yùn)算符與算術(shù)表達(dá)式 2.5.1 基本的算術(shù)運(yùn)算符基本的算術(shù)運(yùn)算符需要說明,兩個(gè)整數(shù)相除的結(jié)果為整數(shù),如需要說明,兩個(gè)整數(shù)相除的結(jié)果為整數(shù),如5/3的的結(jié)果值為結(jié)果值為1,舍去小數(shù)部分。但是,如果除數(shù)或被,舍去小數(shù)部分。但是,如果除數(shù)或被除數(shù)中有一個(gè)為負(fù)值,則舍入的方向是不固定的。除數(shù)中有一個(gè)為負(fù)值,則舍入的方向是不固定的。例如,例如,-5/3在有的在有的C+系統(tǒng)上得到結(jié)果系統(tǒng)上得到結(jié)果-1,有的,

54、有的C+系統(tǒng)則給出結(jié)果系統(tǒng)則給出結(jié)果-2。多數(shù)編譯系統(tǒng)采取。多數(shù)編譯系統(tǒng)采取“向零向零取整取整”的方法,即的方法,即5/3的值等于的值等于1,-5/3的值等于的值等于-1,取整后向零靠攏。取整后向零靠攏。如果參加如果參加+, -, *, / 運(yùn)算的兩個(gè)數(shù)中有一個(gè)數(shù)為運(yùn)算的兩個(gè)數(shù)中有一個(gè)數(shù)為float型數(shù)據(jù),則運(yùn)算的結(jié)果是型數(shù)據(jù),則運(yùn)算的結(jié)果是double型,因?yàn)樾停驗(yàn)镃+在運(yùn)在運(yùn)算時(shí)對所有算時(shí)對所有float型數(shù)據(jù)都按型數(shù)據(jù)都按double型數(shù)據(jù)處理。型數(shù)據(jù)處理。用算術(shù)運(yùn)算符和括號將運(yùn)算對象(也稱操作數(shù))連用算術(shù)運(yùn)算符和括號將運(yùn)算對象(也稱操作數(shù))連接起來的、符合接起來的、符合C+語法規(guī)則的

55、式子,稱語法規(guī)則的式子,稱C+算術(shù)算術(shù)表達(dá)式。運(yùn)算對象包括常量、變量、函數(shù)等。例如,表達(dá)式。運(yùn)算對象包括常量、變量、函數(shù)等。例如,下面是一個(gè)合法的下面是一個(gè)合法的C+算術(shù)表達(dá)式:算術(shù)表達(dá)式:a*b/c-1.5+aC+語言規(guī)定了運(yùn)算符的優(yōu)先級和結(jié)合性。在求解語言規(guī)定了運(yùn)算符的優(yōu)先級和結(jié)合性。在求解表達(dá)式時(shí),先按運(yùn)算符的優(yōu)先級別高低次序執(zhí)行,表達(dá)式時(shí),先按運(yùn)算符的優(yōu)先級別高低次序執(zhí)行,例如先乘除后加減。如有表達(dá)式例如先乘除后加減。如有表達(dá)式a-b*c,b的左側(cè)為的左側(cè)為減號,右側(cè)為乘號,而乘號優(yōu)先于減號,因此,相減號,右側(cè)為乘號,而乘號優(yōu)先于減號,因此,相當(dāng)于當(dāng)于a-(b*c)。如果在一個(gè)運(yùn)算對象

56、兩側(cè)的運(yùn)算符的如果在一個(gè)運(yùn)算對象兩側(cè)的運(yùn)算符的優(yōu)先級別相同,如優(yōu)先級別相同,如a-b+c,則按規(guī)定的則按規(guī)定的“結(jié)合方向結(jié)合方向”處理。處理。2.5.2 算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級與結(jié)合性算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級與結(jié)合性C+規(guī)定了各種運(yùn)算符的結(jié)合方向(結(jié)合性),算規(guī)定了各種運(yùn)算符的結(jié)合方向(結(jié)合性),算術(shù)運(yùn)算符的結(jié)合方向?yàn)樾g(shù)運(yùn)算符的結(jié)合方向?yàn)椤白宰笾劣易宰笾劣摇?,即先左后右,即先左后右,因此因此b先與減號結(jié)合,執(zhí)行先與減號結(jié)合,執(zhí)行a-b的運(yùn)算,再執(zhí)行加的運(yùn)算,再執(zhí)行加c的運(yùn)算。的運(yùn)算?!白宰笾劣业慕Y(jié)合方向自左至右的結(jié)合方向”又稱又稱“左結(jié)合左結(jié)合性性”,即運(yùn)算對象先與左面的運(yùn)算符結(jié)合。以后

57、可,即運(yùn)算對象先與左面的運(yùn)算符結(jié)合。以后可以看到有些運(yùn)算符的結(jié)合方向?yàn)橐钥吹接行┻\(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷笞杂抑磷蟆?,即,即右結(jié)合性(例如賦值運(yùn)算符)。關(guān)于右結(jié)合性(例如賦值運(yùn)算符)。關(guān)于“結(jié)合性結(jié)合性”的的概念在其他一些高級語言中是沒有的,是概念在其他一些高級語言中是沒有的,是C和和C+的特點(diǎn)之一,希望能弄清楚。附錄的特點(diǎn)之一,希望能弄清楚。附錄B列出了所有運(yùn)列出了所有運(yùn)算符以及它們的優(yōu)先級別和結(jié)合性。算符以及它們的優(yōu)先級別和結(jié)合性。在表達(dá)式中常遇到不同類型數(shù)據(jù)之間進(jìn)行運(yùn)算,如在表達(dá)式中常遇到不同類型數(shù)據(jù)之間進(jìn)行運(yùn)算,如10+a+1.5-8765.1234*b在進(jìn)行運(yùn)算時(shí),不同類型的數(shù)據(jù)要

58、先轉(zhuǎn)換成同一類在進(jìn)行運(yùn)算時(shí),不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。轉(zhuǎn)換的規(guī)則按圖型,然后進(jìn)行運(yùn)算。轉(zhuǎn)換的規(guī)則按圖2.7所示。所示。圖圖2.72.5.3 表達(dá)式中各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算表達(dá)式中各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算假設(shè)已指定為整型變量,為假設(shè)已指定為整型變量,為float變量,為變量,為double型變量,為型變量,為long型,有下面表達(dá)式:型,有下面表達(dá)式:10+a+i*f-d/e運(yùn)算次序?yàn)椋哼\(yùn)算次序?yàn)椋?進(jìn)行進(jìn)行10+a的運(yùn)算,先將的運(yùn)算,先將轉(zhuǎn)換轉(zhuǎn)換成整數(shù)成整數(shù)97,運(yùn)算結(jié)果為,運(yùn)算結(jié)果為107。進(jìn)行。進(jìn)行i*f的運(yùn)算。先的運(yùn)算。先將將i與與f都轉(zhuǎn)換成都轉(zhuǎn)換成doubl

59、e型,運(yùn)算結(jié)果為型,運(yùn)算結(jié)果為double型。型。整數(shù)整數(shù)107與與i*f的積相加。先將整數(shù)的積相加。先將整數(shù)107轉(zhuǎn)換成雙精轉(zhuǎn)換成雙精度數(shù)(小數(shù)點(diǎn)后加若干個(gè)度數(shù)(小數(shù)點(diǎn)后加若干個(gè)0,即,即107.00000),結(jié)),結(jié)果為果為double型。將變量型。將變量e轉(zhuǎn)換成轉(zhuǎn)換成double型,型,d/e結(jié)結(jié)果為果為double型。將型。將10+a+i*f的結(jié)果與的結(jié)果與d/e的商相的商相減,結(jié)果為減,結(jié)果為double型。型。上述的類型轉(zhuǎn)換是由系統(tǒng)自動進(jìn)行的。上述的類型轉(zhuǎn)換是由系統(tǒng)自動進(jìn)行的。在在C和和C+中,常在表達(dá)式中使用自增中,常在表達(dá)式中使用自增(+)和自減和自減(-)運(yùn)算符,他們的作用是

60、使變量的值增運(yùn)算符,他們的作用是使變量的值增1或減或減1,如,如+i(在使用在使用i之前,先使之前,先使i的值加的值加1,如果,如果i的原值為的原值為3,則執(zhí)行,則執(zhí)行j=+i后,后,j的值為的值為4)-i (在使用在使用i之前,先使之前,先使i的值減的值減1,如果,如果i的原值為的原值為3,則執(zhí)行則執(zhí)行j=-i后,后,j的值為的值為2)i+ (在使用在使用i之后,使之后,使i的值加的值加1,如果,如果i的原值為的原值為3,則執(zhí)行則執(zhí)行j=i+后,后,j的值為的值為3,然后,然后i變?yōu)樽優(yōu)?)i-(在使用在使用i之后,使之后,使i的值減的值減1,如果,如果i的原值為的原值為3,則,則執(zhí)行執(zhí)行j

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論