




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、計算機所處理的數據以一定形式存放在內存中,數據計算機所處理的數據以一定形式存放在內存中,數據的存儲方式以及能夠進行的合法運算都與數據類型直的存儲方式以及能夠進行的合法運算都與數據類型直接相關。接相關。C+C+的特點之一就是提供了豐富的數據類型,的特點之一就是提供了豐富的數據類型,以便處理各種不同的數據。以便處理各種不同的數據。數據類型數據類型總是與運算封裝總是與運算封裝在一起,本質上是面向對象的。在一起,本質上是面向對象的。本章將簡要介紹本章將簡要介紹C+C+中的數據類型及相關運算,以及常量、變量、表達式、中的數據類型及相關運算,以及常量、變量、表達式、語句等,最后介紹簡單的輸入輸出方法。語句
2、等,最后介紹簡單的輸入輸出方法。第二章第二章 C+基礎知識基礎知識第二章第二章 C+基礎知識基礎知識21 C+的詞法單位的詞法單位25 運算符、表達式和語句運算符、表達式和語句26 簡單的輸入輸出簡單的輸入輸出24 數組與字符數組數組與字符數組23 常量和變量常量和變量22 C+ 中的數據類型中的數據類型ok2.1 C+的詞法單位的詞法單位211 C+的字符集的字符集 212 關鍵字關鍵字 213 標識符標識符(ID,identifier) 214 標點符號標點符號 ok2.1.1 C+的字符集的字符集ASCII碼碼字符集是計算機中的常用字符集。字符集是計算機中的常用字符集。它包括英文字母及阿
3、拉伯數字等它包括英文字母及阿拉伯數字等128個字符,個字符,存儲一個存儲一個ASCII碼碼占用一個字節占用一個字節單元。單元。由于漢字處理的需要,又出現了由于漢字處理的需要,又出現了漢字國漢字國標碼標碼等對應于不同語言的字符集。國標碼等對應于不同語言的字符集。國標碼的存儲占用兩個字節單元。的存儲占用兩個字節單元。Unicode字符集對各類字符進行字符集對各類字符進行統一的雙統一的雙字節編碼字節編碼。它包括了世界上多種語言的基本。它包括了世界上多種語言的基本字符,字符,最多可容納最多可容納65536個個字符。字符。 ASCII碼碼字符集,國標碼字符集都是它的子集。字符集,國標碼字符集都是它的子集
4、。okC+的字符集的字符集26個個小寫字母小寫字母 abcdefghijklmnopqrstuvwxyz 26個個大寫字母大寫字母 ABCDEFGHIJKLMNOPQRSTUVWXYZ 10個個阿拉伯數阿拉伯數字字 0 1 2 3 4 5 6 7 8 9 其他符號其他符號 + - * / = , . _ : ; ? | ! # % & () 空格空格 C+語言使用下列基本字符來構成詞法單位:語言使用下列基本字符來構成詞法單位:2.1.1結束2.1.2 關關 鍵鍵 字字關鍵字(keyword)又稱保留字。是由系統定義的具有特定含義的英文單詞。關鍵字不能另作它用。C+區分大小寫,關鍵字全部
5、由小寫字母組成。標準C+(ISO14882)定義了74個關鍵字,具體的C+編譯器還會做一些增刪。常用關鍵字及分類見表2.1。ok 關關 鍵鍵 字字數據類型說數據類型說明符與修飾明符與修飾符符bool char wchar_t class const double enum float int long short signed struct union unsigned void volatile存儲類型說存儲類型說明符明符auto extern inline register static訪問說明符訪問說明符friend private protected public其它說明符其它說明符a
6、sm explicit namespace operator template this typedef typename using virtual 語句與標號語句與標號break case catch continue default do else for goto if return switch throw try while 運算符及邏運算符及邏輯值輯值delete false new sizeof true表表2-1 C+2-1 C+常用關鍵字及分類常用關鍵字及分類 ok 關關 鍵鍵 字字2.1.2結束 還有一些關鍵字本書未介紹:還有一些關鍵字本書未介紹: const_cast
7、dynamic_cast reinterpret_cast static_cast export mutable typeid 下面可用一些關鍵字代替邏輯運算符:下面可用一些關鍵字代替邏輯運算符:and and_eq bitand bitorCompl not or or_eqXor xor_eq not_eq2.1.3 標識符標識符標識符(標識符(IdentifierIdentifier,ID ID )是程序員定是程序員定義的義的“單詞單詞”,用來給變量、常量、數據類型、,用來給變量、常量、數據類型、函數等命名。函數等命名。合法標識符合法標識符由由字母或下劃線字母或下劃線開始開始,由,由字母
8、、字母、數字、下劃線數字、下劃線組成,其有效組成,其有效長度為長度為1 13131個字個字符符,長度超過,長度超過3131個字符者只識別個字符者只識別前前3131個字符個字符,VC+VC+標識符長度為標識符長度為1 1247247個字符。個字符。建議使用有一定含義的英文單詞或拼音序建議使用有一定含義的英文單詞或拼音序列作標識符,以提高列作標識符,以提高可讀性可讀性;另外盡量不用下;另外盡量不用下劃線或雙下劃線打頭,以免與系統定義的關鍵劃線或雙下劃線打頭,以免與系統定義的關鍵字沖突。字沖突。ok標識符標識符例例: 判斷下面哪些是合法的標識符:判斷下面哪些是合法的標識符: MyFileSalary
9、 94amountvoid94SalarySalary94$amountf3.5Num_of_Student2.1.3結束2.1.4 標點符號標點符號標點符號包括標點符號包括:#、( )、 ,、,、 :、:、 ;、;、 、 等。等。 標點符號的作用標點符號的作用:有一定的語法意義。如字符和字符串有一定的語法意義。如字符和字符串常量分別用常量分別用 和和 “ ”引起來。引起來。對語法符號起分隔作用。如對語法符號起分隔作用。如 ;等;等2.1.4結束2.2 C+中的數據類型中的數據類型圖圖2-1 C+的的數據結構數據結構實實 型型 float雙精度型雙精度型 doubleC+的數的數據類型據類型基
10、本數據基本數據類型類型非基本數非基本數據類型據類型數組數組 type 指針指針 type *結構結構 struct聯合聯合 union枚舉枚舉 enum類類 class整整 型型 int字符型字符型 char邏輯型邏輯型 bool無值型無值型 void實實 型型ok C+C+對基本數據類型也分別進行了封裝,稱對基本數據類型也分別進行了封裝,稱為為內置數據類型內置數據類型,內置數據類型不僅定義了數據,內置數據類型不僅定義了數據類型,類型,還定義了還定義了常用操作常用操作。本節僅介紹各種基本。本節僅介紹各種基本數據類型的定義,常用操作將在后面介紹。數據類型的定義,常用操作將在后面介紹。 C+C+為
11、強類型語言,所有數據的使用嚴格遵從為強類型語言,所有數據的使用嚴格遵從“先說明后使用先說明后使用”的原則,以便編譯器進行編譯。的原則,以便編譯器進行編譯。 整型整型用來存放整數,整數(有符號的整數)用來存放整數,整數(有符號的整數)在內存中存放的是它的補碼,無符號數沒有符在內存中存放的是它的補碼,無符號數沒有符號位,存放的就是原碼。整數占用的字節數與號位,存放的就是原碼。整數占用的字節數與機型有關,機型有關,3232位機上占用位機上占用4 4個字節。個字節。 字符型字符型用來保存字符,存儲的是該字符的用來保存字符,存儲的是該字符的ASCIIASCII碼,碼,占用一個字節。如大寫字母占用一個字節
12、。如大寫字母A A的的ASCIIASCII碼為碼為6565,在對應的,在對應的一個字節中存放的就是一個字節中存放的就是6565。字符型數據從本質上說也是。字符型數據從本質上說也是整數,可以是任何一個整數,可以是任何一個8 8位二進制整數。位二進制整數。 由于漢語系字符很多,用由于漢語系字符很多,用ASCIIASCII字符集處理遠遠不夠,字符集處理遠遠不夠,因此又創立了雙字節字符集(因此又創立了雙字節字符集(DBCSDBCS:double-byte double-byte character setcharacter set),每個字符用兩個字節來編碼。為便于),每個字符用兩個字節來編碼。為便于
13、軟件的國際化,國際上一些知名公司聯合制定了新的寬軟件的國際化,國際上一些知名公司聯合制定了新的寬字節字符標準字節字符標準UnicodeUnicode。該標準中所有字符都是雙字。該標準中所有字符都是雙字節的,不同的語言和字符集分別占用其中一段代碼。這節的,不同的語言和字符集分別占用其中一段代碼。這種用統一編碼處理西文、中文及其它語言符號,就是種用統一編碼處理西文、中文及其它語言符號,就是unicodeunicode碼。碼。C+C+同時也支持寬字符類型(同時也支持寬字符類型(wchar_twchar_t),或),或稱雙字節字符型稱雙字節字符型。 實型實型和和雙精度型雙精度型都用來存放實數,兩者表示
14、的實數都用來存放實數,兩者表示的實數精度不同。實數在內存中以規范化的浮點數存放,包括精度不同。實數在內存中以規范化的浮點數存放,包括尾數、數符和階碼。數的精度取決于尾數的位數,尾數、數符和階碼。數的精度取決于尾數的位數,32位位機上實型為機上實型為23位(因規范化數的數碼最高位恒為位(因規范化數的數碼最高位恒為1,不必,不必存儲,實際為存儲,實際為24位),雙精度為位),雙精度為52位。位。 邏輯型邏輯型也稱也稱布爾型布爾型,其取值為,其取值為true(邏輯真)和(邏輯真)和false(邏(邏輯假),存儲字節數在不同編譯系統中可能有所不同,輯假),存儲字節數在不同編譯系統中可能有所不同,VC+
15、6.0中為中為1個字節。布爾型在運算中可以和整型相互轉個字節。布爾型在運算中可以和整型相互轉化,化,false對應為對應為0,true對應為對應為1或非或非0無值型無值型主要用來說明函數的返回值類型,將在函數一章中主要用來說明函數的返回值類型,將在函數一章中具體介紹。具體介紹。 基本數據類型還可以加上一些修飾詞,包括:基本數據類型還可以加上一些修飾詞,包括:signed(有符號)、(有符號)、unsigned(無符號)、(無符號)、long(長)、(長)、short(短)。參見下表:(短)。參見下表:2. 2結束 類類 型型名名 稱稱占用字節數占用字節數取取 值值 范范 圍圍bool布爾型布爾
16、型 true, false(signed) char有符號字符型有符號字符型1-128 127unsiged char無符號字符型無符號字符型10 255(signed) short (int)有符號短整型有符號短整型2-32768 32767unsigned short (int)無符號短整型無符號短整型20 65535(signed) int (signed)有符號整型有符號整型4-231 (231-1)unsigned (int)無符號整型無符號整型40 (232-1)(signed) long (int)有符號長整型有符號長整型4-231 (231-1)unsigned long (i
17、nt)無符號長整型無符號長整型40 (232-1)float實型實型4-1038 1038double雙精度型雙精度型8-10308 10308long double長雙精度型長雙精度型8-10308 10308void無值型無值型0無值無值VC+中所有基本數據類型所有基本數據類型2.3 常量和變量2.3.1 變 量2.3.2 字面常量2.3.3 常變量及常量說明符const在程序中,常量和變量是用來表示數據的;在程序中,常量和變量是用來表示數據的;常量又分為字面常量、常變量;常量又分為字面常量、常變量;ok2.3.1 變 量1 1 變量說明變量說明 2 2 變量賦初值變量賦初值 變量變量,在
18、程序中是指可以改變值的量;,在程序中是指可以改變值的量;變量必須用標識符進行標識,稱為變量必須用標識符進行標識,稱為變量名變量名;變量有變量有類型類型之分,如整型變量、字符變量等;之分,如整型變量、字符變量等;任何變量都必須任何變量都必須先說明后使用先說明后使用;一是便于編譯;一是便于編譯程序為變量分配空間,二是便于編譯時進行語程序為變量分配空間,二是便于編譯時進行語法檢查;法檢查;變量使用的第一步,是給變量賦變量使用的第一步,是給變量賦初始值初始值;ok變量說明 在在C+C+中,變量說明的一般格式為:中,變量說明的一般格式為:存儲類型存儲類型數據類型數據類型 變量名變量名1 1, ,變量名變
19、量名2, 2, , ,變量名變量名n n; 下面是變量說明的幾個例子:下面是變量說明的幾個例子:int i, j, k; /說明三個整型變量說明三個整型變量i, j, kfloat x, y, z; /說明三個實型變量說明三個實型變量x, y, zchar c1, c2; /說明兩個字符型變量說明兩個字符型變量c1, c2double dx; /說明一個雙精度型變量說明一個雙精度型變量dx 變量說明 結束 變量賦初值(1 1)變量說明時直接賦初值。變量說明時直接賦初值。例如:例如:int a=3, b=4, c=5;int a=3, b=4, c=5;float x=3.0float x=3.
20、0;(2 2)用賦值語句賦初值。用賦值語句賦初值。嚴格的說,只有前嚴格的說,只有前者可稱賦初值者可稱賦初值例如:例如:float x, e;float x, e;x=3.5; x=3.5; e=2.71828;e=2.71828;2.3.1結束 給變量賦初值稱為初始化,有兩種方法:給變量賦初值稱為初始化,有兩種方法:2.3.2 字面常量1. 1. 整型常量整型常量 4. 4. 字符串常量字符串常量3. 3. 字符型常量字符型常量2. 2. 實型常量實型常量字面常量字面常量,指程序中直接給出的量;,指程序中直接給出的量;常量的值在程序執行過程中保持不變;并常量的值在程序執行過程中保持不變;并且且
21、存儲在程序區存儲在程序區,而非數據區;,而非數據區;根據取值和表示方法的不同,可分為以下根據取值和表示方法的不同,可分為以下幾種:幾種:ok整型常量十進制表示法十進制表示法八進制表示法八進制表示法十六進制表示法十六進制表示法其他表示法其他表示法即整數,可以有多種表示方法:ok 整數的十進制表示方法十進制表示與我們熟悉的書寫方式相同。十進制表示與我們熟悉的書寫方式相同。如如15 -24ok 整數的八進制表示 八進制表示八進制表示以以0 0開始,由數字開始,由數字0 0 7 7組成組成,用來,用來表示一個八進制數。表示一個八進制數。如:如:012012 / /八進制數八進制數1212,即十進制數,
22、即十進制數1010-0655-0655/八進制數八進制數-655-655,即十進制數,即十進制數-429-429ok 整數的十六進制表示 十六進制十六進制以以0X0X(大小寫均可)開始,由數(大小寫均可)開始,由數字字0 0 9 9和字母和字母A A F F(大小寫均可)組成(大小寫均可)組成,用來,用來表示一個十六進制數。表示一個十六進制數。以下是一些以下是一些常整數常整數的例子:的例子:0 x32A /0 x32A /十六進制數十六進制數32A32A,即十進制數,即十進制數810810-0 x2fe0 /-0 x2fe0 /十六進制數十六進制數-2fe0-2fe0, /即十進制數即十進制數
23、-12256-12256ok整數的其他表示方法 整型常量還可以表示整型常量還可以表示長整數長整數和和無符號整數無符號整數。長整型常數以長整型常數以 L L 或或 l l 結尾,無符號常整數以結尾,無符號常整數以 U U 或或 u u 結尾,以結尾,以 U LU L 或或 L UL U(大小寫均可)(大小寫均可)結尾則可表示無符號長整型常數。結尾則可表示無符號長整型常數。例如:例如:-84L-84L/十進制長整數十進制長整數-84-84026U026U/八進制表示的無符號整數八進制表示的無符號整數26260X32LU /0X32LU /十六進制表示的無符號長整型數十六進制表示的無符號長整型數32
24、32。整數 結束 實型常量( (1)1)一般形式一般形式與平時書寫形式相同,與平時書寫形式相同,由數字由數字 0 0 9 9和小數點組成和小數點組成。例如:。例如:0.23 -125.76 0.0 .46 -35.0.23 -125.76 0.0 .46 -35.(2) (2) 指數形式(也稱為科學表示法)指數形式(也稱為科學表示法)表示為表示為尾尾數乘以數乘以1010的次方形式,由的次方形式,由尾數尾數、E E或或e e和和階數階數組組成成。指數形式要求在。指數形式要求在E E或或e e前面的前面的尾數部分必須尾數部分必須有數字有數字,后面的,后面的指數部分必須為整數指數部分必須為整數。 例
25、例 : : 判斷下列表示是否合法判斷下列表示是否合法123E12 -.34e-2 E4 1.43E3.5 包含小數點和包含小數點和1010的冪的數為實型常量,有的冪的數為實型常量,有兩種表示方法:兩種表示方法:實數實數 結束結束字符型常量 字符常量是用單引號引起來的單個字符字符常量是用單引號引起來的單個字符。在。在內存中保存的是字符的內存中保存的是字符的ASCIIASCII碼值。在所有字符碼值。在所有字符中,有些是可顯示字符,通常就用單引號引起中,有些是可顯示字符,通常就用單引號引起來表示:來表示:a a /字符字符a a /字符字符 44/字符字符4 4 /空格字符空格字符有些是特殊情況字符
26、,如不可顯示的字符等,有些是特殊情況字符,如不可顯示的字符等,c+c+使用使用轉義序列轉義序列表示方法,如表示方法,如(祥見表祥見表2-32-3,此處略):此處略):n n /換行換行 / / 字符字符 字符常字符常 結束結束 4. 字符串常量字符串常量與字符型常量的區別字符串常量與字符型常量的區別字符串常量字符串常量aa占兩個字節,存放占兩個字節,存放aa和和 0 0,值為,值為0 x61000 x6100字符型常量字符型常量aa占一個字節,存放占一個字節,存放aa,值為,值為0 x610 x612.3.2結束結束用雙引號引起來的若干個字符稱為字符串常量用雙引號引起來的若干個字符稱為字符串常
27、量。例如例如:I am a Chinese.,123, a ,:I am a Chinese.,123, a , 2.3.3 常變量及常量說明符const用常量說明符用常量說明符constconst給字面常量起個名字(標識符),給字面常量起個名字(標識符),這個標識符就稱為這個標識符就稱為標識符常量標識符常量;因為標識符常量的說明和引用形式很像變量,所以也因為標識符常量的說明和引用形式很像變量,所以也稱稱常變量常變量;例如:;例如:constconst float PI=3.14159; float PI=3.14159;const const int Number_of_Student=10
28、0; int Number_of_Student=100;常變量必須也只能在說明時進行初始化;常變量必須也只能在說明時進行初始化;常變量初始化之后,不允許再被賦值;常變量初始化之后,不允許再被賦值;常變量必須先說明后使用;常變量必須先說明后使用;常變量存儲在數據區,并且可以按地址訪問,編譯時常變量存儲在數據區,并且可以按地址訪問,編譯時系統對常變量進行類型檢查。系統對常變量進行類型檢查。C+C+建議使用常變量,而不要使用文字常量。建議使用常變量,而不要使用文字常量。2.3.3 結束結束2.4 數組與字符數組2.4.1 2.4.1 數數 組組2.4.2 2.4.2 字字 符符 數數 組組本節介紹
29、一種用戶自定義的導出數據類型本節介紹一種用戶自定義的導出數據類型 數組類型數組類型ok2.4.1 數組數組是有限個數組是有限個同類型同類型元素的有序集合元素的有序集合,這些元,這些元素有一個共同的名字,每個元素以其在數組中的素有一個共同的名字,每個元素以其在數組中的位置區分位置區分,位置用,位置用下標下標表示。表示。 例如數列或向量就可以看作一個數組,其中的例如數列或向量就可以看作一個數組,其中的元素用一個下標即可確定。元素用一個下標即可確定。 矩陣也可看作一個數組,其中的元素需要用矩陣也可看作一個數組,其中的元素需要用“行行”、“列列”兩個下標確定。兩個下標確定。 數組下標的個數稱作數組下標
30、的個數稱作維數維數,上述代表數列的數,上述代表數列的數組和代表矩陣的數組分別稱為一維數組和二維數組和代表矩陣的數組分別稱為一維數組和二維數組。本節只介紹一維數組。組。本節只介紹一維數組。ok 一維數組定義一個一維數組的一般格式為:定義一個一維數組的一般格式為: 存儲類型存儲類型 數據類型數據類型 數組名數組名 常量常量 ; 數據類型指的是數組中元素的數據類型,數據類型指的是數組中元素的數據類型,可以是可以是C+中定義的任何一種數據類型。中定義的任何一種數據類型。 寫在中括號中的常量用來定義數組大小,寫在中括號中的常量用來定義數組大小,即數組中元素的個數。即數組中元素的個數。例如:例如:int
31、m5; /定義數組定義數組m, 其中有其中有5個整數個整數 const int N=3; float xN;/數組數組x中有中有3個實數個實數ok 一維數組 數組在存儲單元中是按下標的順序連續存放的,數組在存儲單元中是按下標的順序連續存放的,任何一個元素都可以單獨訪問,其標識方法是用任何一個元素都可以單獨訪問,其標識方法是用數組名和下標:數組名和下標: 數組名數組名 表達式表達式 表達式用來計算下標值。表達式用來計算下標值。C+C+中規定數組第一中規定數組第一個元素的下標為個元素的下標為0 0。okm4m3m2m1m0 x2x1x0 一維數組 C+C+中數組大小在編譯時確定,編譯系統按照定義為
32、中數組大小在編譯時確定,編譯系統按照定義為數組分配一段連續的存儲單元,這段單元的大小也是不數組分配一段連續的存儲單元,這段單元的大小也是不能改變的,因此數組大小不能用變量定義,而只能是一能改變的,因此數組大小不能用變量定義,而只能是一個正整數常量。個正整數常量。 下列定義是下列定義是非法非法的:的:int count;float scount;/數組個數不能是變量,且必數組個數不能是變量,且必/須在定義時指明須在定義時指明;const float Num=3;int nNum;/數組個數不能是實數數組個數不能是實數;對數組的訪問對數組的訪問指的指的是對數組元素的訪問是對數組元素的訪問,不能直接
33、將數,不能直接將數組名作為訪問對象,對數組賦值也必須對每一個元素逐組名作為訪問對象,對數組賦值也必須對每一個元素逐個賦值。個賦值。參見下例:參見下例: ok 一維數組int_arr3=int_arr2=int_arr1=int_arr0= 11231輸出2.4.1結束結束1231+2=3【例【例21】使用數組的簡單例子。】使用數組的簡單例子。# include void main() int int_arr4;int_arr0=1; int_arr1=1; int_arr2=2;int_arr3=int_arr1+int_arr2;coutint_arr0n int_arr1n int_arr
34、2n int_arr3 n; 2.4.2 字符數組如果數組中的元素為字符,就稱為如果數組中的元素為字符,就稱為字符數組字符數組。例如:。例如:char string110; /可用來保存可用來保存1010個字符的字符數組個字符的字符數組; ;char city_name1 = N,a,n,j,i,n,g; /可用來保存可用來保存7 7個字符的字符數組個字符的字符數組; ;C+C+中字符數組用來保存字符串中字符數組用來保存字符串。允許直接用字符串常。允許直接用字符串常量給字符數組量給字符數組初始化初始化。例如:。例如:char city_name2=”Nanjing”;用字符串初始化,字符數組會
35、自動加上一個用字符串初始化,字符數組會自動加上一個串結束符串結束符00 。串結束符在字符串操作中具有十分重要的意。串結束符在字符串操作中具有十分重要的意義,因此在定義字符數組大小時,要注意留出足夠的空義,因此在定義字符數組大小時,要注意留出足夠的空間保存串結束符。間保存串結束符。ok 字符數組 為了處理字符串,為了處理字符串,C+中提供了若干中提供了若干字符串處理函字符串處理函數數,這些函數定義在文件,這些函數定義在文件string.h中,其中包括:中,其中包括: strlen(s),返回字符串,返回字符串s的實際長度(不包括的實際長度(不包括0););strcpy(s1,s2),將字符串,將
36、字符串s2中中0之前的所有字符依次之前的所有字符依次賦值到字符串賦值到字符串s1中,最后中,最后再加上一個再加上一個0。由于不能直接。由于不能直接對字符數組名賦值,所以將一個字符串的值賦給另一個字對字符數組名賦值,所以將一個字符串的值賦給另一個字符串必須用符串必須用字符串拷貝函數字符串拷貝函數完成。例如:完成。例如:char string220;string2=”VC+”;/非法非法strcpy(string2, “VC+”);/合法合法 字符數組【例【例22】 字符數組和字符串處理函數的應用。字符數組和字符串處理函數的應用。# include # include void main( ) c
37、har s1 =”Hello C+”;/初始化決定數組初始化決定數組s1有有10個元素個元素char s210, s320;s20= B; s21= e; s22=g; s23= i;s24= n; s25= 0; /對字符串結束處理非常重要對字符串結束處理非常重要strcpy(s3, s2);cout”The length of”s1”is:”strlen(s1)n;/只有字符數組可整體輸出,因為有結束符只有字符數組可整體輸出,因為有結束符couts2ts3ab/結果是結果是?根據右結合根據右結合原則其運算原則其運算過程如下:過程如下:a5b3.23F, 即即0F即即0優優先先級級運運算算符
38、符名名 稱稱語語 義義2!邏輯非邏輯非, 單目單目操作數的值為真,則結操作數的值為真,則結果為假果為假;12&邏輯與邏輯與,雙目雙目當兩個操作數全為真時,當兩個操作數全為真時,結果為真,否則為假結果為真,否則為假;13|邏輯或邏輯或,雙目雙目兩個操作數中有一個為兩個操作數中有一個為真,則結果為真真,則結果為真;邏輯運算符邏輯運算符 邏輯運算符用來進行邏輯運算。其操作數和運邏輯運算符用來進行邏輯運算。其操作數和運算結果均為算結果均為邏輯量邏輯量。運算結果同樣可以作為一個。運算結果同樣可以作為一個整整數數參與其他運算。參與其他運算。 由于由于邏輯值邏輯值和和整數整數之間的之間的對應關系,對
39、應關系,也允許也允許整型整型和和字符型字符型操作數進行操作數進行邏輯運算邏輯運算:21&021&0/邏輯與,邏輯與,2121與與0 0,結果為假:,結果為假:0 021|021|0/邏輯或,邏輯或,2121或或0 0,結果為真:,結果為真:1 1!21!21/邏輯非,邏輯非,2121的非,結果為假:的非,結果為假:0 0邏輯運算符邏輯運算符 位運算符(1)按位取反運算符)按位取反運算符“” (2)左移運算符)左移運算符“” (4)按位與運算符)按位與運算符“&” (5)按位或運算符)按位或運算符“|” (6)按位異或運算符)按位異或運算符“” okc+c+語言提供字位運
40、算,它對操作數的各個位進行操作。語言提供字位運算,它對操作數的各個位進行操作。(1 1)按位取反運算符)按位取反運算符“”將操作數的每個二進制位取反,即將操作數的每個二進制位取反,即1 1變為變為0 0,0 0變為變為1 1。例如,。例如,整數整數a a的值為的值為1001101110011011,則,則aa的值為的值為0110010001100100。(2 2)左移運算符)左移運算符“”運算一般格式為:運算一般格式為:ana”與左移運算符類同,將左操作數向右移動右操作數指定的與左移運算符類同,將左操作數向右移動右操作數指定的二進制位數,忽略移位后的小數部分,并在高位補二進制位數,忽略移位后的
41、小數部分,并在高位補0 0。一。一個整數右移個整數右移n n位相當于位相當于除以除以2 2的的n n次方,但比除法快。次方,但比除法快。 在在VC+6.0VC+6.0中有符號數右移時高位補符號位,嚴格對應除中有符號數右移時高位補符號位,嚴格對應除法。法。以上三種單目運算不影響數據本身的值,而是只產生一以上三種單目運算不影響數據本身的值,而是只產生一個中間量,這個中間量被引用后即不再存在。個中間量,這個中間量被引用后即不再存在。 (4 4)按位與運算符)按位與運算符“&”&”將兩個操作數的對應位逐一進行按位邏輯與運算。運算規則將兩個操作數的對應位逐一進行按位邏輯與運算。運算規則為
42、:對應位均為為:對應位均為1 1時,該位運算結果為時,該位運算結果為1 1;否則為;否則為0 0。例如:。例如:a 01001101a 01001101b 00001111b 00001111a & b 00001101a & b 00001101該運算可用來將整數的某些位置該運算可用來將整數的某些位置0 0,而保留所需要的位,上例,而保留所需要的位,上例保留了低四位。保留了低四位。(5 5)按位或運算符)按位或運算符“|”|”將兩個操作數的對應位逐一進行按位邏輯或運算。運算規則將兩個操作數的對應位逐一進行按位邏輯或運算。運算規則為:只要有一個數對應位為為:只要有一個數對應位為
43、1 1,該位運算結果即為,該位運算結果即為1 1;兩個數;兩個數對應位均為對應位均為0 0,該位結果為,該位結果為0 0。例如:。例如:a 01001101a 01001101b 00001111b 00001111a | b 01001111a | b 01001111該運算符可用來將整數的某些位置該運算符可用來將整數的某些位置1 1。上例高四位不變,低四。上例高四位不變,低四位全位全1 1。(6 6)按位異或運算符)按位異或運算符“”將兩個操作數的對應位逐一進行按位異或運算。運算規則為:將兩個操作數的對應位逐一進行按位異或運算。運算規則為:當對應位的值不同時,該位運算結果為當對應位的值不同
44、時,該位運算結果為1 1,否則為,否則為0 0。例如:。例如:a 01001101a 01001101b 00001111b 00001111a b 01000010a b 01000010該運算符可用來將一個整數的某些位取反,或將整型變量的該運算符可用來將一個整數的某些位取反,或將整型變量的值置值置0 0(將整型變量與自身按位異或)。上例低四位取反,(將整型變量與自身按位異或)。上例低四位取反,高四位不變。高四位不變。需要說明的一點是,以上例子中的整數都只取了低需要說明的一點是,以上例子中的整數都只取了低8 8位一個位一個字節。字節。4.賦值運算符ok 將數據存放到相應存儲單元中稱為將數據存
45、放到相應存儲單元中稱為賦值賦值,如果,如果該單元中已有值,賦值操作以新值取代舊值;從該單元中已有值,賦值操作以新值取代舊值;從某個存儲單元中取出數據使用,稱為引用,引用某個存儲單元中取出數據使用,稱為引用,引用不影響單元中的值,即一個量可以多次引用。不影響單元中的值,即一個量可以多次引用。常常量量只能引用,不能賦值。只能引用,不能賦值。 賦值通過賦值運算符賦值通過賦值運算符“=”來完成,其意義是將來完成,其意義是將賦值號右邊的值送到左邊變量所對應的單元中。賦值號右邊的值送到左邊變量所對應的單元中。賦值號不是等號,它具有方向性賦值號不是等號,它具有方向性。 C+C+將變量名代表的單元稱為將變量名
46、代表的單元稱為 “ “左值左值”,而將變,而將變量的值稱為量的值稱為“右值右值”。 左值必須是內存中一個左值必須是內存中一個可以訪問且可以合法修改的對象可以訪問且可以合法修改的對象,因此只能是變,因此只能是變量名,量名,而不能是常量或表達式而不能是常量或表達式。4.賦值運算符例如下面的賦值運算是錯誤的:例如下面的賦值運算是錯誤的:3.1415926=pi;/左值不能是常數左值不能是常數x+y=z;/左值不能是表達式左值不能是表達式const int N=30;N=40;/左值不能是常變量左值不能是常變量5.自增自減運算運算分前置和后置兩種,運算分前置和后置兩種,前置是先增減后引用前置是先增減后
47、引用,即先,即先對變量自加或自減,用新的值參與其他運算;對變量自加或自減,用新的值參與其他運算;后置則后置則是先引用后增減是先引用后增減,即用變量原來的值參與其他運算,即用變量原來的值參與其他運算,然后再對變量進行自加或自減然后再對變量進行自加或自減, ,例如:例如:int i=5, j=5, m, n;int i=5, j=5, m, n;m=i+;m=i+; / /后置;相當于后置;相當于m=i; i=i+1; m=i; i=i+1; / /結果:結果:i i的值為的值為6 6,m m的值為的值為5 5; ;n=+j;n=+j; / /前置;相當于前置;相當于j=j+1;n=j;j=j+1
48、;n=j; / /結果:結果:j j的值為的值為6 6,n n的值為的值為6 6; ;意義:使變量當前值加意義:使變量當前值加1 1或減或減1 1,再賦給該變量。再賦給該變量。要求:操作數只能是要求:操作數只能是變量變量,不能是常量或表達式;,不能是常量或表達式;ok sizeof( ) 運算符 用于計算一個操作數類型或一個變量的字用于計算一個操作數類型或一個變量的字節數。一般格式為:節數。一般格式為:sizeof (sizeof (數據類型數據類型) ) 或或 sizeof(sizeof(變量名變量名) ) 例如:例如:sizeof(int) 值為值為4 sizeof( float) 值為值
49、為4double x; sizeof( x) 值為值為8 2.5.1結束結束2.5.2 表達式1 算術表達式算術表達式 2 關系表達式關系表達式 3 邏輯表達式和邏輯表達式求值的優化邏輯表達式和邏輯表達式求值的優化 4 賦值表達式與復合賦值表達式賦值表達式與復合賦值表達式 5 逗號表達式逗號表達式 ok1.算術表達式使用時注意:使用時注意:1 1、表達式中每個變量都有確定的值時才能進、表達式中每個變量都有確定的值時才能進行表達式求值;行表達式求值;2 2、考慮到算術運算溢出和精度問題,應避免:、考慮到算術運算溢出和精度問題,應避免:(1 1)兩個很接近的數直接相減;)兩個很接近的數直接相減;(
50、2 2)除數是一個很小的數;)除數是一個很小的數;(3 3)整數的連續乘運算。)整數的連續乘運算。ok由算術運算符連接的表達式稱為算術表達式由算術運算符連接的表達式稱為算術表達式,例如:例如:a+b*3 ;2.關系表達式例如:例如:abcabc / /* *等同于等同于(ab)c(ab)c,先求,先求ab ab 的值,的值, 再將結果再將結果0 0或或1 1與與c c比較大小比較大小* */ /a+bc+da+bc+d / /* *等同于等同于(a+b)(c+d)(a+b)(c+d), 結果為結果為0 0或或1 1* */ /建議使用括號建議使用括號y=aby=ab / /* *計算計算aba
51、b的值的值0 0或或1 1 賦給賦給y y,y y的值為的值為0 0或或1 1* */ /由關系運算符連接的表達式。值為由關系運算符連接的表達式。值為truetrue或或falsefalse。ok3.邏輯表達式和邏輯表達式求值的優化由邏輯運算符連接的表達式稱為邏輯表達式。邏輯表達式的由邏輯運算符連接的表達式稱為邏輯表達式。邏輯表達式的值為值為truetrue或或falsefalse。這個值可對應整數。這個值可對應整數1 1或或0 0參與其他運算。參與其他運算。ok已知已知: int a=10, b=20, c=30;float x=1.8, y=2.4; ay|ab-!c按按優先級優先級與與結
52、合性結合性,其,其求值順序求值順序等同于:等同于:(ay)|(a(b-(!c)t1=1 t2=0t4=0 -&t3=0t5=bt6=1| 得整個表達式的值為:得整個表達式的值為:1 13.邏輯表達式和邏輯表達式求值的優化在求邏輯表達式值的過程中,一旦表達式的在求邏輯表達式值的過程中,一旦表達式的值能夠確定,就不再逐步進行下面的運算。值能夠確定,就不再逐步進行下面的運算。稱為稱為“求值優化求值優化”。已知已知: int a=10, b=20, c=30;求:求: ab | c+ /結果以及結果以及a,b,c的值的值t1=1整個表達式的值為整個表達式的值為 1 1可見可見: : 表達式表達
53、式 c+ c+ 已不需要計算已不需要計算所以所以: : c不變仍為不變仍為 30編程人員在使用邏輯運算時應當加以小心,優化計算固然編程人員在使用邏輯運算時應當加以小心,優化計算固然提高了運算效率,但可能產生副作用。提高了運算效率,但可能產生副作用。所謂副作用,就是所謂副作用,就是出乎設計人員的意料,得到預想不到的結果。出乎設計人員的意料,得到預想不到的結果。4.賦值表達式與復合賦值表達式 賦值表達式的格式為:賦值表達式的格式為: 變量變量 = = 表達式表達式 例如:例如:x=5+6;x=5+6;a=b=c=d+1a=b=c=d+1; ; 在在C+C+中,所有的雙目算術運算符和位運算符均可與中
54、,所有的雙目算術運算符和位運算符均可與賦值運算符組合成一個單一運算符,稱為賦值運算符組合成一個單一運算符,稱為復合賦值運復合賦值運算符算符。包括以下。包括以下1010個:個:+ = = * = / = % = = &= | = =復合賦值運算符的要求與格式與賦值運算符完全相同,復合賦值運算符的要求與格式與賦值運算符完全相同,表示為:表示為: 變量變量 復合賦值運算符復合賦值運算符 表達式表達式 它等同于它等同于 變量變量 = = 變量變量 運算符運算符 表達式表達式 例如:例如:x+=5x+=5 等同于:等同于:x=x+5x=x+5ok 逗號表達式 C+中,逗號既是分隔符,又是運算符,
55、中,逗號既是分隔符,又是運算符,用逗號連接起來的表達式稱為逗號表達式。用逗號連接起來的表達式稱為逗號表達式。 一般格式為:一般格式為:表達式表達式1,表達式,表達式2,表達式,表達式n 逗號表達式中的每一個表達式都會被運算,逗號表達式中的每一個表達式都會被運算,整個逗號表達式的值為最后一個表達式的值。整個逗號表達式的值為最后一個表達式的值。例如:例如:a=(x=3,x+=6,5+6);/a=11 x=92.5.2結束結束2.5.3算術類型轉換和賦值類型轉換1 1 不同類型數據的混合運算不同類型數據的混合運算 2 2 賦賦 值值 類類 型型 轉轉 換換 ok運算過程中,當某個二元運算符兩邊的操作
56、數類型不同但運算過程中,當某個二元運算符兩邊的操作數類型不同但屬于類型相容時,系統先將精度低的操作數變換到與另一屬于類型相容時,系統先將精度低的操作數變換到與另一操作數精度相同,而后再進行運算。操作數精度相同,而后再進行運算。 所謂類型相容,指的就是類型不同但系統可以所謂類型相容,指的就是類型不同但系統可以自動進行轉換。自動進行轉換。當賦值號的左值和右值類型不一致但屬于類型相容時,當賦值號的左值和右值類型不一致但屬于類型相容時,由系統自動進行類型轉換。由系統自動進行類型轉換。 1.不同類型數據的混合運算charshortintlongunsigned charunsigned shortuns
57、igned intunsigned longfloatdoublelong double數據類型轉換方向數據類型轉換方向ok具體規則如下:具體規則如下:(1 1)字符字符可以作為可以作為整數整數參與數值運算,參與數值運算,整數值為其整數值為其ASCIIASCII碼碼。(2 2)操作數為字符或短整型時,系統自動變換成)操作數為字符或短整型時,系統自動變換成整型整型。(3 3)操作數為實型時,系統自動變換成)操作數為實型時,系統自動變換成雙精度型雙精度型。(4 4)其余情況,當兩操作數類型不同時,將精度低(或表示范)其余情況,當兩操作數類型不同時,將精度低(或表示范圍小)的操作數的數據類型變換到與
58、另一操作數類型相同再進圍小)的操作數的數據類型變換到與另一操作數類型相同再進行運算行運算 例如有變量例如有變量: :char c1, c2; int i1, i2; float x1, x2;char c1, c2; int i1, i2; float x1, x2;則表達式則表達式x2=c1x2=c1* *i1+c1i1+c1* *x1+c1x1+c1* *c2c2的求值過程為:將的求值過程為:將c1c1轉換成整型,完成轉換成整型,完成c1c1* *i1i1,結果表示為,結果表示為t1t1;將;將c1c1和和x1x1均轉換成雙精度型,完成均轉換成雙精度型,完成c1c1* *x1x1,結果表示
59、為,結果表示為t2t2;將;將c1c1和和c2c2均轉換成整型,完成均轉換成整型,完成c1c1* *c2c2,結果表示為,結果表示為t3t3;然后然后t1t1轉換成雙精度型,完成轉換成雙精度型,完成t1+t2t1+t2,結果表示為,結果表示為t4t4;將;將t3t3轉換成雙精度型,完成轉換成雙精度型,完成t4+t3t4+t3,最后結果轉為單精度型賦給,最后結果轉為單精度型賦給x2x2。 2.賦值類型轉換2.5.3結束結束系統自動進行類型轉換規則:系統自動進行類型轉換規則:1 1、實型數賦給整形變量:取整;注意溢出;、實型數賦給整形變量:取整;注意溢出;2 2、整型數賦給實型變量:先轉換為實型數
60、;、整型數賦給實型變量:先轉換為實型數;3 3、字符型數賦給整形變量:、字符型數賦給整形變量:ASCIIASCII碼為依據;碼為依據;分為兩種情況:符號位是分為兩種情況:符號位是0 0或或1 1時不同;時不同;若符號位為若符號位為1,則低位字節不變,高位字節全部置,則低位字節不變,高位字節全部置1再賦值。再賦值。4 4、絕對值較大的數賦給表達范圍較小的數據、絕對值較大的數賦給表達范圍較小的數據類型時,注意溢出;類型時,注意溢出;2.5.4 強制類型轉換運算符ok其格式為:其格式為: () () /形式一形式一或或 ()/形式二形式二作用:作用:將表達式強制轉換為將表達式強制轉換為類型,類型, 但表達式的值及其類型不變。但表達式的值及其類型不變。任意數據類型任意數據類型 賦
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數據庫管理系統在大數據時代的優化策略-洞察闡釋
- 拆除建筑垃圾清運服務協議書合同范本
- 跨國汽車公司股份交易及車輛品牌使用權共享協議
- 能源領域撤資退股合同范本
- 紡織輔料行業全球市場進入與品牌策略-洞察闡釋
- 部編版科學知識點復習計劃
- 能源行業可再生能源采購與并網合同
- 出納人員保密及財務數據處理規范合同
- 特色小鎮廠房租賃合同規范
- 高標準倉儲設施租賃管理服務協議范本
- 功與功率 課件高一下學期物理人教版(2019)必修第二冊
- 成品入庫、發貨流程圖
- 光柵安全檢查作業指導
- 不對稱短路故障分析與計算(電力系統課程設計)
- GB/T 28731-2012固體生物質燃料工業分析方法
- GB/T 13313-1991軋輥肖氏硬度試驗方法
- 防汛物資供應項目實施方案
- 局下屬企業全面審計實施方案
- SY∕T 5280-2018 原油破乳劑通用技術條件
- 三位數乘以一位數精選練習題(100道)
- 城市規劃設計收費指導意見+收費標準
評論
0/150
提交評論