c++第二章編程基礎_第1頁
c++第二章編程基礎_第2頁
c++第二章編程基礎_第3頁
c++第二章編程基礎_第4頁
c++第二章編程基礎_第5頁
已閱讀5頁,還剩88頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2022-3-1312022-3-132 C+詞法與規則詞法與規則 C+程序的構成程序的構成 數據類型數據類型 常量常量 變量變量 運算符和表達式運算符和表達式 數字字符:數字字符:09 英文字母:英文字母:az,AZ 特殊字符:特殊字符: ! # % & + - = / _(下劃線)(下劃線) “ ; . , : ? ( ) 不可印出字符:空白符(包括空格、換行和制表不可印出字符:空白符(包括空格、換行和制表符)。符)。2022-3-133 由字母或下劃線(或連字符)開頭、后面由字母或下劃線(或連字符)開頭、后面跟字母或數字或下劃線(或空串)組成的跟字母或數字或下劃線(或空串)組成的字符序列

2、,一般有效長度是字符序列,一般有效長度是8個字符(而個字符(而ANSI C標準規定標準規定31個字符),用來標識個字符),用來標識用戶定義的常量名、變量名、函數名、文用戶定義的常量名、變量名、函數名、文件名、數組名、數據類型名和程序名等。件名、數組名、數據類型名和程序名等。2022-3-134 關鍵字是具有特定含義,作為專用定義符關鍵字是具有特定含義,作為專用定義符的單詞,不允許另作他用。的單詞,不允許另作他用。 C+關鍵字見關鍵字見表表2-1。2022-3-1352022-3-136asm auto boolbreakcasecatchcharclass const const_castco

3、ntinuedefault delete dodoubledynamic_castelseenumexplicitexportexternfalsefloatforfriendgotoifinlineintlongmutablenewspace newoperatoroverloadprivateprotectedpublicregisterreinterpretcastreturnshortsignedsizeofstaticstatic_caststructswitchtemplatethisthrowtruetrytypedeftypeidtypenameunionunsignedvir

4、tualvoidvolatilewchar_twhile2022-3-137 運算符是運算符是C+語言實現算術、關系、邏輯等各種語言實現算術、關系、邏輯等各種運算的符號。運算的符號。 C+語言的分隔符主要是:空格、制表符和換行語言的分隔符主要是:空格、制表符和換行符。符。 字符串是由雙引號(非漢字雙引號)括起來的字字符串是由雙引號(非漢字雙引號)括起來的字符串。如符串。如” China”、 ” C+ Program”等。等。 2022-3-138 C+語言中常量包括實型常量(浮點常量)和整語言中常量包括實型常量(浮點常量)和整型常量(十進制、八進制、十六進制常量)、字型常量(十進制、八進制、十

5、六進制常量)、字符常量和字符串常量。符常量和字符串常量。 注釋是用來幫助閱讀、理解及維護程序。在編譯注釋是用來幫助閱讀、理解及維護程序。在編譯時,注釋部分被忽略,不產生目標代碼。時,注釋部分被忽略,不產生目標代碼。C+語語言提供兩種注釋方式:言提供兩種注釋方式: 一種是與一種是與C兼容的多行注釋,用兼容的多行注釋,用/*和和*/分界。分界。 另一種是單行注釋,以另一種是單行注釋,以“/”開頭的表明本行中開頭的表明本行中“/”符號后的內容是注釋。符號后的內容是注釋。#include /預處理命令,包含標準庫頭文件預處理命令,包含標準庫頭文件iostream,它提供了標準輸入,它提供了標準輸入/輸

6、出流類輸出流類,使得輸出流對象使得輸出流對象cout和輸入流對和輸入流對象象cin可以使用可以使用using namespace std; /使用使用C+的命名空間,的命名空間,C+標準庫標準庫中的類和函數是在命名空間中的類和函數是在命名空間std中聲明的中聲明的int main() coutb ) c=a-b; d=c*a; else c=a+b; d=c*b; 2022-3-13152022-3-1316 函數調用語句是由一次函數調用加一個分號而構函數調用語句是由一次函數調用加一個分號而構成的一個語句。成的一個語句。 例如:例如:max(x,y); 例如:例如:; 即只有分號即只有分號“;

7、”的語句,什么也不做。的語句,什么也不做。 例如:結構體、共用體、類類型的聲明及定義例如:結構體、共用體、類類型的聲明及定義 數學中的數據類別數學中的數據類別不同的性質不同的性質不同的運算不同的運算 計算機中的數據類型計算機中的數據類型不同的表示形式不同的表示形式不同的存儲空間不同的存儲空間不同的運算不同的運算2022-3-13172022-3-1318 C+數據類型十分豐富,大體上可分為:數據類型十分豐富,大體上可分為:基本類型基本類型空類型空類型構造類型構造類型指針類型指針類型類類型類類型 如如圖圖2-1所示。所示。 2022-3-1319數據類型數據類型基本類型基本類型空類型(無值類型)

8、空類型(無值類型)void構造類型構造類型類類型類類型class指針類型指針類型整型整型int實型(浮點型)實型(浮點型)字符型字符型邏輯型邏輯型bool結構體類型結構體類型struct數組類型數組類型枚舉類型枚舉類型enum共用體類型共用體類型union單精度型單精度型float雙精度型雙精度型double單字符型單字符型char寬字符型寬字符型w-char圖圖2-1 C+數據類型數據類型2022-3-1320 基本數據類型有基本數據類型有4種:整型(種:整型(int)、浮點型)、浮點型(float和和double)、字符型()、字符型(char)、邏輯)、邏輯型(型(bool)。)。 整型

9、數整型數在計算機內部一般采用定點表示法,用于在計算機內部一般采用定點表示法,用于存儲整型量。(如存儲整型量。(如123,-7等),存儲整數的位等),存儲整數的位數依機器的不同而異。數依機器的不同而異。 浮點數浮點數和整數不同的地方是浮點數采用的是浮點和整數不同的地方是浮點數采用的是浮點表示法,也就是說,浮點數的小數點的位置不同,表示法,也就是說,浮點數的小數點的位置不同,給出的精度也不相同。給出的精度也不相同。 字符類型字符類型表示單個字符,一個字符用一個字節存表示單個字符,一個字符用一個字節存儲。儲。 邏輯類型邏輯類型,也稱布爾類型,表示表達式真和假。,也稱布爾類型,表示表達式真和假。類型類

10、型說明說明字節數字節數數值范圍數值范圍charchar字符型字符型1 1-128127-128127unsigned charunsigned char無符號字符型無符號字符型1 102550255int int 整型整型4 4-21474836482147483647-21474836482147483647unsigned intunsigned int無符號整型無符號整型4 40429496729504294967295signed intsigned int有符號整型有符號整型4 4-21474836482147483647-21474836482147483647short ints

11、hort int短整型短整型2 2-3276832767-3276832767unsigned short intunsigned short int 無符號短整型無符號短整型2 2065535065535signed short intsigned short int有符號短整型有符號短整型2 2-3276832767-3276832767long int long int 長整型長整型4 4-21474836482147483647-21474836482147483647signed long intsigned long int有符號長整型有符號長整型4 4-2147483648214

12、7483647-21474836482147483647unsigned long intunsigned long int 無符號長整型無符號長整型4 40429496729504294967295floatfloat單精度型單精度型4 4-3.4-3.4* *10103838 3.4 3.4* *10103838doubledouble雙精度型雙精度型8 8-1.7-1.7* *1010308308 1.7 1.7* *1010308308long doublelong double長雙精度型長雙精度型1010-1.2-1.2* *1010493249321.21.2* *10104932

13、49322022-3-1321 C+沒有規定不同類型的數占的字節數沒有規定不同類型的數占的字節數 會因計算機系統、編譯器的不同而不同會因計算機系統、編譯器的不同而不同 可用可用sizeof()運算符測試某類型數所占()運算符測試某類型數所占字節數。例如:字節數。例如:coutsizeof(int)endl;/整型數的整型數的字節數字節數coutsizeof(short int)endl;coutsizeof(short)endl; ;/短整短整型的字節數型的字節數2022-3-1322 空類型空類型void用于顯式地說明一個函數不返用于顯式地說明一個函數不返回任何值。回任何值。 還可以說明指向

14、還可以說明指向void類型的指針,說明之類型的指針,說明之后,這個指針就可指向各種不同類型的數后,這個指針就可指向各種不同類型的數據對象。據對象。2022-3-1323 構造類型又稱為組合類型,它是由基本類型按照構造類型又稱為組合類型,它是由基本類型按照某種規則組合而成的。某種規則組合而成的。 數組:數組:是由具有相同數據類型的元素組成的集合。是由具有相同數據類型的元素組成的集合。 結構體:結構體:是由不同的數據類型構成的一種混合的數據是由不同的數據類型構成的一種混合的數據結構,構成結構體的成員的數據類型一般不同,并且結構,構成結構體的成員的數據類型一般不同,并且在內存中分別占據不同的存儲單元

15、。在內存中分別占據不同的存儲單元。 共用體:共用體:是類似于結構體的一種構造類型,與結構體是類似于結構體的一種構造類型,與結構體不同的是構成共用體的數據成員共用同一段內存單元不同的是構成共用體的數據成員共用同一段內存單元。 枚舉:枚舉:是將變量的值一一列舉出來,變量的值只限于是將變量的值一一列舉出來,變量的值只限于列舉出來的值的范圍內。列舉出來的值的范圍內。 2022-3-1324 指針類型變量用于存儲另一變量的地址,指針類型變量用于存儲另一變量的地址,而不能用來存放基本類型的數據。它在內而不能用來存放基本類型的數據。它在內存中占據一個存儲單元。存中占據一個存儲單元。2022-3-1325 類

16、是體現面向對象程序設計的最基本特征類是體現面向對象程序設計的最基本特征,也是體現,也是體現C+與與C最大的不同之處。最大的不同之處。 類是一個數據類型,它定義的是一種對象類是一個數據類型,它定義的是一種對象類型,由數據和方法組成,描述了屬于該類型,由數據和方法組成,描述了屬于該類型的所有對象的性質。類型的所有對象的性質。2022-3-13262022-3-1327 常量是在源程序中直接寫明的數據;常量是在源程序中直接寫明的數據; 其值在整個程序運行期間不可改變。其值在整個程序運行期間不可改變。 C+支持支持5種類型的常量:浮點型、整型、種類型的常量:浮點型、整型、字符型、布爾型和枚舉型。字符型

17、、布爾型和枚舉型。 常量具有類型屬性,類型決定了各種常量常量具有類型屬性,類型決定了各種常量在內存中占據存儲空間的大小。在內存中占據存儲空間的大小。 2022-3-1328 整型數據表示通常意義上的整數,整型常量可以整型數據表示通常意義上的整數,整型常量可以用十進制、八進制或十六進制表示。用十進制、八進制或十六進制表示。(1)十進制常量十進制常量是一個帶正負號的常數(默認情況下為正數),如是一個帶正負號的常數(默認情況下為正數),如+3,-7等。等。(2)八進制常量八進制常量由數字由數字0開頭,其后由若干開頭,其后由若干07的數字組成,如的數字組成,如037,0123等。等。(3)十六進制常量

18、十六進制常量以以0 x或或0X開頭,其后由若干開頭,其后由若干09的數字及的數字及AF(或小(或小寫寫af)的字母組成,如)的字母組成,如0 x173,0 x3af。 2022-3-1329 整型常量可以后跟字母整型常量可以后跟字母l或或L表示表示long型(長整型(長整數),也可以跟數),也可以跟u或或U表示表示unsigned整數(無整數(無符號整數),如以下數字是合法的:符號整數),如以下數字是合法的:375u/無符號整數無符號整數12345UL/無符號長整數無符號長整數54321L/長整數長整數 13579ul/無符號長整數無符號長整數2022-3-1330 浮點數也稱為實型數。只能以

19、十進制形式表示。浮點數也稱為實型數。只能以十進制形式表示。共有兩種表示形式:小數表示法和指數表示法。共有兩種表示形式:小數表示法和指數表示法。(1)小數表示法小數表示法 使用這種表示形式時,實型常量分為整數部分和小數部分。使用這種表示形式時,實型常量分為整數部分和小數部分。其中的一部分可在實際使用時省略,如其中的一部分可在實際使用時省略,如10.2,.2,2.,等。但整數和小數部分不能同時省略。等。但整數和小數部分不能同時省略。(2)指數表示法指數表示法也稱科學記數法,指數部分以也稱科學記數法,指數部分以E或或e開始,而且必須是整開始,而且必須是整數。如果浮點數采用指數表示法,則數。如果浮點數

20、采用指數表示法,則E或或e的兩邊都至少的兩邊都至少要有一位數。如以下數是合法的:要有一位數。如以下數是合法的:1.2e20,-3.4e-2。 浮點常量默認為浮點常量默認為double型,如果后綴型,如果后綴F(或(或f)可)可以使其成為以使其成為float型,例如:型,例如:12.3f。2022-3-1331(1)字符常量)字符常量C+中的字符常量通常是用單引號括起的一個字符。在中的字符常量通常是用單引號括起的一個字符。在內存中,字符數據以內存中,字符數據以ASCII碼存儲,如字符碼存儲,如字符a的的ASCII碼為碼為97。字符常量包括兩類,一類是可顯示字符,。字符常量包括兩類,一類是可顯示字

21、符,如字母、數字和一些符號如字母、數字和一些符號 、+等,另一類是不可等,另一類是不可顯示字符常量,如顯示字符常量,如ASCII碼為碼為13的字符表示回車。的字符表示回車。(2)轉義字符)轉義字符轉義字符是特殊的字符常量,表示時一般以轉義字符轉義字符是特殊的字符常量,表示時一般以轉義字符開始,后跟不同的字符表示不同的特殊字符,開始,后跟不同的字符表示不同的特殊字符,表表2-2列出列出了常用的特殊字符。了常用的特殊字符。 2022-3-13322022-3-1333 字符串常量是由一對雙引號括起來的零個或多個字符序列。字符串常量是由一對雙引號括起來的零個或多個字符序列。 字符串可以寫在多行上,不

22、過在這種情況下必須用反斜線字符串可以寫在多行上,不過在這種情況下必須用反斜線表示下一行字符是這一行字符的延續。表示下一行字符是這一行字符的延續。 字符串常量實際上是一個字符數組,組成數組的字符除顯字符串常量實際上是一個字符數組,組成數組的字符除顯式給出的外,還包括字符結尾處標識字符串結束的符號式給出的外,還包括字符結尾處標識字符串結束的符號0。 例如:例如:2022-3-1334 表示表示“真真”,“假假”這樣判斷的結果這樣判斷的結果 取值:取值: true,表示,表示“真真” false,表示,表示“假假” 存儲存儲 true,存的是,存的是1 false,存的是,存的是0 非非0數值,當邏

23、輯值相當于數值,當邏輯值相當于true 數值數值0,當邏輯值相當于,當邏輯值相當于fasle 邏輯型數存放的實際也是整數,可以進行數學運邏輯型數存放的實際也是整數,可以進行數學運算算 枚舉常量可以通過建立枚舉類型來定義。枚舉常量可以通過建立枚舉類型來定義。 枚舉類型是一種用戶自定義數據類型。在聲明枚舉類型時枚舉類型是一種用戶自定義數據類型。在聲明枚舉類型時,需要把常量的值一一列舉出來,形式如下:,需要把常量的值一一列舉出來,形式如下: enum 枚舉類型名枚舉類型名 常量值常量值1 ,常量值,常量值2 ,常量值,常量值n; 例如:聲明一個名為例如:聲明一個名為color的枚舉類型:的枚舉類型:

24、 enum colorRed,Green,Blue,White,Black; 枚舉常量是一種符號常量。枚舉常量是一種符號常量。Red,Green等是符號常量等是符號常量,它們表示各個枚舉值,在內存中表示為整型數。如果沒,它們表示各個枚舉值,在內存中表示為整型數。如果沒有專門指定,第一個符號常量的枚舉值就是有專門指定,第一個符號常量的枚舉值就是0,其他枚舉,其他枚舉值依次為值依次為1,2,3。所以,。所以,C+自動給自動給Red賦賦0,Green賦賦1,等等。,等等。 2022-3-13352022-3-1336 變量是在程序執行中其值可以變化的量。變量是在程序執行中其值可以變化的量。 變量有三

25、個要素:名字、類型和值。變量有三個要素:名字、類型和值。 變量名的命名要遵守以下規則:變量名的命名要遵守以下規則: 不能是不能是C+保留關鍵字。保留關鍵字。 第一個字符必須是字母或下劃線,中間不能有空格。第一個字符必須是字母或下劃線,中間不能有空格。 變量名除了使用變量名除了使用26個英文大小寫字母和數字外,只能個英文大小寫字母和數字外,只能使用下劃線。使用下劃線。 c+雖然未對變量名的長度進行限制,但它受使用的雖然未對變量名的長度進行限制,但它受使用的編譯系統的制約。一般不要超過編譯系統的制約。一般不要超過31個字符。個字符。 變量名不要與變量名不要與C+中的庫函數名、類名和對象名相同中的庫

26、函數名、類名和對象名相同。 例如,下列變量名是合法的變量名:例如,下列變量名是合法的變量名:a123 c3b file_1 2022-3-13372022-3-1338 變量在使用前必須先定義,指出其數據類變量在使用前必須先定義,指出其數據類型。型。 通過類型定義,變量被分配固定的存儲空通過類型定義,變量被分配固定的存儲空間,直到程序結束時存儲空間被釋放。間,直到程序結束時存儲空間被釋放。 變量的操作受類型控制,如整型變量與浮變量的操作受類型控制,如整型變量與浮點型變量的操作是不同的。點型變量的操作是不同的。 與變量有關的有兩個值:一個是變量所表示的數與變量有關的有兩個值:一個是變量所表示的數

27、據值,另一個是變量的地址值。據值,另一個是變量的地址值。 例如:例如: char c; /定義一個變量,名字為定義一個變量,名字為c c= a; /給變量給變量c賦值,值為賦值,值為a 說明:說明:(1)值)值a便是存放在變量便是存放在變量c的內存地址中的值的內存地址中的值2022-3-13392022-3-1340(2)實際上內存中存放的是字符)實際上內存中存放的是字符a的的ASCII碼值碼值,以整數表示,所以,以整數表示,所以C+中整型數據和字符型數中整型數據和字符型數據之間可以相互賦值,但要注意其表示的合理范據之間可以相互賦值,但要注意其表示的合理范圍。圍。 例如:下面賦值操作是正確的。

28、例如:下面賦值操作是正確的。 int a=x; char ch=41; 變量被定義以后,它就在內存中對應著一個內存變量被定義以后,它就在內存中對應著一個內存地址值,在地址值,在C+中許多操作是針對變量的地址進中許多操作是針對變量的地址進行的,在指針類型一章將詳細介紹。行的,在指針類型一章將詳細介紹。2022-3-1341#include using namespace std;int main( ) int a; char ch; for (ch=a ;ch=z;ch+) a=ch; couta,; coutendl; return 0; 程序輸出什么結果?程序輸出什么結果?2022-3-13

29、42 在在C+中,任何一個變量在被引用之前必須定義。中,任何一個變量在被引用之前必須定義。C+中變量可以在程序中隨時定義,不必集中在中變量可以在程序中隨時定義,不必集中在程序之前。程序之前。 定義格式:定義格式: 類型類型變量名表變量名表; 當有多個變量時,其間用逗號隔開。例如:當有多個變量時,其間用逗號隔開。例如: int i,j,k; float x,y,z; char c1,c2,c3; 注意:在同一個程序塊中不允許定義同名變量,注意:在同一個程序塊中不允許定義同名變量,即不允許重復定義一個變量。即不允許重復定義一個變量。2022-3-1343 變量初始化一般采用兩種方式。變量初始化一般

30、采用兩種方式。 第一種方式是在定義變量時可以給變量賦一個初第一種方式是在定義變量時可以給變量賦一個初值值,例如:,例如:int a=3;float b1,b2=3.4,b3=5.6;const int c=5; 第二種方式是先定義變量,然后通過賦值語句使第二種方式是先定義變量,然后通過賦值語句使變量初始化變量初始化,例如:,例如:int a;a=3; 定義變量時,如果加上關鍵字定義變量時,如果加上關鍵字const,則變量的值在程序,則變量的值在程序運行期間不能改變,這種變量稱為常變量(運行期間不能改變,這種變量稱為常變量(constant variable),類似于),類似于C中的符號常量。中

31、的符號常量。 例如:例如: const int a=3; /a的值始終為的值始終為3,不能再改變,不能再改變 例如:例如: const int a; a=3; /常變量不能被賦值常變量不能被賦值 例如:例如: const int b=3+6*2; /可以用表達式對常變量初可以用表達式對常變量初始化始化2022-3-1344 在程序中,表達式是計算求值的基本單位,它在程序中,表達式是計算求值的基本單位,它是由運算符和運算數組成的式子。運算符是表是由運算符和運算數組成的式子。運算符是表示進行某種運算的符號。運算數包含常量、變示進行某種運算的符號。運算數包含常量、變量和函數等。量和函數等。 C+語言

32、的運算符按其在表達式中與運算對語言的運算符按其在表達式中與運算對象的關系(連接運算對象的個數)可分為:象的關系(連接運算對象的個數)可分為:單目運算(一元運算符,只需一個操作數)單目運算(一元運算符,只需一個操作數)雙目運算(二元運算符,需兩個操作數)雙目運算(二元運算符,需兩個操作數)三目運算(三元運算符,需三個操作數)三目運算(三元運算符,需三個操作數) 2022-3-13452022-3-1346算術運算符算術運算符 + - * / %關系運算符關系運算符 = = !=邏輯運算符邏輯運算符 ! & |位運算符位運算符 | &自增自減運算符自增自減運算符 + -賦值運算符賦值運算符 = 及

33、其擴展(及其擴展(+= -= *= /= %= 等)等)條件運算符條件運算符 ? :指針運算符指針運算符 * 引用運算符和地址運算符引用運算符和地址運算符&逗號運算符逗號運算符 ,成員運算符成員運算符 . 指向成員的運算符指向成員的運算符 -函數調用運算符()函數調用運算符()下標運算符下標運算符作用域運算符作用域運算符:求字節運算符求字節運算符 sizeof強制類型轉換運算符:(強制類型轉換運算符:(type) 動態申請內存運算符:動態申請內存運算符:new釋放內存運算符:釋放內存運算符:delete2022-3-1347 單目運算符:(取負),(取正)單目運算符:(取負),(取正) 單目運

34、算符比雙目運算符優先級高。單目運算符比雙目運算符優先級高。 雙目運算符:、雙目運算符:、(取、(取余)余) 在這五個運算符中,和的優先級比在這五個運算符中,和的優先級比,-要高。另外,只適用于要高。另外,只適用于int型。型。/運運算符對于實型做除法運算,結果為小數;算符對于實型做除法運算,結果為小數;對于整型做除法運算,結果為整數。對于整型做除法運算,結果為整數。2022-3-1348int a,b=39;a=b/2; 結果結果a等于等于19。double x;int c=37;x=c/4.0; 結果為結果為9.25 +: 自增運算符,表示加。自增運算符,表示加。 - - : 自減運算符,表

35、示減。自減運算符,表示減。 這兩個運算符都是單目運算符,且功能相近,只能將這類這兩個運算符都是單目運算符,且功能相近,只能將這類操作符應用于變量而不能應用于常量。例如:操作符應用于變量而不能應用于常量。例如: i=i+1;可使用:可使用: +i;或或 i+;替代替代 前一種方式稱為前綴方式,后一種稱為后綴方式,其結果前一種方式稱為前綴方式,后一種稱為后綴方式,其結果都是使都是使i加加1。 二者的區別是:前綴是先將操作數增二者的區別是:前綴是先將操作數增1(或減(或減1),然后),然后取操作數的新值參與表達式的運算。后綴是先將操作數增取操作數的新值參與表達式的運算。后綴是先將操作數增1(或減(或

36、減1)之前的值參與表達式的運算,到表達式的值)之前的值參與表達式的運算,到表達式的值被引用之后再做加被引用之后再做加1(或減(或減1)運算。)運算。2022-3-13492022-3-1350int x=0,y;y=x+ + x+; 運算結果:運算結果:y=?,x=?2022-3-1351 自增、自減運算符有四種應用格式:自增、自減運算符有四種應用格式:int a=3;b=a+; 等價于等價于 b=a;a=a+1;int a=3;b=a-; 等價于等價于 b=a;a=a-1;(運算符后置用法,代表先使用變量,然后對變量增、減(運算符后置用法,代表先使用變量,然后對變量增、減值)值)int a=

37、3;b=+a; 等價于等價于 a=a+1;b=a;int a=3;b=-a; 等價于等價于 a=a-1;b=a;(運算符前置用法,代表先對變量增、減值,再使用變量)(運算符前置用法,代表先對變量增、減值,再使用變量)2022-3-1352C+編譯器在處理時盡可能多的自左向右將運編譯器在處理時盡可能多的自左向右將運算符結合在一起。算符結合在一起。例如:例如:a+b表示為表示為(a+)+b而不是而不是a+(+b)。在調用函數時,實參的求值順序一般為自右向在調用函數時,實參的求值順序一般為自右向左。例如:左。例如:int a=1;couta+a+c 等價于等價于(a+b)ca!=bc 等價于等價于a

38、!=(bc) 由關系運算符組成的關系表達式的值是邏輯型的由關系運算符組成的關系表達式的值是邏輯型的,即,即bool 型。型。 在在C+中常常將邏輯真用非中常常將邏輯真用非0表示(一般為表示(一般為1),邏輯假用,邏輯假用0表示表示。2022-3-1354 邏輯運算符:邏輯運算符: ?。ㄟ壿嫹牵。ㄟ壿嫹牵?&(邏輯與),(邏輯與), |(邏輯或)(邏輯或) 優先次序:優先次序: 高高 低低 邏輯運算結果類型:邏輯運算結果類型:bool,值只能為,值只能為 true 或或 false 邏輯非(?。┦菃文窟\算符,邏輯與(邏輯非(!)是單目運算符,邏輯與(&)與邏輯或()與邏輯或(|)為雙目運算符。

39、)為雙目運算符。 “&”的運算規則:兩側表達式都為真,結果為真;有的運算規則:兩側表達式都為真,結果為真;有一側表達式為假,結果為假。一側表達式為假,結果為假。 “|”的運算規則:兩側表達式都為假,結果為假;有一的運算規則:兩側表達式都為假,結果為假;有一側表達式為真,結果為真。側表達式為真,結果為真。 邏輯運算真值表如邏輯運算真值表如表表2-3所示。所示。2022-3-13552022-3-1356aba&ba|b!a!b0000110非00110非000101非0非011002022-3-1357(1)賦值運算符:)賦值運算符:“=” 例如:例如:int i;i=3*(4+5); /i的值

40、變為的值變為27 表示將其右側的表達式求出結果,賦給其左側的變量。表示將其右側的表達式求出結果,賦給其左側的變量。(2)賦值運算可進行自動類型轉換。賦值運算的結果)賦值運算可進行自動類型轉換。賦值運算的結果是右側表達式的值,而結果類型是左側變量的數據類是右側表達式的值,而結果類型是左側變量的數據類型。例如:型。例如:int i=1.2*3; /結果為結果為3,而不是,而不是3.6 2022-3-1358(3)賦值運算符的結合性是從右至左的,因此,)賦值運算符的結合性是從右至左的,因此,C+程序中可以出現連續賦值的情況。例如,下面的賦值程序中可以出現連續賦值的情況。例如,下面的賦值是合法的:是合

41、法的:int i,j,k;i=j=k=10; /i,j,k都賦值為都賦值為10(4)復合賦值運算符:)復合賦值運算符:+=(加賦值),(加賦值),-=(減賦值),(減賦值),*=(乘賦值),(乘賦值),/=(除賦值),(除賦值),%=(求余賦值),(求余賦值), =(右移位賦值),(右移位賦值),&=(按位與賦值),(按位與賦值),=(按位異或賦值),(按位異或賦值), |=(按位或賦值)(按位或賦值) 2022-3-1359a+=b等價于等價于 a=a+ba-=b 等價于等價于 a=a-ba*=b 等價于等價于 a=a*ba/=b 等價于等價于 a=a/ba%=b 等價于等價于 a=a%ba

42、=b 等價于等價于 a=a=b 等價于等價于 a=ab a&=b 等價于等價于 a=a&ba=b 等價于等價于 a=aba|=b 等價于等價于 a=a|b 2022-3-1360 例如:例如: int a=12;a+=a; 表示:表示:a=(a+a)=(12+12)=24; 又如:又如:int a=12;a+=a-=a*=a; 表示:表示:a=a*a /a=12*12=144a=a-a /a=144-144=0a=a+a /a=0+0=0 是是C+中唯一的三目運算符,其形式為:中唯一的三目運算符,其形式為:表達式表達式1 ?表達式?表達式2 :表達式:表達式3 運算方式為:先計算表達式運算方式

43、為:先計算表達式1的值,如果其值為非的值,如果其值為非0(真(真),則表達式),則表達式2的值就是整個表達式的最終結果;否則表的值就是整個表達式的最終結果;否則表達式達式3的值就是整個表達式的值。的值就是整個表達式的值。 表達式表達式1是是bool類型,表達式類型,表達式2、3的類型可以不同,條的類型可以不同,條件表達式的最終類型為件表達式的最終類型為 2 和和 3 中較高的類型。中較高的類型。 例如:用條件運算符定義求兩個數例如:用條件運算符定義求兩個數a和和b的最大值。的最大值。 max=(ab)?a:b)2022-3-13612022-3-1362 例如:例如:ab?a:cd?c:d 相

44、當于:相當于:ab?a:(cd?c:d) 例如:例如:ab?a-b:b-a 相當于:相當于:(ab)?(a-b):(b-a) 2022-3-1363 格式:表達式格式:表達式1,表達式,表達式2,表達式,表達式n 求解順序及結果:求解順序及結果: 先求解表達式先求解表達式1,再求解表達式,再求解表達式2,最后求解表達式,最后求解表達式n的值的值 最終結果為表達式最終結果為表達式n的值的值 例如:例如: d1,d2,d3,d4 此處,此處,d1、d2、d3、d4都是一個表達式。整都是一個表達式。整個表達式的值由最后一個表達式的值個表達式的值由最后一個表達式的值d4決定。計決定。計算順序是從左至右

45、依次計算各個表達式的值,最算順序是從左至右依次計算各個表達式的值,最后計算的表達式的值和類型便是整個表達式的值后計算的表達式的值和類型便是整個表達式的值和類型。和類型。2022-3-1364 例如:例如:int a=1,b,c;a=(b=a+1,c=b+2,a=c+1)+a; 結果:結果:a=?,?,b=?,?,c=? 又如:又如:for (min=0,max=length-1;minmax;min+,max-) 循環初始時,循環初始時,min=0,max=length-1;循環條;循環條件是件是minmax;每循環一次,;每循環一次,min加加1,max減減1。 逗號運算符的用途僅在于解決只

46、能出現一個表達式的逗號運算符的用途僅在于解決只能出現一個表達式的地方卻要出現多個表達式的問題。地方卻要出現多個表達式的問題。(1)位()位(bit)是計算機中表示信息的最小單位,)是計算機中表示信息的最小單位,一般用一般用0和和1表示。一個字節在計算機中用表示。一個字節在計算機中用8個位個位表示。表示。C+語言需要將人們通常所習慣的十進制語言需要將人們通常所習慣的十進制數表示為二進制、八進制或十六進制數來理解對數表示為二進制、八進制或十六進制數來理解對位的操作。位的操作。C+中所有的位運算符如下:中所有的位運算符如下:(按位求反)(按位求反) (右移)(右移) &(按位與)(按位與)(按位異或

47、)(按位異或) |(按位或)(按位或) (2)位運算符是對其操作數按其二進制形式逐)位運算符是對其操作數按其二進制形式逐位進行運算,參加位運算的操作數必須為整數。位進行運算,參加位運算的操作數必須為整數。2022-3-1365 運算規則:運算規則: 將兩個運算量的每一個位進行邏輯與操作將兩個運算量的每一個位進行邏輯與操作 例如:例如: 用途:用途: 將某一位置將某一位置0,其他位不變。,其他位不變。例如:將例如:將char型變量型變量a的最低位置的最低位置0: a = a & 0 xfe; ;(0 xfe:1111 1110) 取指定位。取指定位。例如:有例如:有char c; int a;

48、取出取出a的低字節,置于的低字節,置于c中:中:c=a & 0 xff; (0 xff:1111 1111)2022-3-1366 運算規則運算規則將兩個運算量的每一個位進行邏輯或操作將兩個運算量的每一個位進行邏輯或操作 例如:例如: 用途:用途:將某些位置將某些位置1,其他位不變。,其他位不變。例如:將例如:將 int 型變量型變量 a 的低字節置的低字節置 1 : a = a | 0 xff;2022-3-1367 運算規則:運算規則: 兩個操作數進行異或:兩個操作數進行異或:若對應位相同,則結果該位為若對應位相同,則結果該位為 0,若對應位不同,則結果該位為若對應位不同,則結果該位為 1

49、, 例如:計算例如:計算 071052 用途舉例:使特定位翻轉(與用途舉例:使特定位翻轉(與0異或保持原值,與異或保持原值,與1異或取反)異或取反) 例如:要使例如:要使 01111010 低四位翻轉:低四位翻轉:2022-3-1368 運算規則:運算規則:單目運算符,對一個二進制數按位取反。單目運算符,對一個二進制數按位取反。 例如:例如: 025:0000000000010101 025:11111111111010102022-3-1369 左移運算(左移運算()右移后:右移后:低位:舍棄低位:舍棄高位:高位: 無符號數:補無符號數:補0 有符號數:補有符號數:補“符號位符號位”2022

50、-3-13702022-3-1371(1)sizeof運算符是單目運算符,用于計算運算對象運算符是單目運算符,用于計算運算對象在內存中所占字節的多少,它有兩種形式:在內存中所占字節的多少,它有兩種形式:sizeof (類型標識符);(類型標識符);sizeof 表達式;表達式;(2)sizeof可以接受的類型標識符很多,如可以接受的類型標識符很多,如sizeof(int)表示求整型數據在內存中所占字節數。)表示求整型數據在內存中所占字節數。 例如:例如:int a,則,則sizeof(a)表示求變量)表示求變量a在內在內存中所占字節數。存中所占字節數。例如:例如:int a10,則,則size

51、of(a)表示求數組)表示求數組a在內存中所占字節數。在內存中所占字節數。 2022-3-1372(1)優先級)優先級 每種運算符都有一個優先級,優先級是用來標志運算符每種運算符都有一個優先級,優先級是用來標志運算符在表達式中的運算順序的。優先級高的先做運算,優先在表達式中的運算順序的。優先級高的先做運算,優先級低的后做運算,優先級相同的由結合性決定計算順序。級低的后做運算,優先級相同的由結合性決定計算順序。 (高)!,算術運算符,關系運算符,位運算符,(高)!,算術運算符,關系運算符,位運算符,&、|,條件運算符,賦值運算符,逗號運算符(低),條件運算符,賦值運算符,逗號運算符(低) 詳細說

52、明詳細說明(2)結合性)結合性 大多數運算符都是按從左到右計算,只有三類運算符的大多數運算符都是按從左到右計算,只有三類運算符的結合性是從右到左。他們是:單目、三目和賦值。結合性是從右到左。他們是:單目、三目和賦值。2022-3-1373 表達式是用于計算的式子,它由運算符、表達式是用于計算的式子,它由運算符、運算數和括號組成。最簡單的表達式只有運算數和括號組成。最簡單的表達式只有一個常量或變量,當表達式中有兩個或多一個常量或變量,當表達式中有兩個或多個運算符時,表達式稱為復雜表達式,其個運算符時,表達式稱為復雜表達式,其中運算符執行的先后順序由它們的優先級中運算符執行的先后順序由它們的優先級

53、和結合性決定。執行表達式所規定的運算,和結合性決定。執行表達式所規定的運算,所得到的結果值便是表達式的值。所得到的結果值便是表達式的值。 C+中由于運算符很豐富,因此表達式的中由于運算符很豐富,因此表達式的種類也很多。常用的表達式有種類也很多。常用的表達式有6種。種。 2022-3-1374已知已知int a; 算術表達式。例如,算術表達式。例如,a+5.2/3.0-9%5 關系表達式。例如,關系表達式。例如,m=x 邏輯表達式。例如,!邏輯表達式。例如,!a & 8 | 7 條件表達式。例如,條件表達式。例如,a4 ? +a:-a 賦值表達式。例如,賦值表達式。例如,a=7 逗號表達式。例如

54、,逗號表達式。例如,a+5,a=7,a+=42022-3-1375 在表達式中,連續出現兩個運算符時,最在表達式中,連續出現兩個運算符時,最好用空格符分隔。如:好用空格符分隔。如: a+b; 系統將默認為是系統將默認為是a+ +b,因系統將按盡,因系統將按盡量取大的原則來分割多個運算符。如果想量取大的原則來分割多個運算符。如果想執行執行a加加+b,則應寫成:,則應寫成: a+ +b; 在寫表達式中,有時記不清楚運算符的優在寫表達式中,有時記不清楚運算符的優先級時,可使用括號來確定運算符組合。先級時,可使用括號來確定運算符組合。2022-3-1376 算術表達式是由算術運算符和位操作運算算術表達

55、式是由算術運算符和位操作運算符組成的表達式;符組成的表達式; 表達式的值是一個數值;表達式的值是一個數值; 表達式的類型具體地由運算符和操作數決表達式的類型具體地由運算符和操作數決定。定。2022-3-1377#include using namespace std;int main( )int a,b, m=3,n=4;a=7*2+-3%5-4/3; /-3%5=-3,4/3=1b=m+ - -n;coutatbtmtnendl; return 0; 執行結果?執行結果? 2022-3-1378 由關系運算符組成的表達式為關系表達式。由關系運算符組成的表達式為關系表達式。關系表達式的運算結果

56、為邏輯型,常用在關系表達式的運算結果為邏輯型,常用在條件語句和循環語句中。條件語句和循環語句中。 格式:格式: 關系運算符關系運算符 2022-3-1379#include using namespace std;int main( ) char x=m,y=n; int n; n=xy; cout nendl; n=x=y-1; coutnendl; n=(y!=Y)+(53)+(y-x=1); cout nendl; return 0;程序執行結果為?程序執行結果為? 2022-3-1380 由邏輯運算符組成的表達式稱為邏輯表達由邏輯運算符組成的表達式稱為邏輯表達式。邏輯表達式的值為邏輯型

57、,結果為真式。邏輯表達式的值為邏輯型,結果為真或假?;蚣佟?格式:格式: 邏輯運算符邏輯運算符 “&” 的的“短路特性短路特性” 表達式表達式1 & 表達式表達式2 先求解表達式先求解表達式1 若表達式若表達式1的值為的值為false,則最終結果為,則最終結果為false,不再求解表達式,不再求解表達式2 若表達式若表達式1的結果為的結果為true,則求解表達式,則求解表達式2,以表達式,以表達式2的結果作的結果作為最終結果為最終結果 “|” 的的“短路特性短路特性” 表達式表達式1 | 表達式表達式2 先求解表達式先求解表達式1 若表達式若表達式1的值為的值為true,則最終結果為,則最終結

58、果為true,不再求解表達式,不再求解表達式2 若表達式若表達式1的結果為的結果為false,則求解表達式,則求解表達式2,以表達式,以表達式2的結果的結果作為最終結果作為最終結果2022-3-13812022-3-1382 int a=3, b=0; 問下面表達式運算后問下面表達式運算后a和和b的值是多少?的值是多少? ! a & a+b & a+ !a|a+|b+ 第一題是一個由第一題是一個由&組成的邏輯表達式,從左至右計算三組成的邏輯表達式,從左至右計算三個子表達式,只要有一個為個子表達式,只要有一個為0就不再計算其他子表達式。就不再計算其他子表達式。當計算!當計算!a的值為的值為0時,

59、便可確定整個表達式的值為時,便可確定整個表達式的值為0,因,因此后面的子表達式就不再計算了。所以整個表達式的值此后面的子表達式就不再計算了。所以整個表達式的值0。 第二題:這是一個由第二題:這是一個由|組成的邏輯表達式,從左至右計算組成的邏輯表達式,從左至右計算三個子表達式,只要有一個結果為三個子表達式,只要有一個結果為1則不再計算后面的子則不再計算后面的子表達式。第一個子表達式為表達式。第一個子表達式為!a結果為結果為0,再計算,再計算a+結果結果為為4,非,非0即為即為true,所以就不再計算后面的子表達式。,所以就不再計算后面的子表達式。所以整個表達式的值為所以整個表達式的值為1。2022-3-1383 由三目運算符?:組成的表達式為條件表由三目運算符?:組成的表達式為條件表達式。達式。 格式:表達式格式:表達式1 ? 表達式表達式2 : 表達式表達式3 功能:若表達式功能:若表達式1的值為真,則條件表達式的值為真,則條件表達式的值為表達式的值為表達式2的值,否則為表達式的值,否則為表達式3的值。的值。2022-3-1384#include using namespace std;int main( ) int a=3,b=4,c; c=ab? +a:+b; couta,b,cendl; c=a-b?a-3?b:b-a:a; couta,b,

溫馨提示

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

評論

0/150

提交評論