第02章基本C++語言_第1頁
第02章基本C++語言_第2頁
第02章基本C++語言_第3頁
第02章基本C++語言_第4頁
第02章基本C++語言_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1第第2章章基本基本C+語言語言 2.1 C+程序結(jié)構(gòu)程序結(jié)構(gòu) 2.2 數(shù)據(jù)類型和基本輸入輸出數(shù)據(jù)類型和基本輸入輸出 2.3 運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式 2.4 基本語句基本語句 2.5 函數(shù)和預(yù)處理函數(shù)和預(yù)處理 2.6 構(gòu)造類型構(gòu)造類型 2.7 指針和引用指針和引用 上機(jī)訓(xùn)練上機(jī)訓(xùn)練22.1C+程序結(jié)構(gòu)程序結(jié)構(gòu) 2.1.1幾個(gè)幾個(gè)C+程序程序 例例11 在屏幕上輸出一個(gè)由星號(hào)形成的三角形。/ 輸出星號(hào)的三角形陣列#include void DoDraw(int num); / 聲明一個(gè)全局函數(shù)void main()int num=5; / 定義并初始化變量DoDraw(num);/ 函數(shù)的

2、調(diào)用void DoDraw(int num)/ 函數(shù)的定義for (int i=0; inum; i+)/ 循環(huán)語句for (int j=0; j=i; j+)cout*;coutn; 32.1C+程序結(jié)構(gòu)程序結(jié)構(gòu) 例例Ex_Simple2Ex_Simple2 用類的概念重寫例Ex_Draw。/ 輸出星號(hào)的三角形陣列#include class CDrawArray/ 定義一個(gè)類public:void DoDraw(int num);/ 聲明類的公有成員函數(shù);void CDrawArray:DoDraw(int num)/ 成員函數(shù)的實(shí)現(xiàn)for (int i=0;inum;i+)for (in

3、t j=0;j=i;j+)cout*;coutn;void main()int num=5;CDrawArray myDraw;/ 定義類的一個(gè)對(duì)象myDraw.DoDraw(num);/ 調(diào)用此對(duì)象的成員函數(shù) 42.1C+程序結(jié)構(gòu)程序結(jié)構(gòu)2.1.2C+程序的基本組成程序的基本組成 C+程序往往由預(yù)處理命令、語句、函數(shù)、變量和對(duì)象、輸入與輸出以及注釋等幾個(gè)基本部分組成的。(1)(1)預(yù)處理命令在程序的一開始出現(xiàn)含有以“#”開頭的命令,它們是預(yù)處理命令。三類預(yù)處理命令:宏定義命令、文件包含命令和條件編譯命令。(2)(2)語句可以是用來判斷的條件語句,可以是用來反復(fù)運(yùn)行的循環(huán)語句等。(3)(3)函

4、數(shù)一個(gè)程序由若干個(gè)函數(shù)組成。有的是系統(tǒng)中所提供的庫函數(shù),有的是根據(jù)自己需要自己編制設(shè)計(jì)的函數(shù)。程序中必須有一個(gè)且只能有一個(gè)主函數(shù)main。(4)(4)變量和對(duì)象變量的類型有整型(int)、字符型(char)以及浮點(diǎn)型(float)等。對(duì)象通常是指“類”的實(shí)例(具有該“類”類型的變量),如myDraw是類CDrawArray的對(duì)象。(5)(5)輸入與輸出使用輸入與輸出可以要求鍵入一些數(shù)值或把計(jì)算的結(jié)果顯示在屏幕上。(6)(6)注釋程序的目的不僅在于實(shí)現(xiàn)某種功能、解決某個(gè)問題,而且還在于數(shù)據(jù)結(jié)構(gòu)和算法的交流。注釋能提高程序的可讀性,幫助用戶對(duì)程序的理解。52.1C+程序結(jié)構(gòu)程序結(jié)構(gòu)2.1.3C+程

5、序的書寫風(fēng)格程序的書寫風(fēng)格 標(biāo)識(shí)符命名標(biāo)識(shí)符命名 用來標(biāo)識(shí)變量名、函數(shù)名、數(shù)組名、類名、對(duì)象名、類型名、文件名等的有效字符序列。標(biāo)識(shí)符命名的好壞也會(huì)影響程序的可讀性,命名時(shí)注意: (1)(1)合法性標(biāo)識(shí)符由大小寫字母、數(shù)字字符(09)和下劃線組成,第一個(gè)字符必須為字母或下劃線。任何標(biāo)識(shí)符中都不能有空格、標(biāo)點(diǎn)符號(hào)及其他字符。注意注意,標(biāo)識(shí)符的大小寫是有區(qū)別的。用戶定義的標(biāo)識(shí)符不能和系統(tǒng)的關(guān)鍵字同名。(2)(2)有效性標(biāo)識(shí)符的長(zhǎng)度(組成標(biāo)識(shí)符的字符個(gè)數(shù))是任意的,最好不超過32個(gè),因?yàn)橛械木幾g系統(tǒng)只能識(shí)別前32個(gè)字符,也就是說前32個(gè)字符相同的兩個(gè)不同標(biāo)識(shí)符被有的系統(tǒng)認(rèn)為是同一個(gè)標(biāo)識(shí)符。(3)(3

6、)易讀性在定義標(biāo)識(shí)符時(shí),若能做到“見名知意”就可以達(dá)到易讀性的目的。 62.1C+程序結(jié)構(gòu)程序結(jié)構(gòu)縮進(jìn)和注釋縮進(jìn)和注釋 縮進(jìn)是指程序在書寫時(shí)不要將程序的每一行都由第一列開始,在適當(dāng)?shù)牡胤郊舆M(jìn)一些空行或空格。它同注釋一樣,也是為了提高程序的可讀性。注釋要注意的是:(1)(1)注釋應(yīng)在編程的過程中同時(shí)進(jìn)行,不要指望程序開發(fā)完成后再補(bǔ)寫注釋。那樣只會(huì)多花好幾倍的時(shí)間,更為嚴(yán)重的是,時(shí)間長(zhǎng)了以后甚至?xí)x不懂自己寫的程序。(2)(2)必要的注釋內(nèi)容應(yīng)包含:源程序的總體注釋(文件名、作用、創(chuàng)建時(shí)間、版本、作者及引用的手冊(cè)、運(yùn)行環(huán)境等)、函數(shù)注釋(目的、算法、使用的參數(shù)和返回值的含義、對(duì)環(huán)境的一些假設(shè)等)及

7、其他的少量注釋。千萬不要陳述那些一目了然的內(nèi)容,否則會(huì)使注釋的效果適得其反。 72.2數(shù)據(jù)類型和基本輸入輸出數(shù)據(jù)類型和基本輸入輸出 2.2.1基本數(shù)據(jù)類型基本數(shù)據(jù)類型使用基本數(shù)據(jù)類型時(shí)需要注意:(1)(1)無符號(hào)和有符號(hào)的區(qū)別在于數(shù)值最高位的含義。對(duì)signed類型,最高位是符號(hào)位,其余各位表示數(shù)值大??;unsigned類型的各個(gè)位都用來表示數(shù)值大小;相同基本數(shù)據(jù)類型的signed和unsigned的數(shù)值范圍是不同。(2) (2) char、short、int和long可統(tǒng)稱為整型。缺省時(shí),char、short、int和long本身是有符號(hào)(signed)的。 82.2數(shù)據(jù)類型和基本輸入輸出數(shù)

8、據(jù)類型和基本輸入輸出2.2.2常量常量 整型常量整型常量 (1)(1)十進(jìn)制整型常量:即十進(jìn)制整數(shù),如34、128等。(2)(2)八進(jìn)制整型常量:以0開頭的數(shù),由0至7的數(shù)字組成。(3)(3)十六進(jìn)制整型常量:以0 x或0X開頭的數(shù),由0至9、A至F或a至f組成。需要注意的是: 整型常量中的長(zhǎng)整型(long)要以L或小寫字母l作為結(jié)尾。 整型常量中的無符號(hào)型(unsigned)要以U或u作為結(jié)尾。 浮點(diǎn)型常量浮點(diǎn)型常量 (1)(1)十進(jìn)制數(shù)形式:由整數(shù)部分和小數(shù)部分組成。(2)(2)指數(shù)形式:采用科學(xué)表示法,能表示出很大或很小的浮點(diǎn)數(shù)。若浮點(diǎn)型常量是以F(或f)結(jié)尾的,則表示單精度類型(flo

9、at),以L(或小寫字母l)結(jié)尾的,表示長(zhǎng)雙精度類型(long double)。若一個(gè)浮點(diǎn)型常量沒有任何說明,表示雙精度類型(double)。 92.2數(shù)據(jù)類型和基本輸入輸出數(shù)據(jù)類型和基本輸入輸出字符常量字符常量 字符常量是用單引號(hào)括起來的一個(gè)字符。 102.2數(shù)據(jù)類型和基本輸入輸出數(shù)據(jù)類型和基本輸入輸出字符串常量字符串常量 字符串常量是一對(duì)雙引號(hào)括起來的字符序列??梢园崭?、轉(zhuǎn)義序列符或其他字符。由于雙引號(hào)是字符串的分界符,因此如果需要在字符串中出現(xiàn)雙引號(hào)則必須用“”表示。例如:“Please press ”F1” to help!”這個(gè)字符串被解釋為:Please press “F1”

10、to help!字符串常量必須在同一行書寫,若一行寫不下,則需要用來連接,不要將字符常量和字符串常量混淆不清,它們主要的區(qū)別如下:(1)(1)字符常量用單引號(hào)括起來,占一個(gè)字節(jié);字符串常量是用雙引號(hào)括起來,至少占用兩個(gè)字節(jié)。例如a是字符常量,占有的一個(gè)字節(jié)用來存放字符a的ASCII碼值,而“a”是字符串常量,它的長(zhǎng)度不是1而是2,除了字符a之外,它的末尾還有個(gè)0字符。每個(gè)字符串的末尾都有一個(gè)這樣的字符。(2)(2)字符常量實(shí)際上是整型常量的特殊形式,它可以參與常用的算術(shù)運(yùn)算;而字符串常量則不能。例如:int b= a+3;/ 結(jié)果b為100,這是因?yàn)閷的ASCII碼值97參與運(yùn)算 112.2

11、數(shù)據(jù)類型和基本輸入輸出數(shù)據(jù)類型和基本輸入輸出符號(hào)常量符號(hào)常量 例例Ex_PI1Ex_PI1 用#define定義符號(hào)常量。#include #define PI 3.14159void main()double r = 100.0, area;area = PI * r * r;cout圓的面積是:area n; 122.2數(shù)據(jù)類型和基本輸入輸出數(shù)據(jù)類型和基本輸入輸出2.2.3變量變量 變量的定義變量的定義 定義變量是用下面的格式語句進(jìn)行定義的: ; 需要說明的是:(1)(1)在同一個(gè)程序塊中,不能有兩個(gè)相同的變量名。(2)(2)沒有字符串變量類型,字符串是用字符類型的數(shù)組或指針來定義的。 (

12、3)(3)與其他語言相比,C+變量的定義比較自由。 變量的初始化變量的初始化程序中常需要對(duì)一些變量預(yù)先設(shè)置初值,這一過程稱為初始化??梢栽诙x變量時(shí)同時(shí)使變量初始化,也可以在多個(gè)變量的定義語句中單獨(dú)對(duì)某個(gè)變量初始化。需要注意的是,一個(gè)未初始化的變量不是沒有數(shù)值,而是取決于變量在系統(tǒng)中的存儲(chǔ)形式,它可能是系統(tǒng)的缺省值或無效值。 132.2數(shù)據(jù)類型和基本輸入輸出數(shù)據(jù)類型和基本輸入輸出2.2.4基本輸入輸出基本輸入輸出 輸出流輸出流(cout) 通過cout可以輸出一個(gè)整數(shù)、實(shí)數(shù)、字符及字符串,cout中的插入符“ .其中,提取符“”可以連續(xù)寫多個(gè),每個(gè)后面跟一個(gè)表達(dá)式,該表達(dá)式通常是獲得輸入值的變

13、量或?qū)ο蟆?142.3運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式 2.3.1算術(shù)運(yùn)算符算術(shù)運(yùn)算符 算術(shù)運(yùn)算符如下所示:+(正號(hào)運(yùn)算符,如+4,+1.23等)-(負(fù)號(hào)運(yùn)算符,如-4,-1.23等)*(乘法運(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)除法運(yùn)算兩個(gè)整數(shù)相除,結(jié)果為整數(shù),如7/5的結(jié)果為1,它是將小數(shù)部分去掉,而不是四舍五入;若除數(shù)和被除數(shù)中有一個(gè)是浮點(diǎn)數(shù),則進(jìn)行浮點(diǎn)數(shù)除法,結(jié)果是浮點(diǎn)型。如7/5.0、7.0

14、/5、7.0/5.0的結(jié)果都是1.4。(2)求余運(yùn)算 求余運(yùn)算要求參與運(yùn)算的兩個(gè)操作數(shù)都是整型,結(jié)果是兩個(gè)數(shù)相除的余數(shù)。例如40%5的結(jié)果是0,40%11的結(jié)果是7。要理解負(fù)值的求余運(yùn)算,例如40%-11結(jié)果是7,-40%11結(jié)果是-7,-40%-11結(jié)果也是-7。 152.3運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式(3)(3)優(yōu)先級(jí)和結(jié)合性 將表達(dá)式的求值中多種運(yùn)算之間的先后關(guān)系(即運(yùn)算符之間的優(yōu)先關(guān)系)用運(yùn)算符的優(yōu)先級(jí)表示,優(yōu)先級(jí)的數(shù)值越小優(yōu)先級(jí)越高。在算術(shù)運(yùn)算符中,單目運(yùn)算符的優(yōu)先級(jí)最高,其次是乘、除和求余,最后是加減。 優(yōu)先級(jí)相同的運(yùn)算符,則按它們的結(jié)合性進(jìn)行處理。運(yùn)算符的結(jié)合性是指運(yùn)算符和操作數(shù)

15、的結(jié)合方式,有“從左至右”和“從右至左”?!皬淖笾劣业慕Y(jié)合”指運(yùn)算符左邊的操作數(shù)先與運(yùn)算符相結(jié)合,再與運(yùn)算符右邊的操作數(shù)進(jìn)行運(yùn)算;自右至左的結(jié)合次序是將運(yùn)算符右邊的操作數(shù)先與運(yùn)算符相結(jié)合。 在算術(shù)運(yùn)算符中,除單目運(yùn)算符外,其余運(yùn)算符的結(jié)合性都是從左至右的。(4)(4)關(guān)于書寫格式 在使用運(yùn)算符進(jìn)行數(shù)值運(yùn)算時(shí),若書寫時(shí)沒有在雙目運(yùn)算符兩邊加上空格,則有時(shí)編譯系統(tǒng)會(huì)做出與自己想象中不同的理解。 書寫時(shí),有時(shí)有意識(shí)地加上一些括號(hào)。這樣不僅增強(qiáng)程序的可讀性,而且,尤其當(dāng)對(duì)優(yōu)先關(guān)系猶豫時(shí),加上括號(hào)是保證正確結(jié)果的最好方法。(5)(5)溢出處理某數(shù)除以0或當(dāng)其它浮點(diǎn)溢出時(shí),編譯系統(tǒng)將報(bào)告錯(cuò)誤并終止程序運(yùn)行

16、。但對(duì)整數(shù)溢出,系統(tǒng)卻不認(rèn)為是一個(gè)錯(cuò)誤。 162.3運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式2.3.2賦值運(yùn)算符賦值運(yùn)算符 復(fù)合賦值復(fù)合賦值10種復(fù)合賦值運(yùn)算符:+=,-=,*=,/=,%=,=,|=,=,= 注意:注意:(1)(1)在復(fù)合賦值運(yùn)算符之間不能有空格,例如 += 不能寫成 + = 。(2) (2) 所有運(yùn)算符高于逗號(hào)運(yùn)算符,復(fù)合賦值運(yùn)算符的結(jié)合性是從右至左的。多重賦值多重賦值 指在一個(gè)賦值表達(dá)式中出現(xiàn)兩個(gè)或更多的賦值符(“=”),例如:nNum1 = nNum2 = nNum3 = 100;賦值符的結(jié)合性是從右至左,上述賦值的過程:首先對(duì)nNum3 = 100求值,將100賦值給nNum3,

17、同時(shí)該賦值表達(dá)式取得值100;然后將該值賦給nNum2,該賦值表達(dá)式也取得值100;最后將100賦給nNum1。 172.3運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式2.3.3數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換自動(dòng)轉(zhuǎn)換自動(dòng)轉(zhuǎn)換將數(shù)據(jù)類型從低到高進(jìn)行轉(zhuǎn)換,例如:10 + a + 2*1.25 - 5.0/4L運(yùn)算:(1)(1)2*1.25的運(yùn)算,將2和1.25都轉(zhuǎn)換成double型,結(jié)果為double型的2.5。(2) (2) 長(zhǎng)整型4L和5.0轉(zhuǎn)換成double型,5.0/4L結(jié)果為double型,值為1.25。(3)(3)進(jìn)行10 + a 的運(yùn)算,先將a轉(zhuǎn)換成整數(shù)97,運(yùn)算結(jié)果為107。(4)(4)整數(shù)107和2.

18、5相加,先將整數(shù)107轉(zhuǎn)換成double型,值為109.5。(5)(5)進(jìn)行109.5-1.25的運(yùn)算,結(jié)果為double型的108.25。強(qiáng)制轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換 強(qiáng)制類型有下列兩種格式:()、() 。整型(int)無符號(hào)整型(unsigned)長(zhǎng)整型(long)無符號(hào)長(zhǎng)整型(unsignedlong)雙精度浮點(diǎn)型(double)短整型,字符型(short,char)單精度浮點(diǎn)型(float)圖2.1類型轉(zhuǎn)換的順序182.3運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式2.3.4關(guān)系運(yùn)算符關(guān)系運(yùn)算符 是比較兩個(gè)操作數(shù)是否符合給定的條件。若符合條件,則關(guān)系表達(dá)式的值為“真”,否則為“假”。在編譯系統(tǒng)中,往往將“真”表示

19、為“true”或1,將“假”表示為“false”或0。而任何不為0的數(shù)被認(rèn)為是“真”,0被認(rèn)為是“假”。由于關(guān)系運(yùn)算需要兩個(gè)操作數(shù),所以關(guān)系運(yùn)算符都是雙目運(yùn)算符。提供了6種關(guān)系運(yùn)算符:(小于),(大于),=(大于等于),= =(相等于), ! =(不等于)其中,前4種的優(yōu)先級(jí)相同且高于后面的兩種。例如:a = b c等效于a = ( b c )但關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符(其他可參見表2.6)。例如:a = b c等效于a = ( b c ) 192.3運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式2.3.5邏輯運(yùn)算符邏輯運(yùn)算符 將多個(gè)關(guān)系表達(dá)式或邏輯量組成一個(gè)邏輯表達(dá)式。提供了3種邏輯運(yùn)算符:!邏輯非(

20、單目):指將“真”變“假”,“假”變“真”。&邏輯與(雙目):指兩個(gè)操作數(shù)都是“真”時(shí),結(jié)果為“真”,否則為“假”。|邏輯或(雙目):指兩個(gè)操作數(shù)中有一個(gè)是“真”時(shí),結(jié)果為“真”,只有它們都為“假”時(shí),結(jié)果才為“假”?!斑壿嫹恰?、“邏輯與”和“邏輯或”的優(yōu)先級(jí)依次從高到低,且“邏輯非”的優(yōu)先級(jí)還比算術(shù)運(yùn)算符和關(guān)系運(yùn)算符高,而“邏輯與”和“邏輯或”的優(yōu)先級(jí)卻比關(guān)系運(yùn)算符要低。例如:0| 2 4 - !0表達(dá)式的運(yùn)算過程是這樣的:(1)(1)進(jìn)行“!0”的運(yùn)算,結(jié)果為1(“真”)。(2)(2)進(jìn)行“8 4-1”的運(yùn)算,即“8 3”,結(jié)果為0(“假”)。(3)(3)進(jìn)行“0|0” 的運(yùn)算,結(jié)果為0(

21、“假”)。表達(dá)式的值為0。 202.3運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式2.3.6 位運(yùn)算符位運(yùn)算符 是對(duì)操作數(shù)按其在計(jì)算機(jī)內(nèi)表示的二制數(shù)逐位地進(jìn)行邏輯運(yùn)算或移位運(yùn)算,參與運(yùn)算的操作數(shù)只能是整型常量或變量。提供了六種位運(yùn)算符:(按位求反,單目運(yùn)算符):將一個(gè)二進(jìn)制數(shù)的每一位求反,即0變成1,1變成0。(右移,雙目運(yùn)算符):將左操作數(shù)的二進(jìn)制值向右移動(dòng)指定的位數(shù),右移后,移出的低位舍棄。無符號(hào)數(shù)高位補(bǔ)0;有符號(hào)數(shù)高位補(bǔ)符號(hào)位。&(按位與,雙目運(yùn)算符):將兩個(gè)操作數(shù)對(duì)應(yīng)的二進(jìn)制位進(jìn)行邏輯與操作。(按位異或,雙目運(yùn)算符):將兩個(gè)操作數(shù)對(duì)應(yīng)的二進(jìn)制位進(jìn)行異或操作。|(按位或,雙目運(yùn)算符):將兩個(gè)操作數(shù)對(duì)應(yīng)的

22、二進(jìn)制位進(jìn)行邏輯或操作。說明:說明:(1)(1)左移和右移運(yùn)算可替代乘和除以2的n次方運(yùn)算,n為移位的位數(shù)。(2) (2) 當(dāng)多個(gè)位運(yùn)算符出現(xiàn)在同一個(gè)表達(dá)式中時(shí),要注意它們的優(yōu)先級(jí)別。 212.3運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式2.3.7 三目運(yùn)算符三目運(yùn)算符 C+中唯一的三目運(yùn)算符是條件運(yùn)算符,其格式如下: ? :“條件表達(dá)式”是C+中可以產(chǎn)生“真”和“假”結(jié)果的任何表達(dá)式,如果條件表達(dá)式的結(jié)果為“真”,則執(zhí)行表達(dá)式1,否則執(zhí)行表達(dá)式2。例如:nNum = (a b) ? 10 : 8;注意,注意,只有在表達(dá)式2后面才能出現(xiàn)分號(hào)結(jié)束符,“表達(dá)式1”和“表達(dá)式2”中都不能有分號(hào)。 222.3運(yùn)算符

23、和表達(dá)式運(yùn)算符和表達(dá)式2.3.8增增1和減和減1運(yùn)算符運(yùn)算符 +和-既可放在變量的左邊也可以出現(xiàn)在變量的右邊,稱為前綴運(yùn)算符和后綴運(yùn)算符。例如:i+; 或 +i;(等效于i = i + 1; 或i += 1;)i-; 或 -i;(等效于i = i - 1; 或i -= 1;)若前綴運(yùn)算符和后綴運(yùn)算符僅用于某個(gè)變量的增1和減1,這兩都是等價(jià)的,如果將這兩個(gè)運(yùn)算符和其他的運(yùn)算符組合在一起,在求值次序上就會(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)算

24、后,再將該變量增1(減1)。例如:a = 5;b = +a - 1; / 相當(dāng)于 a = a + 1; b = a 1;和a = 5;b = a+ -1; / 相當(dāng)于 b = a 1; a = a + 1; 雖然它們中的a值的結(jié)果都是6,但b的結(jié)果卻不一樣,前者為5,后者為4。 232.4基本語句基本語句2.4.2選擇語句選擇語句 條件語句條件語句 條件語句if具有下列形式:if () else (1)(1)條件語句中的表達(dá)式一般為邏輯表達(dá)式或關(guān)系表達(dá)式。表達(dá)式的類型也可以是任意的數(shù)值類型(包括整型、浮點(diǎn)型、字符型等)。 (2)(2)適當(dāng)添加花括號(hào)(“ ”)來增加程序的可讀性。 (3)(3)條

25、件語句中的語句1和語句2也可是if條件語句,這就形成了if語句的嵌套。(4)(4)else總是和其前面最近的if配套的。 242.4基本語句基本語句開關(guān)語句開關(guān)語句 具有下列形式:switch ( )case :語句1case :語句2.case :語句n default :語句n+1 注意:注意:(1)(1)switch后面的表達(dá)式可以是整型、字符型或枚舉型的表達(dá)式,而case后面的常量表達(dá)式的類型必須與其匹配。(2)(2)多個(gè)case可以共有一組執(zhí)行語句。(3)(3)若同一個(gè)case后面的語句是復(fù)合語句,即有兩條或兩條以上的語句,則這些語句可以不用花括號(hào)(“”)括起來。(4) (4) 由于

26、case語句起標(biāo)號(hào)作用,因此每一個(gè)case常量表達(dá)式的值必須互不相同,否則會(huì)出現(xiàn)編譯錯(cuò)誤。 252.4基本語句基本語句2.4.3循環(huán)語句循環(huán)語句 while循環(huán)語句循環(huán)語句while循環(huán)語句具有下列形式:while()do.while循環(huán)語句循環(huán)語句do.while循環(huán)語句具有下列形式:do while()for循環(huán)語句循環(huán)語句 for循環(huán)語句具有下列形式:for (表達(dá)式1;表達(dá)式2;表達(dá)式3) (1) 表達(dá)式1、表達(dá)式2、表達(dá)式3都可以省略,但分號(hào)“;”不能省略。 (2) 表達(dá)式1和表達(dá)3可以是一個(gè)簡(jiǎn)單的表達(dá)式,也可以是逗號(hào)表達(dá)式,即包含兩個(gè)或兩個(gè)以上的簡(jiǎn)單表達(dá)式,中間用逗號(hào)分隔。 (3)

27、 由于循環(huán)體是由任何類型的語句組成的,因此在循環(huán)體內(nèi)還可以包含前面的幾種循環(huán)語句,這樣就形成了循環(huán)的嵌套。 262.4基本語句基本語句2.4.4break和和continue語句語句 若需跳出循環(huán)結(jié)構(gòu)或重新開始循環(huán),就得使用break和continue語句,格式:break;從一個(gè)循環(huán)體跳出,即提前終止循環(huán),也可以跳出switch結(jié)構(gòu)。continue;用于那些依靠條件判斷而進(jìn)行循環(huán)的循環(huán)語句。對(duì)于for語句來說,目的是將流程轉(zhuǎn)到for語句的表達(dá)2和表達(dá)式3。例如: 例例Ex_Continue Ex_Continue 把1100之間的不能被7整除的數(shù)輸出。#include void main(

28、)for (int nNum=1; nNum=100; nNum+)if (nNum%7 = 0) continue;coutnNum ;coutn;當(dāng)nNum能被7整除時(shí),執(zhí)行continue語句,流程轉(zhuǎn)到for 語句中的nNum=100; nNum+,并根據(jù)表達(dá)式nNum=100的值來決定是否再做循環(huán)。而當(dāng)nNum不能被7整除時(shí),才執(zhí)行coutnNum” ”語句。 272.5函數(shù)和預(yù)處理函數(shù)和預(yù)處理 2.5.1函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用函數(shù)的定義函數(shù)的定義 定義一個(gè)函數(shù)的格式如下: ( ) 函數(shù)體函數(shù)類型決定了函數(shù)所需要的返回值類型。函數(shù)名后面必須跟一對(duì)圓括號(hào)“( )”,以區(qū)別于變量

29、名及其他用戶定義的標(biāo)識(shí)名。函數(shù)的形式參數(shù)寫在括號(hào)內(nèi),參數(shù)表中參數(shù)個(gè)數(shù)可以是0,一個(gè)或多個(gè)參數(shù),圓括號(hào)不能省略。函數(shù)體由在一對(duì)花括號(hào)中的若干條語句組成,用于實(shí)現(xiàn)這個(gè)函數(shù)執(zhí)行的動(dòng)作。 函數(shù)的聲明函數(shù)的聲明 聲明一個(gè)函數(shù)可按下列格式進(jìn)行: ( ); int sum(int x, int y);和 int sum(int , int);是等價(jià)的。 282.5函數(shù)和預(yù)處理函數(shù)和預(yù)處理函數(shù)的調(diào)用函數(shù)的調(diào)用 函數(shù)調(diào)用的一般形式為:( );所謂“實(shí)際參數(shù)”(簡(jiǎn)稱“實(shí)參”),它與“形參”相對(duì)應(yīng),是實(shí)際調(diào)用函數(shù)時(shí)所給定的常量、變量或表達(dá)式,且必須有確定的值。例如:int a5 = 7, 9, 6, 3, 4;su

30、m(a0, 6);或sum(a0*a1, a2+a3);等都是合法的調(diào)用。需要注意的是:實(shí)參與形參的個(gè)數(shù)應(yīng)相等,類型應(yīng)一致,且按順序?qū)?yīng),一一傳遞數(shù)據(jù)。C+中,調(diào)用一個(gè)函數(shù)的方式可以有很多,例如:sum(3, 4);/ Aint c = 2 * sum(4,5);/ Bc = sum(c, sum(c,4);/ C其中,A是將函數(shù)作為一個(gè)語句,不使用返回值,只要求函數(shù)完成一定的操作;B把函數(shù)作為表達(dá)式的一部分,將返回值參與運(yùn)算,結(jié)果c = 18;C是將函數(shù)作為函數(shù)的實(shí)參,等價(jià)于“c = sum(18, sum(18,4);”,執(zhí)行sum(18,4)后,等價(jià)于“c = sum(18,22) ;”

31、,最后結(jié)果為c = 40。 2.5函數(shù)和預(yù)處理函數(shù)和預(yù)處理2.5.2函數(shù)的參數(shù)傳遞函數(shù)的參數(shù)傳遞 函數(shù)的參數(shù)傳遞有兩種方式,一種是按值傳遞,另一種是地址傳遞或引用傳遞。 例例Ex_SwapValue Ex_SwapValue 交換函數(shù)兩個(gè)參數(shù)的值。#include void swap(float x, float y)float temp;temp = x; x = y; y = temp;coutx = x, y = yn;void main()float a = 20, b = 40;couta = a, b = bn;swap(a, b);couta = a, b = bn;運(yùn)行結(jié)果為:

32、a = 20, b = 40 x = 40, y = 20a = 20, b = 40值傳遞的最大好處是保持函數(shù)的獨(dú)立性。在值傳遞的情況下,函數(shù)只有通過return來返回某個(gè)類型的值。 2.5函數(shù)和預(yù)處理函數(shù)和預(yù)處理2.5.3作用域和存儲(chǔ)類型作用域和存儲(chǔ)類型 作用域作用域 (1)(1)塊作用域在塊中聲明的標(biāo)識(shí)符,作用域從聲明處開始,一直到結(jié)束塊的花括號(hào)為止。具有塊作用域的標(biāo)識(shí)符稱作局部標(biāo)識(shí)符,塊作用域也稱作局部作用域 標(biāo)識(shí)符的作用域完全相同時(shí),不允許出現(xiàn)相同的標(biāo)識(shí)符名。標(biāo)識(shí)符具有不同的作用域時(shí),允許標(biāo)識(shí)符同名。 在for語句中聲明的標(biāo)識(shí)符,其作用域是包含for語句的那個(gè)內(nèi)層塊,而不是僅僅作用于

33、for語句。 (2)(2)函數(shù)原型作用域在聲明函數(shù)原型所指定的參數(shù)標(biāo)識(shí)符的作用范圍。這個(gè)作用范圍是在函數(shù)原型聲明中的左、右括號(hào)之間。在函數(shù)原型中聲明的標(biāo)識(shí)符可以與函數(shù)定義中說明的標(biāo)識(shí)符名稱不同。由于所聲明的標(biāo)識(shí)符與該函數(shù)的定義及調(diào)用無關(guān),所以可以在函數(shù)原型聲明中只作參數(shù)的類型聲明,而省略參數(shù)名。(3)(3)函數(shù)作用域C+語言中,只有g(shù)oto語句中的標(biāo)號(hào)標(biāo)識(shí)符具有函數(shù)作用域。具有函數(shù)作用域的標(biāo)識(shí)符在聲明它的函數(shù)內(nèi)隨處可見,但在此函數(shù)之外不可見。goto語句的濫用導(dǎo)致程序流程無規(guī)則、可讀性差。 2.5函數(shù)和預(yù)處理函數(shù)和預(yù)處理變量的存儲(chǔ)類型變量的存儲(chǔ)類型 存儲(chǔ)類型的聲明格式: ; (1)(1)自動(dòng)類

34、型(auto)一般說,自動(dòng)存儲(chǔ)類型聲明的變量都是限制在某個(gè)程序范圍內(nèi)使用的。從系統(tǒng)角度來說,自動(dòng)存儲(chǔ)類型變量是采用堆棧方式分配內(nèi)存空間。程序執(zhí)行到超出該變量的作用域時(shí),就釋放它所占用的內(nèi)存空間,其值也隨之消失了。聲明一個(gè)自動(dòng)存儲(chǔ)類型的變量是在變量類型前面加上關(guān)鍵字auto若自動(dòng)存儲(chǔ)類型的變量是在函數(shù)內(nèi)或語句塊中聲明,可省略auto,(2)(2)靜態(tài)類型(static)它和自動(dòng)存儲(chǔ)類型的變量的最大不同之處在于:靜態(tài)類型變量在內(nèi)存中是以固定地址存放的,而不是以堆棧方式存放的。只要程序還在繼續(xù)執(zhí)行,靜態(tài)類型變量的值就一直有效,不會(huì)隨它所在的函數(shù)或語句塊的結(jié)束而消失。 靜態(tài)類型的變量均有確定的初值,當(dāng)

35、聲明變量時(shí)沒有指定其初值,則編譯器將其初值置為0。在程序中聲明的全局變量總是靜態(tài)存儲(chǔ)類型,若在全局變量前加一個(gè)static,使該變量只在這個(gè)源程序文件內(nèi)使用,稱之為全局靜態(tài)變量或靜態(tài)全局變量。 靜態(tài)函數(shù)也是在某個(gè)函數(shù)聲明前加上static,它的目的也是使該函數(shù)只在聲明的源文件中使用,對(duì)于其他源文件則無效。 2.5函數(shù)和預(yù)處理函數(shù)和預(yù)處理(3)(3)寄存器類型(register)使用關(guān)鍵字register聲明寄存器類型的變量的目的是將所聲明的變量放入寄存器內(nèi),從而加快程序的運(yùn)行速度。但有時(shí),在使用這種聲明時(shí),若系統(tǒng)寄存器已經(jīng)被其他數(shù)據(jù)占據(jù)時(shí),寄存器類型的變量就會(huì)自動(dòng)當(dāng)作auto變量。(4)(4)

36、外部類型(extern)用關(guān)鍵字extern聲明的變量稱為外部變量。某個(gè)變量被聲明成外部變量時(shí),不必再次為它分配內(nèi)存就可以在本程序中引用這個(gè)變量。只有在兩種情況下要使用外部變量:第一種情況,在同一個(gè)源文件中,若定義的變量使用在前,聲明在后,這時(shí)在使用前要聲明為外部變量。 第二種情況,當(dāng)由多個(gè)文件組成一個(gè)完整的程序時(shí),在一個(gè)源程序文件中完全定義的變量要被其他若干個(gè)源文件引用時(shí),引用的文件中要使用extern聲明外部變量。 332.5函數(shù)和預(yù)處理函數(shù)和預(yù)處理2.5.4函數(shù)的重載函數(shù)的重載 函數(shù)重載是指C+允許多個(gè)同名的函數(shù)存在,但同名的各個(gè)函數(shù)的形參必須有區(qū)別:形參的個(gè)數(shù)不同,或者形參的個(gè)數(shù)相同,

37、但參數(shù)類型有所不同。需要說明的是:(1)(1)重載函數(shù)必須具有不同的參數(shù)個(gè)數(shù)或不同的參數(shù)類型,若只有返回值的類型不同是不行的。(2)(2)當(dāng)函數(shù)的重載帶有默認(rèn)參數(shù)時(shí),應(yīng)該注意避免二義性。例如:int fun(int a, int b = 0);int fun(int a);是錯(cuò)誤的。因?yàn)槿绻泻瘮?shù)調(diào)用fun(2)時(shí),編譯器無法準(zhǔn)確地確定應(yīng)調(diào)用哪個(gè)函數(shù)。 342.5函數(shù)和預(yù)處理函數(shù)和預(yù)處理2.5.3預(yù)處理預(yù)處理 宏定義命令宏定義命令 #define PI 3.141593 (1)(1)#define、PI和3.141593之間一定要有空格,且一般將宏名定義成大寫,以與普通標(biāo)識(shí)符相區(qū)別。(2)(2

38、)宏被定義后,一般不能再重新定義,而只有當(dāng)使用如下命令才可以:#undef 宏名(3) (3) 一個(gè)定義過的宏名可以用來定義其它新的宏,但要注意其中的括號(hào)。(4)(4)上述宏定義是簡(jiǎn)單的一種形式,實(shí)際上它還可以帶參數(shù),例如:#defineMAX(a,b) (a)(b)?(a):(b) 文件包含命令文件包含命令有下列兩種格式:#include #include “文件名” 在使用#include命令需要注意的是,一條#include命令只能包含一個(gè)文件,若想包含多個(gè)文件須用多條文件包含命令。 352.5函數(shù)和預(yù)處理函數(shù)和預(yù)處理?xiàng)l件編譯命令條件編譯命令 (1)第一種形式#ifdef #else #

39、endif 例例Ex_UseIfdef Ex_UseIfdef 使用#ifdef條件編譯命令。#include #define A -1void main() #if A0cout0n;#elif A0couta0n;#elsecouta=0n;#endif運(yùn)行結(jié)果:a0362.5函數(shù)和預(yù)處理函數(shù)和預(yù)處理(2)(2)第二種形式#ifndef #else #endif這與前一種形式的區(qū)別僅在于,如果標(biāo)識(shí)符沒有被#define命令定義過,則編譯,否則就編譯。(3)(3)第三種形式#if #elif .#else#endif 372.5函數(shù)和預(yù)處理函數(shù)和預(yù)處理 例例Ex_UseIf Ex_UseIf

40、 使用#if條件編譯命令。#include #define A -1void main()#ifA0cout0n;#elif A0couta0n;#elsecouta=0n;#endif運(yùn)行結(jié)果為:a0若將#define A -1改為#define A 0則結(jié)果為:a=0 382.6構(gòu)造類型構(gòu)造類型2.6.3結(jié)構(gòu)體結(jié)構(gòu)體 定義結(jié)構(gòu)體定義結(jié)構(gòu)體 結(jié)構(gòu)體定義的格式為:struct ;.; 結(jié)構(gòu)變量名表;注意:注意:(1)(1)在定義結(jié)構(gòu)體時(shí),不要忘記最后一個(gè)花括號(hào)后面的分號(hào)“;”。(2)(2)結(jié)構(gòu)體的成員變量可以是基本數(shù)據(jù)類型,也可以是其他合法的類型。例如:struct STUDENTPERSON

41、one;/ 用已定義的結(jié)構(gòu)體類型聲明成員float eng, phy, math, poli;/ 英語、物理、數(shù)學(xué)和政治的成績(jī); 392.6構(gòu)造類型構(gòu)造類型結(jié)構(gòu)體變量的初始化和引用結(jié)構(gòu)體變量的初始化和引用 結(jié)構(gòu)體變量的初始化的一般形式是在變量后面加上:= ;當(dāng)一個(gè)結(jié)構(gòu)體變量定義之后,就可引用這個(gè)變量。使用時(shí),遵循下列規(guī)則:(1)(1)只能引用結(jié)構(gòu)體變量中的成員變量,并使用下列格式:. (2)(2)若成員本身又是一個(gè)結(jié)構(gòu)體變量,引用時(shí)需要用多個(gè)成員運(yùn)算符一級(jí)一級(jí)地找到最低一級(jí)的成員。 (3)(3)結(jié)構(gòu)類型相同的變量之間可以直接賦值,這種賦值等效于各個(gè)成員的依次賦值。例如:struct PERSO

42、N int age;/ 年齡 char name25;/ 姓名;PERSON one = 30, LiMing;PERSON another = one;n;/ 輸出LiMing其中,another = one等效于:another.age = one.age;strcpy(, ); 402.6構(gòu)造類型構(gòu)造類型2.6.4傳遞結(jié)構(gòu)體參數(shù)傳遞結(jié)構(gòu)體參數(shù) 例例Ex_StructValueEx_StructValue 將結(jié)構(gòu)體的值作為參數(shù)傳給函數(shù)。#include struct PERSON int age; / 年齡float

43、weight;/ 體重 char name25;/ 姓名; void print(PERSON one) one.age one.weightn;PERSON all4 = 20, 60, Zhang,28, 50, Fang , 33, 78, Ding ,19, 65, Chen ;void main()for (int i=0; i4; i+)print(alli);運(yùn)行結(jié)果為:Zhang 20 60Fang 28 50Ding 33 78Chen 19 65 412.7指針和引用指針和引用 2.7.1指針和指針變量指針和指針變量 程序中定義了一個(gè)變量,編譯時(shí)系統(tǒng)會(huì)給這個(gè)變量分配內(nèi)存單元,根據(jù)程序中定義的變量類型,分配一定長(zhǎng)度的內(nèi)存空間,每個(gè)內(nèi)存單元中存放著變量的值。系統(tǒng)為每一個(gè)內(nèi)存單元分配一個(gè)地址。這個(gè)“地址”稱為“指針”。 指針變量(pointer)是存放內(nèi)存地址的變量,一般情況下該地址是另一個(gè)變量存儲(chǔ)在內(nèi)存中的首地址,又稱該指針變量“指向”這個(gè)變量。 一旦一個(gè)變量初始化后,該變量在內(nèi)存中的地址也就確定下

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論