VisualC++實(shí)用教程(第4版)[鄭阿奇][電子教案]_第1頁(yè)
VisualC++實(shí)用教程(第4版)[鄭阿奇][電子教案]_第2頁(yè)
VisualC++實(shí)用教程(第4版)[鄭阿奇][電子教案]_第3頁(yè)
VisualC++實(shí)用教程(第4版)[鄭阿奇][電子教案]_第4頁(yè)
VisualC++實(shí)用教程(第4版)[鄭阿奇][電子教案]_第5頁(yè)
已閱讀5頁(yè),還剩146頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第1 1章章 基本基本C+C+語(yǔ)言語(yǔ)言1 . 1 C+1 . 1 C+程序結(jié)構(gòu)程序結(jié)構(gòu)1 . 2 1 . 2 數(shù)據(jù)類型和基本輸入數(shù)據(jù)類型和基本輸入/ /輸輸出出1 . 3 1 . 3 運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式1 . 4 1 . 4 基本語(yǔ)句基本語(yǔ)句1 . 5 1 . 5 函數(shù)和預(yù)處理函數(shù)和預(yù)處理1 . 6 1 . 6 數(shù)數(shù) 組組1 . 7 1 . 7 指針和引用指針和引用1 . 8 1 . 8 字符指針和字符串處字符指針和字符串處理理1 . 9 1 . 9 結(jié)構(gòu)、共用和自定結(jié)構(gòu)、共用和自定義義1 . 1 C+1 . 1 C+程序結(jié)構(gòu)程序結(jié)構(gòu)1.1.1 C+1.1.1 C+概述概述C+(C

2、 Plus Plus)是在C語(yǔ)言基礎(chǔ)上研制出來(lái)的一種通用的程序設(shè)計(jì)語(yǔ)言,它是在1980年由貝爾實(shí)驗(yàn)室的Bjarne Stroustrup創(chuàng)建的。研制C+的一個(gè)重要目標(biāo)是完善C,另一個(gè)重要目標(biāo)就是增加面向?qū)ο蟮某绦蛟O(shè)計(jì)。1.1.2 C+1.1.2 C+程序創(chuàng)建程序創(chuàng)建由于計(jì)算機(jī)只能識(shí)別和執(zhí)行由0和1組成的二進(jìn)制指令,稱為機(jī)器代碼機(jī)器代碼,因而C+源程序是不能被計(jì)算機(jī)直接執(zhí)行的,必須轉(zhuǎn)換成機(jī)器代碼。這個(gè)轉(zhuǎn)換過(guò)程就是編譯系統(tǒng)對(duì)源代碼進(jìn)行編譯編譯和連接連接的過(guò)程,如圖1.1所示。1.1.2 C+1.1.2 C+程序創(chuàng)建程序創(chuàng)建Visual C+在項(xiàng)目文件管理、調(diào)試及操作的親和力等方面上都略勝一籌,從而

3、成為目前使用得極為廣泛的基于Windows平臺(tái)的可視化編程環(huán)境,如圖1.2所示。1.1.2 C+1.1.2 C+程序創(chuàng)建程序創(chuàng)建1 1創(chuàng)建工作文件夾創(chuàng)建工作文件夾在文件夾“D: Visual C+程序”下再創(chuàng)建一個(gè)子文件夾“第1章”用于存放第1章中的C+程序;第2章程序就存放在子文件夾“第2章”中,以此類推。2 2啟動(dòng)啟動(dòng)Visual C+ 6.0Visual C+ 6.0選擇“開始”“程序”“Microsoft Visual Studio 6.0”“Microsoft Visual C+ 6.0”命令,運(yùn)行Visual C+ 6.0。第一次運(yùn)行時(shí),將顯示如圖1.3所示的“每日提示”對(duì)話框。1

4、.1.2 C+1.1.2 C+程序創(chuàng)建程序創(chuàng)建3 3添加添加C+C+程序程序(1)單擊標(biāo)準(zhǔn)工具欄 上的“新建”按鈕 ,打開一個(gè)新的文檔窗口,在這個(gè)窗口中輸入下列C+代碼?!纠鼸x_Simple1】 一個(gè)簡(jiǎn)單的C+程序/* 一個(gè)簡(jiǎn)單的C+程序 */#include int main()double r, area;/ 定義變量r,area雙精度整數(shù)類型coutr;/ 從鍵盤上輸入的值存放到r中area = 3.14159 * r * r;/ 計(jì)算圓面積,結(jié)果存放到area中/ 思考:在輸出“圓的面積為:”后輸出area中的面積值,如何換行?cout圓的面積為:arean; return 0;/

5、指定返回值1.1.2 C+1.1.2 C+程序創(chuàng)建程序創(chuàng)建(2)選擇“文件”“保存”菜單或按快捷鍵【Ctrl+S】或單擊標(biāo)準(zhǔn)工具欄中的 按鈕,彈出“保存為”文件對(duì)話框。將文件定位到“D:Visual C+程序第1章”文件夾中,文件名指定為“Ex_Simple1.cpp” 。1.1.2 C+1.1.2 C+程序創(chuàng)建程序創(chuàng)建4 4編譯和運(yùn)行編譯和運(yùn)行(1)單擊編譯工具條 上的“生成”按鈕 或直接按快捷鍵【F7】,系統(tǒng)彈出一個(gè)對(duì)話框,詢問(wèn)是否為該程序創(chuàng)建默認(rèn)的活動(dòng)工作區(qū)間文件夾,單擊 按鈕,系統(tǒng)開始對(duì)Ex_Simple1進(jìn)行編譯、連接,同時(shí)在輸出窗口中顯示編連的有關(guān)信息,當(dāng)出現(xiàn)“Ex_Simple1

6、.exe-0 error(s),0 warning(s)”時(shí)表示Ex_Simple1.exe可執(zhí)行文件已經(jīng)正確無(wú)誤地生成了。1.1.2 C+1.1.2 C+程序創(chuàng)建程序創(chuàng)建(2)單擊編譯工具條 上的“運(yùn)行”按鈕 或直接按快捷鍵【Ctrl+F5】,就可以運(yùn)行剛剛生成的Ex_Simple1.exe了,結(jié)果彈出下面的稱為控制臺(tái)的窗口(其屬性已被修改過(guò),具體修改方法見實(shí)驗(yàn)1):此時(shí)等待用戶輸入一個(gè)數(shù)。當(dāng)輸入10并按【Enter】鍵后,控制臺(tái)窗口顯示為:1.1.3 C+1.1.3 C+代碼結(jié)構(gòu)代碼結(jié)構(gòu)1 1mainmain函數(shù)函數(shù)主函數(shù):主函數(shù):一個(gè)C語(yǔ)言程序可以包含若干函數(shù),其中main表示主函數(shù),由

7、于每一個(gè)程序執(zhí)行時(shí)都必須從main開始,而不管該函數(shù)在整個(gè)程序中的具體位置,因此每一個(gè)C+程序必須包含一個(gè)且只有一個(gè)main函數(shù)。函數(shù)體:函數(shù)體:每一個(gè)函數(shù)都由函數(shù)頭和函數(shù)體組成。在main函數(shù)中,“int main()”稱為main函數(shù)的函數(shù)頭。函數(shù)值:函數(shù)值:函數(shù)返回的值就是函數(shù)值,函數(shù)頭包括函數(shù)值類型和函數(shù)名。main函數(shù)名的前面有一個(gè)int,它表示main函數(shù)的類型是整型。函數(shù)值就是函數(shù)體中的return語(yǔ)句返回的值。1.1.3 C+1.1.3 C+代碼結(jié)構(gòu)代碼結(jié)構(gòu)2 2預(yù)處理指令預(yù)處理指令#include iostream.h稱為預(yù)處理指令。iostream.h是C+編譯系統(tǒng)自帶的文

8、件,稱為C+C+庫(kù)文件庫(kù)文件,它定義了標(biāo)準(zhǔn)輸入/輸出流的相關(guān)數(shù)據(jù)及其操作。由于程序用到了輸入/輸出流對(duì)象cin和cout,因而需要用#include將其合并到程序中。3 3注釋注釋程序Ex_Simple中的“/*/”之間的內(nèi)容(稱為塊注釋)或“/”開始一直到行尾的內(nèi)容(稱為行注釋)是用來(lái)注釋的,是為了提高程序的可讀性,對(duì)編譯和運(yùn)行并不起作用。4 4縮進(jìn)縮進(jìn)縮進(jìn)是指程序在書寫時(shí)不要將程序的每一行都由第一列開始,而且在適當(dāng)?shù)牡胤郊舆M(jìn)一些空格,也是為了提高程序的可讀性。1 . 2 1 . 2 數(shù)據(jù)類型和基本輸入數(shù)據(jù)類型和基本輸入/ /輸出輸出1.2.1 1.2.1 基本數(shù)據(jù)類型基本數(shù)據(jù)類型為了能精確

9、表征數(shù)據(jù)在計(jì)算機(jī)內(nèi)存中的存儲(chǔ)(格式及大?。┖筒僮?,C+將數(shù)據(jù)類型分為基本數(shù)據(jù)類型基本數(shù)據(jù)類型、派生類型和復(fù)合類型三類,后兩種類型又可統(tǒng)稱為構(gòu)造構(gòu)造類型類型,如圖1.4所示。1.2.1 1.2.1 基本數(shù)據(jù)類型基本數(shù)據(jù)類型表1.1列出了C+各種基本數(shù)據(jù)的類型、字寬(以字節(jié)數(shù)為單位,本書余同)和范圍,它們是根據(jù)ANSI標(biāo)準(zhǔn)而定的。類 型 名類 型 描 述字 寬范 圍bool布爾型1false(0)或true(1)char單字符型1-128127unsigned char無(wú)符號(hào)字符型10255(0 xff)signed char有符號(hào)字符型1-128127wchar_t寬字符型2視系統(tǒng)而定short

10、 int短整型2-3276832767unsigned short int無(wú)符號(hào)短整型2065535(0 xffff)signed short int有符號(hào)短整型(與short int相同)2-3276832767int整型4-21474836482147483647unsigned int無(wú)符號(hào)整型404294967295(0 xffffffff)signed int有符號(hào)整型(與int相同)4-21474836482147483647long int長(zhǎng)整型4-21474836482147483647unsigned long int無(wú)符號(hào)長(zhǎng)整型404294967295(0 xfffffff

11、f)signed long int有符號(hào)長(zhǎng)整型(與long int相同)4-21474836482147483647float單精度實(shí)型47位有效位double雙精度實(shí)型815位有效位long double長(zhǎng)雙精度實(shí)型1019位有效位,視系統(tǒng)而定1.2.2 1.2.2 字面常量字面常量1 1整數(shù)常量整數(shù)常量C+中的整數(shù)整數(shù)可用十進(jìn)制、八進(jìn)制和十六進(jìn)制來(lái)表示。其中,八進(jìn)制整數(shù)是以數(shù)字0開頭且由07的數(shù)字組成的數(shù)。例如045,即(45)8,表示八進(jìn)制數(shù)45,等于十進(jìn)制數(shù)37;-023表示八進(jìn)制數(shù)-23,等于十進(jìn)制數(shù)-19。而十六進(jìn)制整數(shù)是以0 x或0X開頭且由09、AF或af組成的數(shù)。2 2實(shí)數(shù)常

12、量實(shí)數(shù)常量實(shí)數(shù)實(shí)數(shù)即浮點(diǎn)數(shù)浮點(diǎn)數(shù),它有十進(jìn)制數(shù)和指數(shù)兩種表示形式。十進(jìn)制數(shù)形式是由整數(shù)部分和小數(shù)部分組成的(注意必須有小數(shù)點(diǎn))。例如0.12、.12、1.2、12.0、12.、0.0都是合法的十進(jìn)制數(shù)形式實(shí)數(shù)。1.2.2 1.2.2 字面常量字面常量3 3字符常量字符常量在C+中,用單引號(hào)將其括起來(lái)的字符稱為字符常量,如B、b、%、等。但若只有一對(duì)單引號(hào)則是不合法的,因?yàn)镃+不支持空字符常量。注意B和b是兩個(gè)不同的字符。表1.2列出了常用的轉(zhuǎn)義序列符。字 符 形 式含 義ASCII碼值a響鈴(BEL)07Hb退格(相當(dāng)于按【Backspace】鍵)(BS)08Hf進(jìn)紙(僅對(duì)打印機(jī)有效)(FF)

13、0CHn換行(相當(dāng)于按【Enter】鍵)(CR、LF)0DH、0AHr回車(CR)0DHt水平制表(相當(dāng)于按【Tab】鍵)(HT)09Hv垂直制表(僅對(duì)打印機(jī)有效)(VT)0BH單引號(hào)27H雙引號(hào)22H反斜杠5CH?問(wèn)號(hào)3FHooo用1位、2位或3位八制數(shù)表示的字符(ooo)8xhh用1位或多位十六制數(shù)表示的字符hhH1.2.2 1.2.2 字面常量字面常量4 4字符串常量字符串常量* *C+語(yǔ)言除了允許使用字符常量外,還允許使用字符串常量。字符串常量字符串常量是由一對(duì)雙引號(hào)括起來(lái)的字符序列,簡(jiǎn)稱為字符串字符串。字符串常量中除一般字符外,還可以包含空格、轉(zhuǎn)義序列符或其他字符(如漢字)等。例如:

14、Hello, World!nC+語(yǔ)言由于雙引號(hào)是字符串的分界符,因此如果需要在字符串中出現(xiàn)雙引號(hào)則必須用“”表示。例如:Please press F1 to help!這個(gè)字符串被解釋為:Please press F1 to help!字符串常量應(yīng)盡量在同一行書寫,若一行寫不下,可用“”來(lái)連接,例如:ABCD EFGHIGK*書中表示字符串的一對(duì)雙引號(hào)“”是漢字字符,在程序代碼中是沒有的,它們均用來(lái)表示;類似的,一對(duì)單引號(hào)在程序代碼中均用表示。注意不要在程序代碼中誤用這些漢字字符。1.2.3 1.2.3 變量及其命名規(guī)則變量及其命名規(guī)則1 1變量名命名變量名命名(1)合法性。C+規(guī)定標(biāo)識(shí)符由大

15、小寫字母、數(shù)字字符(09)和下劃線組成,且第一個(gè)字符必須為字母或下劃線。任何標(biāo)識(shí)符中都不能有空格、標(biāo)點(diǎn)符號(hào)及其他字符,例如下面的標(biāo)識(shí)符是不合法不合法的:93Salary, Peter.Ding, $178, #5f68, rd而且,用戶定義的標(biāo)識(shí)符不能和系統(tǒng)的關(guān)鍵字同名。以下是48個(gè)C+的標(biāo)準(zhǔn)關(guān)鍵字:asm autobreakcasecatchcharclassconstcontinue defaultdeletedodoubleelseenumexternfloatforfriendgotoifinlineintlongnewoperator privateprotectedpublicre

16、gisterreturnshortsignedsizeofstaticstructswitchtemplate thisthrowtrytypedefunionunsigned virtualvoidvolatile while1.2.3 1.2.3 變量及其命名規(guī)則變量及其命名規(guī)則(2)有效性。因?yàn)橛械木幾g系統(tǒng)只能識(shí)別前32個(gè)字符。(3)易讀性。在定義標(biāo)識(shí)符時(shí),若能做到“見名知意”就可以達(dá)到易讀性的目的。1.2.3 1.2.3 變量及其命名規(guī)則變量及其命名規(guī)則2 2變量定義變量定義C+中,定義變量的最簡(jiǎn)單方法是先寫數(shù)據(jù)類型,然后寫變量名。數(shù)據(jù)類型和變量名之間必須用1個(gè)或多個(gè)空格來(lái)分隔,最后以

17、分號(hào)來(lái)結(jié)尾,即如下列的格式: , , ;數(shù)據(jù)類型是告訴編譯系統(tǒng)要為由變量名指定的變量分配多少字節(jié)的內(nèi)存空間,以及變量中要存取的是什么類型的數(shù)據(jù)。例如:double x;/ 雙精度實(shí)型變量這樣,x占用了8字節(jié)連續(xù)的內(nèi)存空間,存取的數(shù)據(jù)類型是double型,稱為雙雙精度實(shí)型變量精度實(shí)型變量。再如:float y;/ 單精度實(shí)型變量1.2.3 1.2.3 變量及其命名規(guī)則變量及其命名規(guī)則則y占用了4字節(jié)連續(xù)的內(nèi)存空間,存取的數(shù)據(jù)類型是float型,稱為單精度實(shí)單精度實(shí)型變量型變量。此后,變量x、y就分別對(duì)應(yīng)各自的內(nèi)存空間,換句話說(shuō),開辟的那塊8字節(jié)的內(nèi)存空間就叫x,那塊4字節(jié)的內(nèi)存空間就叫y。又如:

18、int nNum1;/ 整型變量int nNum2;/ 整型變量int nNum3;/ 整型變量則nNum1、nNum2、nNum3分別占用4字節(jié)的存儲(chǔ)空間,其存取的數(shù)據(jù)類型是int型,稱為整型變量整型變量。由于它們都是同一類型的變量,因此為使代碼簡(jiǎn)潔,可將同類型的變量定義在一行語(yǔ)句中,不過(guò)同類型的變量名要用逗號(hào)(,)分隔(逗號(hào)前后可以有0個(gè)或多個(gè)空格)。例如這三個(gè)整型變量可這樣定義(注意:只有最后一個(gè)變量nNum3的后面才有分號(hào)):int nNum1, nNum2, nNum3;1.2.3 1.2.3 變量及其命名規(guī)則變量及其命名規(guī)則3 3變量賦值和初始化變量賦值和初始化變量一旦定義后,就可

19、以通過(guò)變量名引用變量來(lái)進(jìn)行賦值等操作。所謂引用引用變量變量,就是使用變量名來(lái)引用變量的內(nèi)存空間。也就是說(shuō),變量名是對(duì)內(nèi)存空間的標(biāo)識(shí),對(duì)變量名的操作也是對(duì)其內(nèi)存空間的操作。例如:int x, y;x = 8;/ 給x賦值y = x;/ 將x的值賦給y1.2.3 1.2.3 變量及其命名規(guī)則變量及其命名規(guī)則(1)在定義變量后,使用賦值語(yǔ)句來(lái)賦初值。如前面的“x = 8;”和“y = x;”,使得x和y的初值都設(shè)為8。(2)在定義變量的同時(shí)賦給變量初值,這一過(guò)程稱為變量初始化變量初始化。例如:int nNum1 = 3;/ 指定nNum1為整型變量,初值為3double x = 1.28;/ 指定x

20、為雙精度實(shí)變量,初值為1.28char c = G;/ 指定c為字符變量,初值為G(3)也可以在多個(gè)變量的定義語(yǔ)句中單獨(dú)對(duì)某個(gè)變量進(jìn)行初始化,如:int nNum1, nNum2 = 3, nNum3;表示nNum1、nNum2、nNum3為整型變量,但只有nNum2的初值為3。(4)在C+中,變量的初始化還有另外一種形式,例如: int nX(1), nY(3), nZ;1.2.4 1.2.4 標(biāo)識(shí)符常量標(biāo)識(shí)符常量1 1constconst只讀變量只讀變量在變量定義時(shí),可以使用關(guān)鍵字const來(lái)修飾,這樣的變量是只讀的,即在程序中對(duì)其只能讀取,不能修改。由于不可修改,因而它是一個(gè)標(biāo)識(shí)符常量,

21、且在定義時(shí)必須初始化。例如:const float PI = 3.14159265f;/ 指定f使其類型相同,否則會(huì)有警告錯(cuò)誤因 p 字符不能作為C+的標(biāo)識(shí)符,因此這里用PI來(lái)表示。PI被定義成一個(gè)float類型的只讀變量,由于float變量只能存儲(chǔ)7位有效位精度的實(shí)數(shù),因此PI的實(shí)際值為3.1415923.141592。若將PI定義成double,則全部接受上述數(shù)字。事實(shí)上,const還可放在類型名之后,如下列語(yǔ)句:double const PI = 3.14159265;1.2.4 1.2.4 標(biāo)識(shí)符常量標(biāo)識(shí)符常量【例Ex_PI】 用const定義標(biāo)識(shí)符常量#include const d

22、ouble PI = 3.14159265;/ PI是一個(gè)只讀變量int main() double r = 100.0, area; area = PI * r * r;/ 引用PI cout圓的面積是:area n; return 0;/ 指定返回值 程序運(yùn)行結(jié)果如下:圓的面積是:31415.91.2.4 1.2.4 標(biāo)識(shí)符常量標(biāo)識(shí)符常量2 2#define#define標(biāo)識(shí)符常量標(biāo)識(shí)符常量在C+中,允許程序用編譯預(yù)處理指令#define來(lái)定義一個(gè)標(biāo)識(shí)符常量。例如:#define PI 3.141592651.2.5 1.2.5 枚舉常量枚舉常量定義時(shí),先寫關(guān)鍵字enum,然后是要定義的枚

23、舉類型名、一對(duì)花括號(hào)(),最后以分號(hào)結(jié)尾。enum和類型名之間至少要有一個(gè)空格,花括號(hào)里面是指定的各個(gè)枚舉常量名,各枚舉常量名之間要用逗號(hào)分隔,即如下格式:enum ;例如,有下列枚舉常量定義:enum COLORS Black, Red, Green, Blue, White ; 其中COLORS是要定義的枚舉類型名,通常將枚舉類型名寫成大寫字母以與其他標(biāo)識(shí)符相區(qū)別。它有5個(gè)枚舉常量(又稱枚舉值枚舉值、枚舉元素枚舉元素)。1.2.6 1.2.6 基本輸入基本輸入/ /輸出輸出1 1輸入流(輸入流(cincin)cin可以獲得多個(gè)鍵盤的輸入值,它具有下列格式:cin ;其中,提取運(yùn)算符“”可以

24、連續(xù)寫多個(gè),每個(gè)提取運(yùn)算符后面跟一個(gè)獲得輸入值的變量或?qū)ο?。例如:int nNum1, nNum2, nNum3;cinnNum1nNum2nNum3;要求用戶從鍵盤上輸入三個(gè)整數(shù)。輸入時(shí),必須在三個(gè)數(shù)值之間加上一些空格來(lái)分隔,空格的個(gè)數(shù)不限,最后用回車鍵結(jié)束輸入;或者在每個(gè)數(shù)值之后按回車鍵。例如,上述輸入語(yǔ)句執(zhí)行時(shí),用戶可以輸入:12 9 20或129201.2.6 1.2.6 基本輸入基本輸入/ /輸出輸出2 2輸出流(輸出流(coutcout)與cin相對(duì)應(yīng),通過(guò)cout可以輸出一個(gè)整數(shù)、實(shí)數(shù)、字符及字符串,如下列格式:cout ;cout中的插入運(yùn)算符“”可以連續(xù)寫多個(gè),每個(gè)后面可以跟

25、一個(gè)要輸出的常量、變量、轉(zhuǎn)義序列符及表達(dá)式等?!纠鼸x_Cout】 cout的輸出及endl算子#include int main()coutABCDt1234tendl;return 0;/ 指定返回值程序運(yùn)行結(jié)果如下:ABCD 12341.2.6 1.2.6 基本輸入基本輸入/ /輸出輸出3 3使用格式算子使用格式算子octoct、decdec和和hexhex格式算子oct、dec和hex能分別將輸入或輸出的整數(shù)轉(zhuǎn)換成八進(jìn)制、十進(jìn)制及十六進(jìn)制?!纠鼸x_ODH】 格式算子的使用#include int main()int nNum;couthexnNum;coutOcttoctnNumen

26、dl;coutDectdecnNumendl;coutHexthexnNumendl;return 0;1.2.6 1.2.6 基本輸入基本輸入/ /輸出輸出程序運(yùn)行結(jié)果如下:Please input a Hex integer:7bOct 173Dec 123Hex 7b1 . 3 1 . 3 運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式1.3.1 1.3.1 算術(shù)運(yùn)算符算術(shù)運(yùn)算符由操作數(shù)和算術(shù)運(yùn)算符構(gòu)成的算術(shù)表達(dá)式算術(shù)表達(dá)式常用于數(shù)值運(yùn)算,與數(shù)學(xué)中的代數(shù)表達(dá)式相對(duì)應(yīng)。C+算術(shù)運(yùn)算符有雙目的加減乘除四則運(yùn)算符、求余運(yùn)算符及單目的正負(fù)運(yùn)算符,如下所示:+正號(hào)運(yùn)算符,如+4,+1.22等-負(fù)號(hào)運(yùn)算符,如-4,-

27、1.22等*乘法運(yùn)算符,如6*8,1.4*3.56等/除法運(yùn)算符,如6/8,1.4/3.56等%模運(yùn)算符或求余運(yùn)算符,如40%11等+加法運(yùn)算符,如6+8,1.4+3.56等-減法運(yùn)算符,如6-8,1.4-3.56等1.3.1 1.3.1 算術(shù)運(yùn)算符算術(shù)運(yùn)算符C+中算術(shù)運(yùn)算符和數(shù)學(xué)運(yùn)算的概念及運(yùn)算方法是一致的,但要注意以下幾點(diǎn)。(1)除法運(yùn)算。(2)求余運(yùn)算。(3)優(yōu)先級(jí)和結(jié)合性。(4)書寫格式。(5)溢出處理。1.3.1 1.3.1 算術(shù)運(yùn)算符算術(shù)運(yùn)算符【例Ex_OverFlow】 一個(gè)整數(shù)溢出的例子#include int main()short nTotal, nNum1, nNum2;

28、nNum1 = nNum2 = 1000;nTotal = nNum1*nNum2;coutnTotaln;return 0;1.3.2 1.3.2 賦值運(yùn)算符賦值運(yùn)算符1 1復(fù)合賦值復(fù)合賦值在C+中,規(guī)定了下列10種復(fù)合賦值運(yùn)算符:+=加賦值&=位與賦值-=減賦值|=位或賦值*=乘賦值=位異或賦值/=除賦值=右移位賦值1.3.2 1.3.2 賦值運(yùn)算符賦值運(yùn)算符它們都是在賦值符“=”之前加上其他運(yùn)算符而構(gòu)成的,其中的復(fù)合賦值運(yùn)算符的含義如表1.3所示,其他復(fù)合賦值運(yùn)算符的含義均與其相似。運(yùn) 算 符含 義例 子等 效 表 示+=加賦值a += ba = a + b-=減賦值a -= b

29、a = a - b*=乘賦值a *= ba = a * b/=除賦值a /= ba = a / b%=求余賦值nNum %= 8nNum = nNum % 81.3.2 1.3.2 賦值運(yùn)算符賦值運(yùn)算符(1)在復(fù)合賦值運(yùn)算符之間不能有空格,例如 += 不能寫成 + = ,否則編譯時(shí)將提示出錯(cuò)信息。(2)復(fù)合運(yùn)算符的優(yōu)先級(jí)和賦值符的優(yōu)先級(jí)一樣,在C+的所有運(yùn)算符中只高于逗號(hào)運(yùn)算符,而且復(fù)合賦值運(yùn)算符的結(jié)合性也和賦值符一樣,也是從右至左。因此,在組成復(fù)雜的表達(dá)式時(shí)要特別小心。例如:a *= b - 4/c + d等效于a = a * ( b - 4/c + d)而不等效于a = a * b - 4

30、/c + d1.3.2 1.3.2 賦值運(yùn)算符賦值運(yùn)算符2 2多重賦值多重賦值所謂多重賦值多重賦值是指在一個(gè)賦值表達(dá)式中出現(xiàn)兩個(gè)或更多的賦值符“=”。例如:nNum1 = nNum2 = nNum3 = 100 / 若結(jié)尾有分號(hào)“;”,則表示是一條語(yǔ)句由于賦值是一個(gè)表達(dá)式,因而幾乎可以出現(xiàn)在程序的任何地方,由于賦值運(yùn)算符的等級(jí)比較低,因此這時(shí)的賦值表達(dá)式兩邊應(yīng)加上圓括號(hào)。例如:a = 7 + (b = 8)/ 賦值表達(dá)式值為15,a值為15,b值為8a = (c = 7) + ( b = 8) / 賦值表達(dá)式值為15,a值為15,c值為7,b值為8( a = 6 ) = (c = 7) + (

31、 b = 8)/ 賦值表達(dá)式值為15,a值為15,c值為7,b值為81.3.3 1.3.3 數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換1 1自動(dòng)轉(zhuǎn)換自動(dòng)轉(zhuǎn)換自動(dòng)轉(zhuǎn)換自動(dòng)轉(zhuǎn)換是將數(shù)據(jù)類型按從低到高的順序自動(dòng)進(jìn)行轉(zhuǎn)換,如圖1.6所示,箭頭的方向表示轉(zhuǎn)換的方向。例如,10 + a + 2*1.25-5.0/4L的運(yùn)算次序如下:(1)進(jìn)行2*1.25的運(yùn)算,將2和1.25都轉(zhuǎn)換成double型,結(jié)果為double型的2.5。(2)進(jìn)行5.0/4L的運(yùn)算,將長(zhǎng)整型4L和5.0都轉(zhuǎn)換成double型,結(jié)果值為1.25。(3)進(jìn)行10 + a 的運(yùn)算,先將a轉(zhuǎn)換成int型整數(shù)97,運(yùn)算結(jié)果為107。(4)整數(shù)107和2.5相

32、加,先將整數(shù)107轉(zhuǎn)換成double型,結(jié)果為double型,值為109.5。(5)進(jìn)行109.5-1.25的運(yùn)算,結(jié)果為double型的108.25。1.3.3 1.3.3 數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換2 2強(qiáng)制轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換是在程序中通過(guò)指定數(shù)據(jù)類型來(lái)改變?nèi)鐖D1.6所示的類型轉(zhuǎn)換順序,將一個(gè)變量從其定義的類型改變成為另一種不同的類型。由于這種轉(zhuǎn)換可能會(huì)丟失有效的數(shù)據(jù)位,因而是不安全的。在強(qiáng)制轉(zhuǎn)換操作時(shí),C+有下列兩種基本格式:()()這里的類型名是任何合法的C+數(shù)據(jù)類型,如float、int等。通過(guò)類型的強(qiáng)制轉(zhuǎn)換可以將表達(dá)式(含常量、變量等)轉(zhuǎn)換成類型名指定的類型,例如:doub

33、le f = 3.56; int nNum;nNum = (int)f;/ 強(qiáng)制double轉(zhuǎn)換成int,小數(shù)部分被截去或者nNum = int(f);/ 或者nNum = (int)(f);1.3.4 1.3.4 關(guān)系運(yùn)算符關(guān)系運(yùn)算符C+提供了下列6種關(guān)系運(yùn)算符:小于,若表達(dá)式e1 e2成立,則結(jié)果為true,否則為false=小于等于,若表達(dá)式e1 大于,若表達(dá)式e1 e2成立,則結(jié)果為true,否則為false=大于等于,若表達(dá)式e1 = e2成立,則結(jié)果為true,否則為false=相等于,若表達(dá)式e1 = e2成立,則結(jié)果為true,否則為false!=不等于,若表達(dá)式e1 != e

34、2成立,則結(jié)果為true,否則為false其中,前4種的優(yōu)先級(jí)相同且高于后面的兩種。例如,若有表達(dá)式:a = b c則等效于a = ( b c )。若設(shè)整型變量a=3、b=4、c=5,則表達(dá)式中,先運(yùn)算bc,結(jié)果該條件不滿足,值為false(以0表示),然后再運(yùn)算a=0,顯然也為false,故整個(gè)表達(dá)式的值是false。1.3.5 1.3.5 邏輯運(yùn)算符邏輯運(yùn)算符C+提供了下列3種邏輯運(yùn)算符:!邏輯非(單目)&邏輯與(雙目)|邏輯或(雙目)邏輯非邏輯非“!”是指操作數(shù)為true結(jié)果為false,操作數(shù)為false結(jié)果為true。邏輯與邏輯與“&”是指當(dāng)兩個(gè)操作數(shù)都是true時(shí),

35、結(jié)果才為true,否則為false。邏輯或邏輯或“|”是指當(dāng)兩個(gè)操作數(shù)中有一個(gè)是true時(shí),結(jié)果就為true,而只有當(dāng)它們都為false時(shí),結(jié)果才為false。例如,若int a, b = 3, c = 0; 則在下面的表達(dá)式中(a = 0) & ( c = a + b );/ 注意這里的a=0是賦值表達(dá)式因(a = 0)的表達(dá)式值為0(false),故(c = a + b)不會(huì)被執(zhí)行。這樣,a,b和c的值分別為0,3,0。若有:(a = 2) | ( c = a + b );/ 注意這里的a=2是賦值表達(dá)式1.3.6 1.3.6 位運(yùn)算符位運(yùn)算符C+語(yǔ)言提供了6種位運(yùn)算符:按位求反(

36、單目)&按位與(雙目)按位異或(雙目)|按位或(雙目)右移(雙目)符1.3.7 1.3.7 條件運(yùn)算符條件運(yùn)算符條件運(yùn)算符“?:”是C+中唯一的一個(gè)三目運(yùn)算符,它具有下列格式: ? :表達(dá)式e1、表達(dá)式e2和表達(dá)式e3是條件運(yùn)算符“?:”的三個(gè)操作數(shù)。其中,表達(dá)式e1是C+中可以產(chǎn)生true和false結(jié)果的任何表達(dá)式。其功能是:如果表達(dá)式e1的結(jié)果為true,則執(zhí)行表達(dá)式e2,否則執(zhí)行表達(dá)式e3。例如:nNum = (a b) ? 10 : 8;當(dāng)(a b)為true時(shí),則表達(dá)式(a b) ? 10 : 8的結(jié)果為10,從而nNum = 10;否則(a b) ? 10 : 8的結(jié)果為

37、8,nNum = 8。1.3.8 sizeof1.3.8 sizeof運(yùn)算符運(yùn)算符sizeof的目的是返回操作數(shù)所占的內(nèi)存空間大?。ㄗ止?jié)數(shù)),它具有下列兩種格式:sizeof()sizeof()例如:sizeof(Hello)/ 計(jì)算Hello所占內(nèi)存的字節(jié)大小,結(jié)果為6sizeof(int)/ 計(jì)算整型int所占內(nèi)存的字節(jié)數(shù)1.3.9 1.3.9 逗號(hào)運(yùn)算符逗號(hào)運(yùn)算符逗號(hào)運(yùn)算符“,”是優(yōu)先級(jí)最低的運(yùn)算符,它用于把多個(gè)表達(dá)式連接起來(lái),構(gòu)成一個(gè)逗號(hào)表達(dá)式。逗號(hào)表達(dá)式的一般形式為:表達(dá)式1,表達(dá)式2,表達(dá)式3,表達(dá)式n在計(jì)算時(shí),C+將從左至右逐個(gè)計(jì)算每個(gè)表達(dá)式,最終整個(gè)表達(dá)式的結(jié)果是最后計(jì)算的那個(gè)

38、表達(dá)式的類型和值,即表達(dá)式n的類型和值。例如:a = 1, b = a + 2, c = b + 3該表達(dá)式依次從左至右計(jì)算,最終的類型和值為最后一個(gè)表達(dá)式“c = b + 3”的類型和值,結(jié)果為左值c(c值為6)。1.3.10 1.3.10 自增和自減自增和自減單目運(yùn)算符自增(+)和自減(-)為變量加1或減1提供了一種非常有效的方法。+和-既可放在變量的左邊也可以出現(xiàn)在變量的右邊,分別稱為前綴運(yùn)算符和后綴運(yùn)算符。例如:int i = 5;i+; / 合法:后綴自增,等效于i = i + 1; 或i += 1;+i;/ 合法:前綴自增,等效于i = i + 1; 或i += 1;i-; / 合

39、法:后綴自減,等效于i = i - 1; 或i -= 1;-i;/ 合法:前綴自減,等效于i = i - 1; 或i -= 1;(i+1)+; 或+(i+1); / 錯(cuò)誤:表達(dá)式i+1結(jié)果不是一個(gè)變量float f1, f2 = 3.0f;f1 = f2+;/ 合法:f1的值為3.0f,f2的值為4.0f(f1 = 5.0f)+;/ 合法:f1 = 5.0f 表達(dá)式的結(jié)果仍是f1,是一個(gè)變量1.3.10 1.3.10 自增和自減自增和自減若前綴運(yùn)算符和后綴運(yùn)算符僅用于某個(gè)變量的增1和減1,則這兩者是等價(jià)的。例如,若a的初值為5,a+和+a都是使a變成6。但如果將這兩個(gè)運(yùn)算符和其他運(yùn)算符組合在一

40、起,在求值次序上就會(huì)產(chǎn)生根本的不同。 如果用前綴前綴運(yùn)算符對(duì)一個(gè)變量增1(減1),則在將該變量增1(減1)后,用新的值在表達(dá)式中進(jìn)行其他的運(yùn)算。 如果用后綴后綴運(yùn)算符對(duì)一個(gè)變量增1(減1),則用該變量的原值在表達(dá)式中進(jìn)行其他的運(yùn)算后,再將該變量增1(減1)。例如:a = 5; b = +a;/ A:相當(dāng)于 a = a + 1; b = a;和a = 5; b = a+; / B:相當(dāng)于 b = a; a = a + 1; 1 . 4 1 . 4 基本語(yǔ)句基本語(yǔ)句1.4.1 1.4.1 順序語(yǔ)句和塊順序語(yǔ)句和塊1 1說(shuō)明語(yǔ)句說(shuō)明語(yǔ)句在C+中,把完成對(duì)數(shù)據(jù)結(jié)構(gòu)的定義和描述、對(duì)變量或標(biāo)識(shí)符常量的屬性

41、說(shuō)明(如初值、類型等)稱為說(shuō)明語(yǔ)句說(shuō)明語(yǔ)句或聲明語(yǔ)句聲明語(yǔ)句。說(shuō)明語(yǔ)句的目的是用來(lái)在程序中引入一個(gè)新的標(biāo)識(shí)符(變量名、函數(shù)名、數(shù)組名、類名、對(duì)象名、引用名及類型名等),本身一般不執(zhí)行操作。2 2表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句是C+程序中最簡(jiǎn)單也是最常用的語(yǔ)句。任何一個(gè)表達(dá)式加上分號(hào)就是一個(gè)表達(dá)式語(yǔ)句,例如:x + y;nNum = 5;1.4.1 1.4.1 順序語(yǔ)句和塊順序語(yǔ)句和塊3 3塊語(yǔ)句塊語(yǔ)句塊語(yǔ)句塊語(yǔ)句,簡(jiǎn)稱為塊(block),是由一對(duì)花括號(hào)“ ”括起來(lái)的語(yǔ)句,又稱為復(fù)合語(yǔ)句復(fù)合語(yǔ)句。例如:/ 塊開始int i = 2, j = 3, k = 4;coutijkendl; / 輸出結(jié)

42、果是2、3和4/ 塊結(jié)束1.4.2 1.4.2 選擇結(jié)構(gòu)語(yǔ)句選擇結(jié)構(gòu)語(yǔ)句1 1條件語(yǔ)句條件語(yǔ)句條件語(yǔ)句if具有下列一般形式:if () else 這里的if和else是C+的關(guān)鍵字。注意,if后的一對(duì)圓括號(hào)不能省略。當(dāng)表達(dá)式e為true或不為0時(shí),將執(zhí)行語(yǔ)句s1。當(dāng)表達(dá)式e為false或0時(shí),語(yǔ)句s2被執(zhí)行。其中,else可以省略,即變成這樣的簡(jiǎn)單的if語(yǔ)句:if () 1.4.2 1.4.2 選擇結(jié)構(gòu)語(yǔ)句選擇結(jié)構(gòu)語(yǔ)句【例Ex_Compare】 輸入兩個(gè)整數(shù),比較兩者的大小#include int main()int nNum1, nNum2;coutnNum1nNum2;if (nNum1!

43、=nNum2)if (nNum1nNum2)coutnNum1 nNum2endl;elsecoutnNum1 nNum2endl;elsecoutnNum1 = nNum2endl;return 0;程序運(yùn)行結(jié)果如下:Please input two integer numbers: 10 12310 1231.4.2 1.4.2 選擇結(jié)構(gòu)語(yǔ)句選擇結(jié)構(gòu)語(yǔ)句2 2開關(guān)語(yǔ)句開關(guān)語(yǔ)句當(dāng)程序有多個(gè)判斷條件時(shí),若使用if語(yǔ)句則可能使嵌套太多,降低程序的可讀性。開關(guān)語(yǔ)句switch能很好地解決這種問(wèn)題,它具有下列形式:switch ( ) case :語(yǔ)句s1case :語(yǔ)句s2.case :語(yǔ)句snd

44、efault :語(yǔ)句sn+1 1.4.2 1.4.2 選擇結(jié)構(gòu)語(yǔ)句選擇結(jié)構(gòu)語(yǔ)句【例Ex_Switch】 根據(jù)成績(jī)的等級(jí)輸出相應(yīng)的分?jǐn)?shù)段#include int main()char chGrade;coutchGrade;switch(chGrade)case A:case a: cout90-100endl;break;case B:case b: cout80-89endl;break;case C:case c: cout70-79endl;case D:case d: cout60-69endl;case E:case e: cout 60endl;default:couterror!

45、endl;return 0;1.4.2 1.4.2 選擇結(jié)構(gòu)語(yǔ)句選擇結(jié)構(gòu)語(yǔ)句運(yùn)行時(shí),當(dāng)用戶輸入運(yùn)行時(shí),當(dāng)用戶輸入A A時(shí),則運(yùn)行結(jié)果如下:時(shí),則運(yùn)行結(jié)果如下:Please input a char(AE): A90-100但當(dāng)用戶輸入但當(dāng)用戶輸入d d時(shí),則運(yùn)行結(jié)果如下:時(shí),則運(yùn)行結(jié)果如下:Please input a char(AE): d60-69 60error!1.4.3 1.4.3 循環(huán)結(jié)構(gòu)語(yǔ)句循環(huán)結(jié)構(gòu)語(yǔ)句1 1whilewhile語(yǔ)句語(yǔ)句語(yǔ)句具有下列格式:while ()【例Ex_SumWhile】 求整數(shù)150的和#include int main()intnNum = 1, n

46、Total = 0;while (nNum=50) nTotal += nNum;nNum+;coutThe sum from 1 to 50 is: nTotaln;return 0;程序運(yùn)行結(jié)果如下:The sum from 1 to 50 is: 12751.4.3 1.4.3 循環(huán)結(jié)構(gòu)語(yǔ)句循環(huán)結(jié)構(gòu)語(yǔ)句2 2dowhiledowhile語(yǔ)句語(yǔ)句語(yǔ)句具有下列格式:do while () ;【例Ex_SumDoWhile】 求整數(shù)150的和#include int main()intnNum = 1, nTotal = 0;do nTotal += nNum;nNum+; while (nN

47、um=50);coutThe sum from 1 to 50 is: nTotaln;return 0;程序運(yùn)行結(jié)果如下:The sum from 1 to 50 is: 12751.4.3 1.4.3 循環(huán)結(jié)構(gòu)語(yǔ)句循環(huán)結(jié)構(gòu)語(yǔ)句3 3forfor語(yǔ)句語(yǔ)句語(yǔ)句具有下列格式:for (表達(dá)式e1; 表達(dá)式e2; 表達(dá)式e3) 表達(dá)式e1用做循環(huán)變量的初始化,表達(dá)式e2用做循環(huán)體的循環(huán)條件,當(dāng)其為true時(shí),開始執(zhí)行循環(huán)體語(yǔ)句s,然后計(jì)算表達(dá)式e3,再判斷表達(dá)式e2的值是否為true,若是,再執(zhí)行循環(huán)體s,再計(jì)算表達(dá)式e3,如此反復(fù),直到表達(dá)式e2為false或0為止。如圖1.7所示。1.4.3

48、1.4.3 循環(huán)結(jié)構(gòu)語(yǔ)句循環(huán)結(jié)構(gòu)語(yǔ)句【例Ex_SumFor】 求整數(shù)150的和#include int main()intnTotal=0;for (int nNum=1; nNum=50; nNum+)nTotal += nNum;coutThe sum from 1 to 50 is: nTotaln;return 0;程序運(yùn)行結(jié)果如下:The sum from 1 to 50 is: 12751.4.4 break1.4.4 break和和continuecontinue語(yǔ)句語(yǔ)句在C+程序中,若需要跳出循環(huán)結(jié)構(gòu)或提前結(jié)束本次循環(huán),就需要使用break和continue語(yǔ)句,其格式如下:b

49、reak;continue;【例Ex_Continue】 將1100之間不能被7整除的數(shù)輸出#include int main()for (int nNum=1; nNum=100; nNum+) if (nNum%7 = 0) continue;coutnNum ;coutn;return 0;1.4.4 break1.4.4 break和和continuecontinue語(yǔ)句語(yǔ)句程序運(yùn)行結(jié)果如下:1 2 3 4 5 6 8 9 10 11 12 13 15 16 17 18 19 20 22 23 24 2526 27 29 30 31 32 33 34 36 37 38 39 40 41

50、 43 44 45 46 47 4850 51 52 53 54 55 57 58 59 60 61 62 64 65 66 67 68 69 71 7273 74 75 76 78 79 80 81 82 83 85 86 87 88 89 90 92 93 94 9596 97 99 1001 . 5 1 . 5 函數(shù)和預(yù)處理函數(shù)和預(yù)處理1.5.1 1.5.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用1 1函數(shù)的定義函數(shù)的定義在C+程序中,定義一個(gè)函數(shù)的格式如下: ( ) 據(jù)上述定義,可以編寫一個(gè)函數(shù)。例如,下列函數(shù)的作用是計(jì)算兩個(gè)整數(shù)的絕對(duì)值之和:int sum(int x, int y)if

51、(x0) x = -x;if (y0) y = -y;int z = x + y;return z;1.5.1 1.5.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用由于return的后面可以是常量、變量或任何合法的表達(dá)式,因此函數(shù)sum也可簡(jiǎn)化為:int sum(int x, int y)if (x0) x = -x;if (y 10)return;/ 1.5.1 1.5.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用2 2函數(shù)的調(diào)用函數(shù)的調(diào)用調(diào)用函數(shù)時(shí),先寫函數(shù)名,然后緊跟括號(hào),括號(hào)里是實(shí)際調(diào)用該函數(shù)時(shí)所給定的參數(shù),稱為實(shí)際參數(shù),簡(jiǎn)稱實(shí)參實(shí)參,并與形參相對(duì)應(yīng)。函數(shù)調(diào)用的一般形式為:( );【例Ex_Call】

52、 函數(shù)的調(diào)用#include void printline( char ch, int n )for (int i = 0 ; in ; i+)coutch;coutendl ;int main()int row = 5;for (int i = 0; irow; i+)printline(*, i+1);/ A A語(yǔ)句語(yǔ)句return 0;1.5.1 1.5.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用程序運(yùn)行結(jié)果如下:*1.5.1 1.5.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用3 3函數(shù)的聲明函數(shù)的聲明聲明一個(gè)函數(shù)按下列格式進(jìn)行: ( );可見,函數(shù)聲明的格式是在函數(shù)頭的后面加上分號(hào)“;”。但要注意

53、,函數(shù)聲明的內(nèi)容應(yīng)和函數(shù)的定義相同。例如,對(duì)于前面遇到的sum函數(shù)和printline函數(shù)可有如下聲明:int sum(int x, int y);void printline( char ch, int n );由于函數(shù)的聲明僅是對(duì)函數(shù)的原型進(jìn)行說(shuō)明,即函數(shù)原型聲明,其聲明的形參變量名在聲明語(yǔ)句中并沒有任何語(yǔ)句操作它,因此這里的形參名和函數(shù)定義時(shí)的形參名可以不同,且函數(shù)聲明時(shí)的形參名還可以省略,但函數(shù)名、函數(shù)類型、形參類型及個(gè)數(shù)應(yīng)與定義時(shí)相同。例如,下面幾種形式都是對(duì)sum函數(shù)原型的合法聲明:int sum(int a, int b); / 允許原型聲明時(shí)的形參名與定義時(shí)不同int sum(

54、int, int); / 省略全部形參名int sum(int a, int);/ 省略部分形參名int sum(int, int b);/ 省略部分形參名1.5.2 1.5.2 函數(shù)的參數(shù)傳遞函數(shù)的參數(shù)傳遞C+中函數(shù)的參數(shù)傳遞有兩種方式,一種是按值傳遞,另一種是地址傳遞或引用傳遞。這里先來(lái)說(shuō)明按值傳遞的參數(shù)傳遞方法?!纠鼸x_SwapValue】 交換函數(shù)兩個(gè)參數(shù)的值#include void swap(float x, float y)float temp;temp = x; x = y; y = temp;coutx = x, y = yn;int main()float a = 20,

55、 b = 40;couta = a, b = bn;swap(a, b);couta = a, b = bn;return 0;1.5.2 1.5.2 函數(shù)的參數(shù)傳遞函數(shù)的參數(shù)傳遞程序運(yùn)行結(jié)果如下:a = 20, b = 40 x = 40, y = 20a = 20, b = 401.5.3 1.5.3 帶默認(rèn)形參值的函數(shù)帶默認(rèn)形參值的函數(shù)在C+中,允許在函數(shù)的聲明或定義時(shí)給一個(gè)或多個(gè)參數(shù)指定默認(rèn)值。這樣在調(diào)用時(shí),可以不給出參數(shù),而按指定的默認(rèn)值進(jìn)行工作。例如:void delay(int loops=1000);/ 函數(shù)聲明/void delay(int loops)/ 函數(shù)定義if (l

56、oops=0) return;for (int i=0; iloops; i+);/ 空循環(huán),起延時(shí)作用這樣,當(dāng)調(diào)用delay();/ 和delay(1000)等效時(shí),程序都會(huì)自動(dòng)將loops當(dāng)成1000的值來(lái)進(jìn)行處理。當(dāng)然,也可重新指定相應(yīng)參數(shù)值,例如:delay(2000);1.5.3 1.5.3 帶默認(rèn)形參值的函數(shù)帶默認(rèn)形參值的函數(shù)在設(shè)置函數(shù)的默認(rèn)參數(shù)值時(shí)要注意:(1)當(dāng)函數(shù)既有原型聲明又有定義時(shí),默認(rèn)參數(shù)只能在原型聲明中指定,而不能在函數(shù)定義中指定。例如:void delay(int loops);/ 函數(shù)原型聲明/void delay(int loops = 1000)/ 錯(cuò)誤錯(cuò)誤:

57、此時(shí)不能在函數(shù)定義中指定默認(rèn)參數(shù)/ (2)當(dāng)一個(gè)函數(shù)中需要有多個(gè)默認(rèn)參數(shù)時(shí),則形參分布中,默認(rèn)參數(shù)應(yīng)嚴(yán)格從右到左逐次定義和指定,中間不能跳開。例如:void display(int a, int b, int c = 3);/ 合法void display(int a, int b = 2, int c = 3);/ 合法void display(int a = 1, int b = 2, int c = 3);/ 合法:可以對(duì)所有的參數(shù)設(shè)置默認(rèn)值void display(int a, int b = 2, int c);/ 錯(cuò)誤錯(cuò)誤:默認(rèn)參數(shù)應(yīng)從最右邊開始void display(int a

58、 = 1, int b, int c = 3);/ 錯(cuò)誤錯(cuò)誤:多個(gè)默認(rèn)參數(shù)中間不能有非默認(rèn)參數(shù)1.5.3 1.5.3 帶默認(rèn)形參值的函數(shù)帶默認(rèn)形參值的函數(shù)(3)當(dāng)帶有默認(rèn)參數(shù)的函數(shù)調(diào)用時(shí),系統(tǒng)按從左到右的順序?qū)?shí)參與形參結(jié)合,當(dāng)實(shí)參的數(shù)目不足時(shí),系統(tǒng)將按同樣的順序用聲明或定義中的默認(rèn)值來(lái)補(bǔ)齊所缺少的參數(shù)?!纠鼸x_Default】 在函數(shù)定義中設(shè)置多個(gè)默認(rèn)參數(shù)#include void display(int a, int b = 2, int c = 3)/ 在函數(shù)定義中設(shè)置默認(rèn)參數(shù)couta = a, b = b, c = cn;int main()display(1);display(1

59、, 5);display(1, 7, 9);return 0;1.5.3 1.5.3 帶默認(rèn)形參值的函數(shù)帶默認(rèn)形參值的函數(shù)程序運(yùn)行結(jié)果如下:a = 1, b = 2, c = 3a = 1, b = 5, c = 3a = 1, b = 7, c = 91.5.3 1.5.3 帶默認(rèn)形參值的函數(shù)帶默認(rèn)形參值的函數(shù)(4)由于對(duì)同一個(gè)函數(shù)的原型可作多次聲明,因此在函數(shù)聲明中指定多個(gè)默認(rèn)參數(shù)時(shí),可用多條函數(shù)原型聲明語(yǔ)句來(lái)指定,但同一個(gè)參數(shù)的默認(rèn)值只能指定一次。例如,例Ex_Default可改寫為:#include using namespace std;/ 下面兩條函數(shù)說(shuō)明語(yǔ)句等效于void dis

60、play(int a, int b = 2, int c = 3);void display(int a, int b, int c=3);/ 指定c為默認(rèn)參數(shù)void display(int a, int b=2, int c);/ 指定b為默認(rèn)參數(shù)/1.5.4 1.5.4 函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用例如,用遞歸函數(shù)編程求n的階乘n!。(n!=n*(n-1)*(n-2)*2*1)。它也可用下式表示:1 n=0n!=n*(n-1)! n0當(dāng)時(shí)當(dāng)時(shí)1.5.4 1.5.4 函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用由于n!和(n-1)!都是同一個(gè)問(wèn)題的求解,因此可將n!用遞歸函數(shù)long factorial(int n)來(lái)描述,程序代碼如下?!?/p>

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論