[工學(xué)]c++程序設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩435頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、C++程序設(shè)計(jì),第 1 章 C++入門(mén)第 2 章 數(shù)據(jù)類(lèi)型和表達(dá)式第 3 章 語(yǔ)句和函數(shù) 第 4 章 面向?qū)ο蟮幕靖拍钆c類(lèi)第 5 章 對(duì)象第 6 章 指針和引用第 7 章 繼承第 8 章 靜態(tài)成員和友元第 9 章 多態(tài)和虛函數(shù)第 10 章 輸入輸出流第 11 章 模板和異常處理第 12 章 綜合應(yīng)用實(shí)例,第一章 C++ 入門(mén),1.1 什么是 C++1.2 一個(gè) C++ 程序1.3 C

2、++ 程序的結(jié)構(gòu)1.4 例題分析和小結(jié),,1.1 什么是 C++,1.1.1 什么是 C++ 程序設(shè)計(jì)語(yǔ)言1.1.2 C++程序開(kāi)發(fā)過(guò)程,,1.1.1 C++ 程序設(shè)計(jì)語(yǔ)言,C++是當(dāng)今最流行的一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,20世紀(jì)80年代初由貝爾實(shí)驗(yàn)室開(kāi)發(fā)。C++由C語(yǔ)言擴(kuò)展而來(lái),繼承了C語(yǔ)言的優(yōu)點(diǎn),又極大地?cái)U(kuò)充了C語(yǔ)言的功能。尤其適用于開(kāi)發(fā)中等和大型的計(jì)算機(jī)應(yīng)用項(xiàng)目,從開(kāi)發(fā)時(shí)間、費(fèi)用到形成的軟件的可重用性、可擴(kuò)充性、可

3、維護(hù)性等方面都具優(yōu)越性。,,1.1.2 C++程序開(kāi)發(fā)過(guò)程-1,世界上有多種C++語(yǔ)言,比較流行的有Visual C++(簡(jiǎn)稱(chēng)VC++)和Borland C++,我們選用VC++作為編寫(xiě)C++語(yǔ)言程序的環(huán)境。VC++是開(kāi)發(fā)C++程序的集成開(kāi)發(fā)環(huán)境,包括編輯、編譯、連接、運(yùn)行幾個(gè)環(huán)節(jié)。如要研制一個(gè)命名為Hello的程序,其操作流程如圖所示。,編輯,編譯,連接,執(zhí)行,,源程序,,Hello.cpp,,Hello.obj,,Hello.e

4、xe,,執(zhí)行結(jié)果,圖1-1 研制Visual C++程序的過(guò)程,,,,有錯(cuò)誤,無(wú)錯(cuò)誤,1.1.2 C++程序開(kāi)發(fā)過(guò)程-2,1. 編輯:將寫(xiě)好的C++源程序輸入到計(jì)算機(jī)中,生成磁盤(pán)文件的過(guò)程。VC++的編輯器主要功能有:定義塊、移動(dòng)塊、復(fù)制塊、刪除塊、插入、保存。將編輯的C++程序存盤(pán)時(shí),會(huì)自動(dòng)加上擴(kuò)展名cpp,這是C++源程序的默認(rèn)擴(kuò)展名2. 編譯:編譯器將編輯好的程序轉(zhuǎn)換成二進(jìn)制機(jī)器代碼的形式,即目標(biāo)代碼。C++的編譯分兩大部進(jìn)

5、行:預(yù)處理過(guò)程、編譯源程序。3. 連接:把目標(biāo)代碼連接成執(zhí)行文件(擴(kuò)展名為exe)。4. 運(yùn)行:C++經(jīng)過(guò)編譯和連接生成的可執(zhí)行文件可以在操作系統(tǒng)下單獨(dú)運(yùn)行,也可以在VC++集成環(huán)境下運(yùn)行。,,1.2 一個(gè) C++ 程序,編寫(xiě)名為Hello的程序#include "stdafx.h"#include //函數(shù)原型void SayHello( );void SayGoodbye( );int main

6、 ( int argc, char* argv[ ] ){SayHello( ); //調(diào)用 SayHello 函數(shù) //輸出“Hello,World!”和“你真聰明,你已 //經(jīng)會(huì)用C++編寫(xiě)程序了!”SayGoodbye( ); //調(diào)用 SayHello 函數(shù),輸出“Bye,朋友!”return 0;},//

7、函數(shù) SayHello 定義void SayHello( )//輸出“Hello,World!”和“你真聰明,你已經(jīng)會(huì)用C++編寫(xiě)程序了!”{cout<<"Hello,"<<"World!"<<endl;cout<<"你真聰明,你已經(jīng)會(huì)用C++編寫(xiě)程序了!"<<endl;}//函數(shù) SayGoodby

8、e 定義void SayGoodbye( ) //輸出“Bye,朋友!”{cout<<"Bye,"<<"朋友!"<<endl;},,1.3 C++ 程序的結(jié)構(gòu),1.3.1 主程序1.3.2 函數(shù)1.3.3 輸入/輸出1.3.4 頭文件1.3.5 注釋,,1.3.1 主程序,每個(gè)C++程序都有一個(gè)特殊的函數(shù) main ,稱(chēng)為主程序

9、函數(shù),簡(jiǎn)稱(chēng)主程序(或主函數(shù))。每個(gè)C++程序都從主程序 main 開(kāi)始執(zhí)行。Hello 程序執(zhí)行的事件序列,,1.3.2 函數(shù),C++程序是由若干個(gè)函數(shù)組成的,函數(shù)與函數(shù)之間是相對(duì)獨(dú)立的并且是并行的,函數(shù)之間可以調(diào)用。調(diào)用其它函數(shù)的函數(shù)稱(chēng)為主函數(shù),被其它函數(shù)調(diào)用的函數(shù)稱(chēng)為子函數(shù)。一個(gè)函數(shù)可以既是主函數(shù)又是子函數(shù)。在組成一個(gè)程序的若干個(gè)函數(shù)中,有且僅有一個(gè)主函數(shù) main 。執(zhí)行程序執(zhí)行程序時(shí),系統(tǒng)先找到主函數(shù)main,并從主函數(shù)m

10、ain開(kāi)始執(zhí)行,其它函數(shù)只能通過(guò)main函數(shù)或被main函數(shù)調(diào)用的函數(shù)進(jìn)行調(diào)用。函數(shù)的調(diào)用是可以嵌套的。函數(shù)要先說(shuō)明后調(diào)用,函數(shù)是用函數(shù)原型進(jìn)行說(shuō)明的。如Hello 程序中的:void SayHello( ); void SayGoodbye( );,1.3.2 函數(shù),C++程序中的函數(shù)可分為兩大類(lèi):用戶(hù)自己定義的函數(shù)、系統(tǒng)提供的函數(shù)。使用系統(tǒng)函數(shù)時(shí)可直接調(diào)用,但需將

11、包含該函數(shù)的文件說(shuō)明為頭文件,并包含到該程序中。在C++程序中,以分號(hào)結(jié)尾的句子稱(chēng)為語(yǔ)句,分號(hào)代表這個(gè)語(yǔ)句的結(jié)束。一個(gè)C++函數(shù)中的任何語(yǔ)句都被括在一對(duì)花括號(hào)“{”和“}”中,花括號(hào)括起來(lái)的部分稱(chēng)作函數(shù)體,函數(shù)名和它后面的一對(duì)圓括號(hào)()稱(chēng)為函數(shù)頭。函數(shù)體由一系列C++語(yǔ)句組成。函數(shù)名前面的 void、int 等是函數(shù)的類(lèi)型標(biāo)識(shí)符,規(guī)定函數(shù)的返回值類(lèi)型。void 表示函數(shù)體不需要返回值。函數(shù)原型說(shuō)明只需要函數(shù)頭和分號(hào);函數(shù)定義部分

12、的函數(shù)頭和函數(shù)體之間不能有分號(hào)。,,1.3.3 輸入/輸出,程序是由語(yǔ)句組成的,輸入輸出語(yǔ)句是C++最基本的語(yǔ)句。cout 是C++語(yǔ)言中的標(biāo)準(zhǔn)輸出流對(duì)象,就是計(jì)算機(jī)的顯示器,“>”是cin中的運(yùn)算符,表示從鍵盤(pán)讀入數(shù)據(jù)存放到它后面的參數(shù)中。 cin>>x>>y; 表示從鍵盤(pán)輸入數(shù)據(jù),第一個(gè)數(shù)據(jù)存入 x 中,第二個(gè)數(shù)據(jù)存入 y 中。,,1.3.4 頭文件,C++中,以 #inclu

13、de 開(kāi)頭的指令是C++使用的預(yù)處理指令,稱(chēng)作預(yù)處理器,#include包含的文件稱(chēng)作頭文件。C++語(yǔ)言包含頭文件的格式有兩種 第一種: #include 編譯器在C++系統(tǒng)目錄中查找頭文件,常用于標(biāo)準(zhǔn)頭文件。 第二種: #include “文件名.擴(kuò)展名” 編譯器首先用戶(hù)編寫(xiě)程序的當(dāng)前目錄中查找,然后在C++系統(tǒng)目錄中查找。在 Hello 中,iostream.h 是VC++系統(tǒng)中的文件,

14、所以用 “” 括起來(lái),Hello中使用的輸出流 cout 是在iostream.h 頭文件中說(shuō)明的。 Stdafx.h 是VC++系統(tǒng)自動(dòng)生成的文件,在用戶(hù)當(dāng)前目錄中,定義系統(tǒng)設(shè)置。,,1.3.5 注釋,程序中的注釋只是為了閱讀程序方便,注釋并不增加執(zhí)行代碼長(zhǎng)度,在編譯時(shí)被當(dāng)作空白行跳過(guò)。C++語(yǔ)言中有兩種書(shū)寫(xiě)程序注釋的方法: 第一種:以字符 “/*” 開(kāi)始,并以字符 “*/” 結(jié)束。對(duì)于程序中連續(xù)多行注釋或處理不想編譯的代

15、碼,這種方法非常有效。 第二種:雙字符 “//” 表示注釋的開(kāi)始,直到它所在行結(jié)束處終止,它是單行注釋符。多用于較短的程序注釋。,,1.4 例題分析和小結(jié),1.4.1 例題1.4.2 例題分析1.4.3 小結(jié),,1.4.1 例題,//例 1.1#include "stdafx.h"#include//函數(shù)原型說(shuō)明void SayLove();void SayCPP();void SayBy

16、e();//主程序void main(int argc, char* argv[]){SayLove(); //調(diào)用SayLove函數(shù)SayCPP(); //調(diào)用SayCPP函數(shù)SayBye(); //調(diào)用SayBye函數(shù)},//函數(shù)定義void SayLove() //定義 SayLove 函數(shù){cout<<"我愛(ài)計(jì)算機(jī)

17、科學(xué)!"<<endl;}void SayCPP() //定義 SayCPP 函數(shù){cout<<"C++是優(yōu)秀的面向?qū)ο笳Z(yǔ)言!"<<endl;cout<<"我喜歡學(xué)習(xí)C++。"<<endl;}void SayBye() //定義 SayBye 函數(shù){

18、cout<<"再見(jiàn)!"<<endl;},//例 1.2#include//求周長(zhǎng)函數(shù)原型說(shuō)明,該函數(shù)帶有3個(gè)整型參數(shù)int peri(int,int,int);//主程序void main(){cout<<“三角形的三邊邊長(zhǎng)分別為:6厘米、7米、 8厘米"<<endl;,cout

19、<<“三角形的周長(zhǎng)為:”<<peri(6,7,8)<<“厘米” <<endl;}//peri函數(shù)的定義int peri(int x,int y,int z){return (x+y+z); //返回計(jì)算的三角形周長(zhǎng)值},,1.4.2 例題分析,1. 解題步驟2. 模塊化:將大的問(wèn)題分成相對(duì)獨(dú)立的小模塊3.

20、 頭文件4. 注釋,分析題意,模塊化,編程調(diào)試,分析結(jié)果,,開(kāi)始,,,,,結(jié)束,,,,有錯(cuò)誤,無(wú)錯(cuò)誤,,第 2 章 數(shù)據(jù)類(lèi)型和表達(dá)式,2.1 詞法符號(hào)2.2 基本數(shù)據(jù)類(lèi)型2.3 結(jié)構(gòu)數(shù)據(jù)類(lèi)型2.4 表達(dá)式2.5 例題分析和小結(jié),,2.1 詞法符號(hào),C++語(yǔ)言的字符集包括: 英文字母: A~Z,a~z 數(shù)字字符: 0~9 特殊字符: 空格 !# % ^ & * _ + =

21、-- ~ / \ ˊ 〞. , ( ) [ ] { }根據(jù)使用目的的不同,詞法符號(hào)可分為標(biāo)識(shí)符、關(guān)鍵字、符號(hào)常量等,分別分三小節(jié)介紹。,,2.1.1 標(biāo)識(shí)符,標(biāo)識(shí)符:程序中的一些實(shí)體(如變量、函數(shù))的名字。由C++的字符集中的字符按照以下規(guī)則構(gòu)成: ①標(biāo)識(shí)符可以由各種英文字母和數(shù)字字符及下劃線(xiàn)組成,但第一個(gè)字符必須是英文字母或下劃線(xiàn)“_”,不可以以數(shù)字字符打頭,字母的大小寫(xiě)是有區(qū)別的

22、。 Abc、X1、x1、_x1、x2、x3、desk、books 等都是合法的標(biāo)識(shí)符,并且各不相同。 5you 不是合法的標(biāo)識(shí)符,但 you5、You5、_you5 都是合法的標(biāo)識(shí)符。 ②標(biāo)識(shí)符不可以是下一節(jié)將講到的關(guān)鍵字。,,2.1.2 關(guān)鍵字,關(guān)鍵字是一種有特殊用途的標(biāo)識(shí)符。它是C++語(yǔ)言預(yù)先定義的詞法符號(hào),不能再由程序員聲明做其他的用途。C++的常用關(guān)鍵字有: auto、b

23、reak、cause、char、class、const、continue、default、delete、do、double、else、enum、explicit、extern、false、float、for、friend、goto、if、inline、int、long、mutable、namespace、new、operator、private、protected、public、register、return、short、signed、

24、sizeof、static、struct、switch、template、this、throw、true、try、typedef、union、unsigned、virtual、void、while。上述這些關(guān)鍵字都是C++的保留字,用戶(hù)不能再重新定義,它們的意義以后將逐漸介紹。,,2.1.3 常 量,程序運(yùn)行過(guò)程中,其值保持不變的量。常量直接用符號(hào)表示它的值,這樣便于修改且意義明確。常量定義的方法是在程序的開(kāi)始用如下語(yǔ)句:

25、 # define pi 3.1415926;或在程序中用如下語(yǔ)句: Const int pi=3.1415926;常量有 5 種數(shù)據(jù)類(lèi)型:整型、實(shí)型、字符型、字符串型 、布爾型。,,2.1.3 常 量,1. 整型常量:以詞法符號(hào)形式出現(xiàn)的整數(shù),可用以下形式表示: ①十進(jìn)制整數(shù) 如 –23、0、23、1327 等。 ②八進(jìn)制整數(shù) 以 0 開(kāi)頭,后跟若干個(gè) 0~7 的數(shù)字。如 0

26、123。八進(jìn)制數(shù)的一般形式是 + 或 - 后跟 0 再后跟若干個(gè) 0~7 的數(shù)。如:+026、-035。 ③十六進(jìn)制整數(shù) 以 0x 開(kāi)頭,后跟若干個(gè) 0~9及a~f。如0xa51c6、0x8a 等。八進(jìn)制數(shù)的一般形式是 + 或 - 后跟 0x 再跟若干個(gè) 0~9及a~f 。如:+0a6、-03e。,2.1.3 常 量,2. 實(shí)型常量:實(shí)數(shù)又稱(chēng)為浮點(diǎn)數(shù),一般可有兩種表示形式: ① 一般形式 就是平時(shí)

27、寫(xiě)實(shí)數(shù)的形式,不同之處是在C++中,小數(shù)點(diǎn)前的 0 可以省略,但小數(shù)點(diǎn)不可以省略。 如:3.1416, 2.172828, 1356.88, 365.25, 0.366, 0.258, .258, 12345.6789 ② 指數(shù)形式 E 數(shù)字部分是實(shí)數(shù),指數(shù)部分是整數(shù),中間的 E 也可以為小寫(xiě)。 如:2002×103 ,在C++中記為 2002E3

28、 或 2002e3。 注意,字母 e(或 E)前一定要有數(shù)字,其后一定要是整數(shù)。E3、2002e、2002e0.3是錯(cuò)誤的。以下是合法的指數(shù)形式的C++實(shí)數(shù):23E4, 123E5, 8e9, -1E3, -1.23e-12。,2.1.3 常 量,3. 字符常量:用單引號(hào)括起來(lái)的一個(gè)字符。字符常量有兩種:一種是可顯示字符,如‘a(chǎn)’, ‘B’, ‘#’, ‘5’, ‘+’ 等;另一種稱(chēng)作轉(zhuǎn)義字符序列,以 ‘\’ 打頭,其后的字

29、符有特殊的意義。如 ‘/n’ 中的 n 不是代表字符 n 而是代表?yè)Q行的意思,輸出語(yǔ)句 cout<<“a\nb”,在當(dāng)前行輸出 a ,然后換行再輸出 b 常見(jiàn)的轉(zhuǎn)義字符如表 2-1 。見(jiàn)課本第 16 頁(yè)。4. 字符串常量:用雙引號(hào)括起來(lái)的字符序列(由若干個(gè)字符構(gòu)成)。如:“computer”, “A” 是字符串常量,而 ‘A’ 是字符常量。 在計(jì)算機(jī)里,以 ‘\0’ 表示一個(gè)字符串的結(jié)束,這個(gè)字符是

30、計(jì)算機(jī)自動(dòng)加的。 5. 布爾型常量:false 表示假,true 表示真。,2.2 基本數(shù)據(jù)類(lèi)型,數(shù)據(jù)類(lèi)型,基本類(lèi)型,結(jié)構(gòu)類(lèi)型,整型字符型實(shí)型布爾型枚舉型指針型,數(shù)組結(jié)構(gòu)體共用體,,,,,2.2.1 簡(jiǎn)單數(shù)據(jù)類(lèi)型,1.字符型:字符型數(shù)據(jù)在計(jì)算機(jī)中以 ASCII 碼的形式表示,其本質(zhì)是整數(shù)類(lèi)型的一部份,是整數(shù)的一個(gè)子集,根據(jù)其在計(jì)算機(jī)上的存儲(chǔ)長(zhǎng)度,計(jì)算機(jī)對(duì)它有不同的解釋?zhuān)梢员划?dāng)作整數(shù)進(jìn)行運(yùn)算。,2.2.1 簡(jiǎn)單數(shù)

31、據(jù)類(lèi)型,2. 整型:short 和 long 修飾整型(int)時(shí),表示它們?cè)谟?jì)算機(jī)中的存儲(chǔ)長(zhǎng)度不同,以這兩者修飾 int 時(shí),int 可以被省略,long 也可以用來(lái)修飾 double;signed 和 unsigned 分別表示這個(gè)數(shù)是否是帶符號(hào)的,前者常被省略。int 型和 bool 型數(shù)據(jù)的長(zhǎng)度是可變的,在不同系統(tǒng)中的情況是不同的,這里列出的是在 VC++ 6.0 中的情況。,2.2.1 簡(jiǎn)單數(shù)據(jù)類(lèi)型,3. 浮點(diǎn)型:float

32、, double 分別是單精度和雙精度的實(shí)型。,4. 布爾型:bool 型數(shù)據(jù)的長(zhǎng)度是可變的,在不同系統(tǒng)中的情況是不同的,這里列出的是在 VC++ 6.0 中的情況。,數(shù)據(jù)類(lèi)型既可以是系統(tǒng)定義的,也可以是用戶(hù)自定義的,以上是系統(tǒng)定義的 4 種簡(jiǎn)單數(shù)據(jù)類(lèi)型,自定義的有集合類(lèi)型、結(jié)構(gòu)類(lèi)型等。,2.2.2 變量,在程序的執(zhí)行過(guò)程中其值可以改變的量,叫變量。變量有數(shù)據(jù)類(lèi)型和初值。變量在使用之前需要首先聲明其類(lèi)型和名稱(chēng)。變量的名字也是一種標(biāo)識(shí)

33、符。變量的聲明: ;或 , , …, ; 如:char C; int i, j; float x, y, z, MyData;在程序運(yùn)行期間,系統(tǒng)給每一個(gè)定義過(guò)的變量分配內(nèi)存空間,用于存放對(duì)應(yīng)類(lèi)型的數(shù)據(jù),因而變量名也就代表所分配的內(nèi)存單元。,2.2.2 變量,給變量賦初值的方法: 1. 將賦值語(yǔ)句放在

34、變量的聲明語(yǔ)句里 int x=2002; float f=3.1416; 2. int i(2002);,內(nèi)存用戶(hù)數(shù)據(jù)區(qū),變量x(*pointer),計(jì)算機(jī)存儲(chǔ)區(qū)的每一個(gè)字節(jié)都有一個(gè)編號(hào),即存儲(chǔ)單元地址。如果定義了一個(gè)變量,系統(tǒng)就會(huì)根據(jù)此變量的長(zhǎng)度,分配相應(yīng)長(zhǎng)度的存儲(chǔ)空間,變量也相應(yīng)地得到一個(gè)地址。變量的存儲(chǔ)結(jié)構(gòu)參見(jiàn)右圖。x,y,z 都是實(shí)型變量;pointer

35、是指針變量,其內(nèi)容就是一個(gè)地址,不管什么數(shù)據(jù)類(lèi)型的地址都可以用指針指向它。,變量y,變量z,變量pointer,,,,1008,1004,1000,2.2.2 變量,指針變量:是一種特殊的變量,專(zhuān)門(mén)用來(lái)存放地址。對(duì)指針的一種運(yùn)算是取地址運(yùn)算“&”,另一個(gè)運(yùn)算是取地址所指存儲(chǔ)單元的內(nèi)容的運(yùn)算“*”,“*”稱(chēng)指針運(yùn)算符。指針變量的定義格式為: * ;//注意:“*”并非變量名的一部份 int * p1;

36、 //定義整型指針變量 p1 float * p2; //定義單精度實(shí)型指針變量 p2 int *t1, *t2; //定義 2 個(gè)整型指針變量 t1 和 t2 float *pointer, data; //指針變量和普通變

37、量一起定義 同普通變量一樣,指針變量也有類(lèi)型的區(qū)別,一個(gè)指針變量只能指向類(lèi)型相同的變量,如上述定義的單精度實(shí)型的指針pointer只能指向單精度實(shí)型的變量,也就是說(shuō),只有該類(lèi)型的變量的地址才能放到pointer中。注意:只能將同類(lèi)型的變量的地址賦給指針變量,不能將常數(shù)賦給一個(gè)指針變量,那樣做也沒(méi)有意義。,2.2.2 變量,對(duì)變量的訪(fǎng)問(wèn)都是通過(guò)地址進(jìn)行的,有直接訪(fǎng)問(wèn)和間接訪(fǎng)問(wèn)兩種方式。 直接訪(fǎng)問(wèn)方式: cout>

38、x; //取得鍵盤(pán)輸入的值,然后送到以 //1000開(kāi)頭的4個(gè)字節(jié)中。 間接訪(fǎng)問(wèn)方式(借助指針變量): cout<<*pointer //輸出pointer所指向的變量, //即x的值。 cout<<pointer //輸出指針變量pointer的值,

39、 //即x的地址。,2.3 結(jié)構(gòu)數(shù)據(jù)類(lèi)型,C++中的結(jié)構(gòu)數(shù)據(jù)類(lèi)型可分為數(shù)組類(lèi)型、結(jié)構(gòu)體類(lèi)型和共用體類(lèi)型。2.3.1 數(shù)組2.3.2 結(jié)構(gòu)體類(lèi)型2.3.3 共用體類(lèi)型,,2.3.1 數(shù)組,1. 一維數(shù)組定義一維數(shù)組的一般格式為: [n]; 其中 n 是一個(gè)常量(不能是變量),表示元素的個(gè)數(shù)。int a[8]; 定義了一個(gè)數(shù)組,int 表示數(shù)組元素

40、的類(lèi)型是整型,a是數(shù)組名,8 表示數(shù)組中有 8 個(gè)元素。用a[0]、 a[1]、 a[2]、 a[3]、 a[4]、 a[5]、 a[6]、 a[7]分別表示這 8 個(gè)整型元素,相當(dāng)于 8 個(gè)整型變量,方括號(hào)中的數(shù)字是 8 個(gè)下標(biāo)。如果有 n 個(gè)元素,則下標(biāo)從 0 到 n-1。注意,語(yǔ)句:int a(2); 的意思是定義一個(gè)整型變量 a,并賦予初值 2,并非定義一個(gè)數(shù)組。,,一維數(shù)組,下面是正確的數(shù)組類(lèi)型說(shuō)明: int

41、a[15]; int x[37]; float Data[1024]; int a[18], b[26], c[12]; //一次定義多個(gè)同類(lèi)型的數(shù)組同基本類(lèi)型的變量一樣,可以在定義數(shù)組的同時(shí)對(duì)其進(jìn)行初始化,如:int [2]={ 3, 5 }; 不僅定義了數(shù)組 a,同時(shí)將它的兩個(gè)元素分別初始化為 3 和 5,即 a[0]=3, a[1]=5。在定義時(shí)給數(shù)組初始化,既可以給全

42、部的元素賦初值,也可以只給其中一部份元素賦初值。若給數(shù)組的全部元素賦初值,數(shù)組定義中的常量表達(dá)式就可以省略了,計(jì)算機(jī)會(huì)自動(dòng)地計(jì)算數(shù)組元素的個(gè)數(shù),以確定數(shù)組的大小。反之,如果只給一部份數(shù)組元素賦初值,常量表達(dá)式就不能省略了。,一維數(shù)組,給部分?jǐn)?shù)組元素賦初值舉例: int a[10]={ 21, 42, 31, 64, 53 }; //定義含有 10 個(gè)元素的整型數(shù)組a, 并給前 5 個(gè)數(shù)組

43、 //元素分別賦值。 int a[ ]= { 21, 42, 31, 64, 53 }; //省略了數(shù)組定義中的常量表達(dá)式,由花括號(hào)中的元 //素個(gè)數(shù)確定它是一個(gè)含 5 個(gè)元素的數(shù)組,并且 // a[0]=21、 a[1]=42、a[2]=31、 a[3]=64、 a[4]=53。,2. 二維數(shù)組,定義二維數(shù)組的一般格式為:

44、 [m][n]; 可以把一個(gè)二維數(shù)組看作是一個(gè)其元素為一維數(shù)組的一維數(shù)組。如:float a[2][2]; 定義了一個(gè)如圖 2-3 所示的二維數(shù)組。在 C++中,是按行的順序存儲(chǔ)數(shù)組元素的, 如:int a[2][3] 的存儲(chǔ)順序如圖 2-4 所示。,a[0]---- a00 a01,a[1]---- a10 a11,,,,a,a00 a01 a02,a00 a01 a02,

45、,,,,,,圖 2-3 二維數(shù)組 a,圖 2-4 二維數(shù)組的存儲(chǔ)順序,二維數(shù)組,對(duì)于二維數(shù)組,要有兩個(gè)相應(yīng)的下標(biāo)才能表示一個(gè)數(shù)組元素,二維數(shù)組的元素的表示形式為: [][]; 兩個(gè)下標(biāo)的取值范圍都是從 0 開(kāi)始,數(shù)組中的元素和普通變量的性質(zhì)是一樣的。 int a[2][3] 的 6 個(gè)元素分別為:a[0][0], a[0][1], a[0][2], a[1][0], a[1][1], a[1][2]

46、。和一維數(shù)組一樣,二維數(shù)組也可以在定義時(shí)進(jìn)行初始化。如: int a[2][2]={ { 1, 2 }, { 3, 4 } }; int a[2][2]={ 1, 2, 3, 4 }; 以上兩句的功能是一致的,如果要對(duì)一部份元素賦值,則必須用第一種方法。 如: int a[2][2]={ {1}, { 2, 3 } };,二維數(shù)組,如果對(duì)全部元素賦初

47、值,二維數(shù)組能根據(jù)賦的初值的個(gè)數(shù)自動(dòng)計(jì)算以確定數(shù)組的大小,所以定義時(shí)可省略第一維的大小,但第二維的大小是不可以省略的。 如: int a[ ][2]={ 21, 32, 53, 48, 17, 26 } //定義了一個(gè) 3 行 2 列 的數(shù)組。,3. 字符數(shù)組,字符數(shù)組就是一個(gè)字符類(lèi)型的數(shù)組,其中每個(gè)元素存放一個(gè)字符。字符數(shù)組也稱(chēng)字符串。Char c[8];

48、 // 定義一個(gè) 8 個(gè)字符的數(shù)組 a 。Char a[ ]=“Hey,I am C++”; /* 定義了字符數(shù)組 a ,并賦予初值, “Hey,I am C++” 共 12 個(gè)字符,字符串常量的最后由系統(tǒng)加上一個(gè) ‘\0’ 表示字符串的結(jié)束,所以該數(shù)組的長(zhǎng)度是 13, 不是 12。*/字符數(shù)組的最后一個(gè)元素一定是‘\0’,這是 C++ 的

49、規(guī)定。如一個(gè) 25 個(gè)元素的字符數(shù)組,只能存放 24 個(gè)字符。,字符數(shù)組,使用字符數(shù)組的元素有兩種方法: 1. 每次引用字符數(shù)組的一個(gè)元素,得到一個(gè)字符。 2. 可以把字符數(shù)組作為整體進(jìn)行輸入和輸出,在系 統(tǒng)定義的字符串的處理函數(shù)中,是把字符數(shù)組當(dāng) 作一個(gè)整體來(lái)處理的。 如:char a[ ]=“boy”;

50、cout>a; // 輸入 girl 后,數(shù)組的狀態(tài)如下所示,圖 2-5 字符數(shù)組的示意圖,字符數(shù)組,一些常用的 C++ 的字符串處理函數(shù)(1)strcat(字符數(shù)組1,字符數(shù)組2) 實(shí)現(xiàn)將兩個(gè)字符串連接起來(lái),把字符串2按到字符串1 的后面,并將結(jié)果存放到字符串1中。 例2_3 strcat 示例及圖示。

51、 #include #include void main( ) { char a[16]="boy"; char b[ ]=" and "; char c[ ]="girl";

52、 strcat(a,b); strcat(a,c); cout<<a; },字符數(shù)組,上例中兩次調(diào)用 strcat 的過(guò)程如圖 2-6 所示(由于每次改變的都只是字符數(shù)組 a,故只圖示字符數(shù)組 a 的改變):,字符數(shù)組a,字符數(shù)組b,字符數(shù)組c,第一次strcat后的字符數(shù)組a,第二次strcat后的字符數(shù)組a,圖 2-6 調(diào)用

53、 strcat 過(guò)程的示意圖,可以看出,兩個(gè)字符數(shù)組連接后,前一個(gè)數(shù)組最后的字符\0消失了。注意,存放數(shù)組的空間要足夠大,如字符數(shù)組a定義為16個(gè)字符元素。,字符數(shù)組,(2)strcpy(字符數(shù)組1,字符數(shù)組2) 將字符數(shù)組2中的字符復(fù)制到字符數(shù)組1中去。要求字 符數(shù)組1中必須有存放字符數(shù)組2中所有字符的空間。 char a[10], b[ ]= “Hello” ; strcpy(a,

54、 b); /* 或 strcpy(a, ”Hello” ),就是說(shuō),字符串2可以是字符數(shù)組名, 也可以是一個(gè)字符字符串常量,但字符數(shù)組1必須是數(shù)組 的名字。復(fù)制的時(shí)候是邊同后面的‘\0’一起復(fù)制的,否則 無(wú)法判斷 a 數(shù)組的字符串到何時(shí)結(jié)束。 */ cout<<a;

55、 //屏幕將輸出 Hello,字符數(shù)組,(3)strlen(字符數(shù)組) 函數(shù)的值為字符數(shù)組中不計(jì)‘\0’的字符的個(gè)數(shù)。 char a[]=“boy”; cout<<strlen(a); //屏幕上顯示:3,2.3.2 結(jié)構(gòu)體類(lèi)型,把描述一個(gè)物體的各個(gè)屬性結(jié)合到一起,形成“結(jié)構(gòu)體”數(shù)據(jù)類(lèi)型。這樣能更好地描述一個(gè)物體。如對(duì)衣服(dress),可以定義如下: str

56、uct dress { char color[10]; int size; float price; } struct是定義結(jié)構(gòu)體類(lèi)型的關(guān)鍵字,dress是結(jié)構(gòu)體類(lèi)型的名稱(chēng)。dress 和 int, float 一樣,同樣是一個(gè)類(lèi)型的名字,它包含成員變量 color、size 和 price。,,2.3.2 結(jié)構(gòu)體類(lèi)型,定義一個(gè)結(jié)構(gòu)類(lèi)型

57、的一般形式是: struct { } 成員列表包括若干個(gè): ; 注意,對(duì)各個(gè)成員都要進(jìn)行類(lèi)型的說(shuō)明。例 2-4 定義一個(gè)表示時(shí)鐘的結(jié)構(gòu)體。 struct Clock { //結(jié)構(gòu)體名稱(chēng)為 Clock int S, F, M; //三個(gè)整數(shù)分

58、別表示時(shí)、分、秒 };,2.3.2 結(jié)構(gòu)體類(lèi)型,例 2-5 定義 dress 類(lèi)型的變量第一種方法:先定義類(lèi)型,后定義變量。新定義的結(jié)構(gòu)體類(lèi)型可以和系統(tǒng)定義的類(lèi)型一樣使用。 dress dress1, dress2; //定義 dress 類(lèi)型的變量dress1和dress2第二種方法是在定義類(lèi)型的同時(shí)定義變量。 struct { char

59、color[10]; int size; float price; } dress1, dress2;,dress1,dress2,color size price,圖 2-7 dress 類(lèi)型的變量的示意圖,2.3.2 結(jié)構(gòu)體類(lèi)型,引用一個(gè)結(jié)構(gòu)體變量的成員的方法是: . “.”稱(chēng)為成員(或分量)運(yùn)算符。由于

60、成員變量名前有結(jié)構(gòu)體變量名的修飾,因此成員變量名可以和程序中別的變量名重名。結(jié)構(gòu)體類(lèi)型的變量也可以在聲明的時(shí)候初始化。 clock c1={ 8, 48, 35 }; //聲名了時(shí)鐘變量 c1,并且 c1.S=8、c1.F=48、c1.M=35。數(shù)組中的元素可以是結(jié)構(gòu)體變量。 dress dressarray[30]; //定義了一個(gè)元素類(lèi)型為dress,有 30 個(gè)元素的數(shù)組dre

61、ssarray。,2.3.3 共用體類(lèi)型,“共用體”即幾個(gè)變量共用一個(gè)內(nèi)存地址,同一時(shí)刻只能存放一個(gè)變量。各種類(lèi)型變量長(zhǎng)度不同,但可從同一地址開(kāi)始存放,為共用體類(lèi)型的變量分配的字節(jié)數(shù)必須和那幾個(gè)變量中最長(zhǎng)的變量所占的字節(jié)數(shù)一樣。新放入的變量總是把以前的變量覆蓋,因此只有最后一個(gè)放入的變量是有效的。共用體變量的定義與結(jié)構(gòu)體變量的定義完全一致,形式如下: union { };,,2.3.3

62、 共用體類(lèi)型,例 2-6 定義一個(gè)共用體及其變量。 union example { int i; char ch; double d; }; example x; 也可以將類(lèi)型的定義和變量的定義放在一起: union example {

63、int i; char ch; double d; } x;,2.3.3 共用體類(lèi)型,引用共用體成員的方式是在變量名的后面加點(diǎn)再加上成員變量的名字。 x.i 為引用共用體變量 x 中的整型成員變量 i x.ch 為引用共用體變量 x 中的字符型成員變量 ch x.d 為引用共用體變量 x 中的字符型成員變量 d

64、共用體類(lèi)型變量有效的值只是最后一個(gè)放入的值,故如下的初始化是不正確的: union example x={ 3, ‘d’, 2.4 };變量 x 在計(jì)算機(jī)中的存儲(chǔ)情況如圖 2-8 所示。,地址2002,圖 2-8 union example 型變量的示意圖,2.4 表 達(dá) 式,表達(dá)式:由運(yùn)算符(例如“+”、“*”等)、操作數(shù)(可以是常量,也可以是變量)和括號(hào)組成的用于計(jì)算的式子。(3+5)*5、3+5、3+5*6

65、等都是表達(dá)式。表達(dá)式中的運(yùn)算符有的需要兩個(gè)操作數(shù),稱(chēng)雙目運(yùn)算符;有的只需一個(gè)操作數(shù),稱(chēng)單目運(yùn)算符。運(yùn)算符有優(yōu)先級(jí)以決定不同運(yùn)算的先后執(zhí)行順序,當(dāng)一個(gè)操作數(shù)的左右兩邊運(yùn)算符的優(yōu)先級(jí)相等時(shí),由此運(yùn)算符的結(jié)合性決定運(yùn)算次序。運(yùn)算符“+”的結(jié)合性是先左后右,但并非所有的運(yùn)算符都是如此,也有先右后左的。,,2.4.1 算術(shù)表達(dá)式,C++中的算術(shù)運(yùn)算符: ①“+”表示“加”或“正”兩種運(yùn)算,“加”為雙目運(yùn)算符,“正”

66、 為單目運(yùn)算符,一般可以省略。 ②“-”表示“減”或“負(fù)”兩種運(yùn)算,“減”為雙目運(yùn)算符,“負(fù)” 為單目運(yùn)算符。 ③“*”代表兩個(gè)數(shù)相乘。 ④“/”代表兩個(gè)數(shù)相除。 ⑤“%”表示取余數(shù)運(yùn)算,又稱(chēng)取模運(yùn)算。它要求兩個(gè)運(yùn)算 數(shù)都為整型數(shù)據(jù)。如:11%4=3, 35%3=2。 ⑥“++”是自增運(yùn)算符,表示加 1。 ⑦“--”是自減運(yùn)算符,表示

67、減 1。,,2.4.1 算術(shù)表達(dá)式,用算術(shù)運(yùn)算符連接起來(lái)的式子,稱(chēng)為算術(shù)表達(dá)式。運(yùn)算符的優(yōu)先級(jí):“+”(正值運(yùn)算符)、“-”(負(fù)值運(yùn)算符)、“++”、“--”優(yōu)先級(jí)最高;“*”、“/”和“%”優(yōu)先級(jí)次高;“+”(加法)、和“-”(減法)優(yōu)先級(jí)最低??梢杂美ㄌ?hào)來(lái)改變運(yùn)算次序。 如:15+3*2=21,而 (15+3)*2=36。例 2-7 表達(dá)式及運(yùn)算符的優(yōu)先級(jí),,void main( )

68、 //程序{ int i=4,j=6,k=8; int x;x=i+j-k; //結(jié)果為 2cout<<"x="<<x<<endl; //輸入 2x=i+j*k;

69、 //結(jié)果為 52cout<<"x="<<x<<endl; //輸出 52x=(i+j)*k/2; //結(jié)果為 40cout<<"x="<<x<<endl; //輸出 40

70、x=25*4/2%j; //就是 50%j=50%6,結(jié)果為 2 cout<<"x="<<x<<endl; //輸出2cout<<"x="<<(++x)<<endl; //輸出 3cout<<"x="<&

71、lt;(++x)<<endl; //輸出 4x=j*k; //結(jié)果為 48--x; //結(jié)果為 47cout<<"x="<<x<<endl; //輸出 47}

溫馨提示

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

評(píng)論

0/150

提交評(píng)論