【C++期末復習知識點大全】_第1頁
【C++期末復習知識點大全】_第2頁
【C++期末復習知識點大全】_第3頁
【C++期末復習知識點大全】_第4頁
【C++期末復習知識點大全】_第5頁
免費預覽已結(jié)束,剩余15頁可下載查看

下載本文檔

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

文檔簡介

1、1變量(variable):為存儲器中的地址取一個名字。變量,也稱為對象,是數(shù)據(jù)的存放之處變量有三個重要 屬性:名稱、值、類型 。變量定義就是 告訴編譯器變量的名字及該變量 中可以存放哪一類數(shù)據(jù)類型的值。(1.1) 變量的命名應(yīng)符合規(guī)范。名稱必須以字母或下劃線的字符開頭。C+語言中,變量名中出現(xiàn)的大寫和小寫字母被看作是不同的字符,因此ABC, Abc,abc是三個獨立的變量名。(1.2) 名稱中的其它字符必須是字母、數(shù)字或下劃線,不得使用空格和其它特殊符號。(1.3) 名稱不可以是系統(tǒng)的保留詞,如:int, double, for, return 等,它們在C+語言中有特殊用途。(1.4) 變

2、量名應(yīng)使讀者易于明白其存儲的值是什么, 做到“見名知意 ”。(1.5) C+沒有規(guī)定過變量名的長度,較長的可用下劃線連接。如num_of_person2. C+中變量定義的格式:類型名 變量名1,變量名2,,變量名n ;女如: int num1, num2;(2.1) 在C+中,每個變量在使用前必須被定義,以便編譯器檢查變量使用的合法性。變量定義只是給變量分配相應(yīng)的空間。(2.2) C+允許在定義變量的同時給變量賦初值。變量未被賦值前,值為未知 格式: 類型名 變量名 = 初值 ;或者: 類型名 變量名(初值) ;女口: int count = 0; 或int count(O);都是定義整型變

3、量 count,并為它賦初值 0。可以給被定義的變量中的一部分變量賦初值,如:int sum = 0, count = 0, num;(2.3) 一旦定義了一個變量, 可以將一個常量賦給該變量 。變量賦值過程 是“覆蓋 ”過程 ,用新值去替換舊值 如 int a;a=123; 或 a = 0x123; 都是正確的(2.4) 在C+中,定義變量時沒有賦初值,然后直接引用該變量是危險的! !3. 數(shù)據(jù)類型 (data type) :數(shù)據(jù)的編碼方式、值域和可執(zhí)行的操作。 數(shù)據(jù)類型包括 兩個方面: 數(shù)據(jù)的取值范圍、可用的操作。 C/C+中的數(shù)據(jù)類型分為 兩大類:基本數(shù)據(jù)類型: 整型、浮 點型、字符型和

4、布爾型 構(gòu)造數(shù)據(jù)類型: 字符串、數(shù)組、結(jié)構(gòu)、聯(lián)合和枚舉( 3.1)整型 (int) :以補碼形式存儲, 在 VC 中也是如此 ??蓤?zhí)行傳統(tǒng)的算術(shù)運算和比較 運算。 整型數(shù)的表示范圍:由各個編譯器指定。整型數(shù)有三種存儲方式,在 VC 中占用的空間如下所示:基本型int :4 byte (PC)31( 2311)長整型long : long / long int4 byte (PC)乞31( 2311)短整型short :2 byte (PC)-215( 2151)(3.1.1) 整數(shù)運算時要注意數(shù)據(jù)的表示范圍 。如整數(shù)用兩個字節(jié)表示,正整數(shù) 32767 加 1 的結(jié)果為 -32768。這稱為整數(shù)

5、運算的溢出,系統(tǒng)不檢查這樣的錯誤,程序員必須自己保 證程序中不出現(xiàn)這樣的錯誤。( 3.1.2)在某些應(yīng)用中, 不可能出現(xiàn)負數(shù),則整型數(shù)中有一半的數(shù)值范圍是被浪費的。因此在C/C+中可以將所有的數(shù)都看成正整數(shù),稱為無符號數(shù)。無符號數(shù)的定義:在各種整數(shù)類型前加上關(guān)鍵詞 unsigned ,變成 unsigned int, unsigned short, unsigned longun sig ned int0 232-1un sig ned short0 6553532unsigned long0 2 -1(3.2)實型:以浮點表示,操作類似于整型,浮點數(shù)無法精確表示。( 3.2.1)浮點類型的分

6、類:單精度float:占用4字節(jié),3字節(jié)尾數(shù),1字節(jié)指數(shù),精確度7位 范圍10381038 雙精度double :占用8字節(jié),5字節(jié)尾數(shù),3字節(jié)指數(shù),精確度1516位,范圍1030710308(3.3) 字符型( char ):存放一個字母或符號,占一個字節(jié),存放的是字符的內(nèi)碼。可 執(zhí)行比較、連接等運算。具有雙重屬性:整數(shù)屬性和字符屬性,整數(shù)屬性:字符類型即單字節(jié)的整數(shù)類,字符屬性:數(shù)據(jù)值即為相應(yīng)字符的Ascii碼。字符類型名:char??煞譃榭纱蛴∽址?小寫字母、大寫字母、數(shù)字、標點符號、空格等; 非打印字符:換行和報警字符 或響鈴等控制字符(3.3.1) PC 機中都用 ASCII 碼表示

7、,特性:數(shù)字0到'9是'順序存放的,字母被分成 二段:大寫的和小寫的。大寫字母是連續(xù)的,小寫字母也是連續(xù)的(3.3.2) 些非打印和難以打印的字符需要用轉(zhuǎn)義序列(escape sequeace)表示。反斜杠符號稱為轉(zhuǎn)義字符(escape character)。如換行符寫為 'n ',表示換行。雖然它由兩個字 符和n來描述,但它表示一個ASCII字符。警告字符 a可以表示成:007', '07', '7'。雙引號的單字符表示:可以寫”也可以寫。 ddd表示1到3位八進制數(shù)代表的字符。xhh 表示 1到 2 位十六進制數(shù)代表的

8、字符。 t 表示水平制表。 表示反斜杠 (3.4) 布爾型(bool):只有 真”、假”兩個值??蓤?zhí)行判斷運算。女口 bool flag=true;(3.5) 字符串( string ):是類類型,用雙引號“”表示,可執(zhí)行字符串比較,連接應(yīng)用時要加 #include <string> 如 string str= “dfhdsf ”;內(nèi)部用'0 '表字符串的結(jié)束(3.6) sizeof 運算符用來了解某一類型或某一表達式占用的內(nèi)存量。sizeof運算符的用法:sizeof(類型名)或sizeof(表達式)如: sizeof(float) :表示 float 類型的變量

9、占用的內(nèi)存量。 sizeof( ' a' +1:5)表示表達 式a' +1的計算結(jié)果所占的內(nèi)存量。檢查字符串的長度用strlen(),女口 strlen( asdfld");4. 常量:值的直接表示。如1、3、1.57、A'等,又稱直接量。(4.1) 整型常量可用十進制、八進制和十六進制表示:如十進制: 123,-234;八進制:0123 十六進制: 0x123, 0x3a2f(4.2) 浮點數(shù)常量有兩種表示法:(1) 十進制表示:1.23 , 3.14;(2) 科學計數(shù)法:尾數(shù)e指數(shù)123e2=123002.25e-3=0.00225 ;注意:尾數(shù)不

10、能為空,指數(shù)必須為整數(shù)(4.3) 字符常量:a','等用一對'單引號括起來的數(shù)據(jù)。字符串常量 用雙引號(4.4) 命名常量:為值指定一個描述性的文字,增加程序的可讀性。在C+語言中,用con st修飾,如 con st double PI =3.14; 見PI即知3.14。注意一般變量名需大寫,如PI。5. 算術(shù)運算符:+(加)-(減)*(乘)/ (求商) %(求余)(5.1) “-”可為二元運算符,也可為 一元運算符,其余所有的算術(shù)運算符都是 二元運算符。(5.2) 優(yōu)先級:高* / %,低 + -(5.3) 整型與整型數(shù)運算,結(jié)果為整型,如5 / 2 = 2 ;整型

11、與浮點數(shù)運算,結(jié)果為浮點數(shù), 如 5 / 2.0 = 2.5 ;字符與整型數(shù)運算,結(jié)果為整型;字符與浮點數(shù)運算,結(jié)果為浮點數(shù)。 浮點數(shù)與浮點數(shù)運算,結(jié)果為浮點數(shù)。6.關(guān)系運算符:>, >=, =, <=, <, !=(6.1)優(yōu)先級: 高于賦值運算符,低于算術(shù)運算符。關(guān)系運算符內(nèi)部: = 和 !=較低 ( 6.2)關(guān)系表達式: 用 關(guān)系運算符將二個表達式連接起來 稱為關(guān)系表達式。 關(guān)系表達式的 結(jié)果是true或false。等于”運算符是由兩個等號 組成。常見的錯誤是在比較相等時用一 個等號。 =(相等 ),=(賦值)7. 邏輯運算符 :&& (and)|

12、 (or)! (not)( 7.1)優(yōu)先級: ! 高于 關(guān)系運算符 高于 && 高于 |(7.2)邏輯表達式:由邏輯運算符連接起來的表達式,其結(jié)果為 真(true)或 假(false) ”邏輯表達式在執(zhí)行時,先處理左邊。如左邊已能決定此邏輯表達式的結(jié)果,則右邊不執(zhí) 行。因此, 在&& 邏輯表達式中, 應(yīng)把 false 可能性較大的條件放在左邊,在|表達式中,應(yīng)把 true 可能性較大的條件放在左邊 ,這樣可以減少程序執(zhí)行的時間8賦值運算符:= 的優(yōu)先級比算術(shù)運算符低( 8.1)賦值語句:把一個值賦給一個變量 。如 x = y + z; x = 3.14 ; 賦值

13、語句的左邊是變量,右邊是表達式。( 8.2)賦值表達式格式:<變量 > = < 表達式 > 如 x = x + 2 。作用:將右邊的表達式的值存入左邊的變量,整個表達式的值是右邊的表達式的結(jié)果。 賦值運算符是右結(jié)合的(8.3)左值(lvalue):在C+中,能出現(xiàn)在賦值運算符左邊的表達式稱為左值右值( rvalue ):賦值運算符右邊的表達式的值( 8.4)賦值語句:賦值表達式后面加上分號。( 8.5)將賦值表達式作為更大的表達式的一部分。 如: a = (x = 6) + (y = 7) 等價于分別將 x 和 y 的值設(shè)為 6 和 7,并將 6和 7 相加,結(jié)果存于變

14、量 a( 8.6)其他運算符與賦值運算符結(jié)合的運算符稱為復合賦值運算符。格式:變量 op= 表達式 ; 等價于:變量 = 變量 op 表達式 ;常用的復合賦值運算符有: +=,=, *=, /=, %= 如: balance += deposit; balance -=surcharge; x /= 10; salary *=2;( 8.7)賦值和運算時的自動類型轉(zhuǎn)換, 在進行賦值操作時,會發(fā)生類型轉(zhuǎn)換,將取 范圍小的類型轉(zhuǎn)為取值范圍大的類型是安全的反之是不安全的,如果 大類型的值在小類型能容納的范圍之內(nèi),則平安無事強制類型轉(zhuǎn)換:(類型名)(表達式);或類型名 (表達式);如z = (doub

15、le)x / y;靜態(tài)轉(zhuǎn)換 (static_cast) :用于編譯器隱式執(zhí)行的任何類型轉(zhuǎn)換格式: 轉(zhuǎn)換類型 <類型名 > ( 表達式 ) 如 z = static_cast<double>(x) / y;? 單個分號組成的語句成為空語句? 用 括起來的一組語句稱為復合語句。在邏輯上看成一個語句。? 復合語句可以放在任何單語句出現(xiàn)的地方。? 在復合語句中可以定義變量,但必須定義在最前面。? 逗號表達式語句格式:表達式1,表達式2,表達式n? 逗號運算符的優(yōu)先級是所有運算符中最低的如a的初值為0,則表達式a += 1, a +=2, a += 3, a += 4, a +=

16、 5 的結(jié)果為 15? 前置 +i, -i (先執(zhí)行 i+1 或 i-1 ,再使用 i 值)? 后置 i+, i-(先使用 i 值 ,再執(zhí)行 i+1 或 i-1)9. 控制語句 : 改變程序中語句的執(zhí)行次序。(9.1)if 語句 :兩個分支: 條件測試為 true 時所執(zhí)行的程序塊叫做 then 子句,條件為 false 時執(zhí)行的 語句叫做 else 子句。格式 ( 1 )if (條件測試)語句; 即 else 語句可省略格式( 2)if (條件測試)語句 1;else語句 2;eg. if (grade>= 60)cout <<a ”“ passed ”;eg. if (g

17、rade>= 60)cout <<a ”“ passed ”;elsecout <<“ failed ”;多分支語句:條件1 為 true 時所執(zhí)行的程序塊 1,條件 1 為 false 但滿足條件 2 時執(zhí)行的語句塊 2,。依次類推,條件 n-1 為 false 但滿足條件 n 時執(zhí)行 else 語句。常見的有if (grade >= 90)cout <<A“”else if (grade >= 80)cout <<B“”else if (grade >= 70)cout <<C“”else if (grad

18、e >= 60)cout <<D“”elsecout <<”E”;eg.9.2)條件語句使用注意條件的結(jié)果值應(yīng)該是 條件可為任意表達式,不 if語句可以沒有else子句。合理的縮排。3 分支語句: if else if else。true或false,它們是 C+中bool類型的值定是關(guān)系表達式。 0為false,非 0為true 。 if語句的then子句和else子句含有if語句,稱為if語句的嵌套。eg if (x < 100)if (x < 90) 語句 1;else if (x<80) 語句 2;else 語句 3;else 語句 4;

19、歧義性:如最后一個else跟哪個if配對.。eg if (y != 0) if (x != 0) result = x / y;else子句的if語句配對。else cout<<“error :y = 0 ”<<endl;配對原則:每個 else 子句是和在它之前最近的一個沒有在每個if-else語句后加一對大括號是一種良好習慣,特別是有兩個以上的復合語句需要執(zhí)行時。9.2)條件表達式:作用:更加簡練的用來表達條件執(zhí)行的機制?:運算符 :問號冒號運算符形式 : ( 條件 ) ? 表達式 1 : 表達式 2 eg: max = x > y ? x :y;執(zhí)行過程:首

20、先計算條件值。如果條件結(jié)果為true ,則計算表達式 1 的值,并將它作為整個表達式的值。如果條件結(jié)果為false,則整個表達式的值為表達式2的值。(9.3) Switch -case語句:又稱開關(guān)語句。switch (表達式)case 常量表達式 1:語句 1; break ; case 常量表達式 2:語句 2 ; break ;case 常量表達式 n:語句 n ; break ; default :語句 n+1 ; 使用注意: 表達式應(yīng)該是常量表達式,一般為整型表達式,字符 case后跟break表示結(jié)束switch語句,否則一直執(zhí)行,直到遇到break或語句結(jié)尾。 case與defa

21、ult無順序要求,但一般 default在最后。 default表示除case標號以外的其他情況。10.循環(huán)語句:一個完整的循環(huán)結(jié)構(gòu)一般由四部分組成: 循環(huán)體、循環(huán)控制條件、循環(huán)變量的初始化、循環(huán)變量的增值其中,循環(huán)體 是需要重復執(zhí)行的操作序列; 循環(huán)控制條件 是重復執(zhí)行循環(huán)體所需的條件, 即當條件成立時執(zhí)行循環(huán)體, 否則結(jié)束循環(huán); 循環(huán)變量 是決定循環(huán)條件是否成立的變量; 循環(huán)變量的增值 反映了循環(huán)變量的改變規(guī)律, 它使循環(huán)變量的值向著使循環(huán)結(jié)束的方向 改變;循環(huán)變量的初始化 是指在進入循環(huán)前, 給循環(huán)變量賦初值, 否則首次進入循環(huán)時, 無法確定循環(huán)控制條件是否成立。(10.1)For 語句

22、:主要用于計數(shù)循環(huán)? 格式:for (表達式1;表達式2;表達式3)語句;or 語句快;可以理解為 :for( 循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值 ) 符合循環(huán)條件時的執(zhí)行語句? 循環(huán)體可以是復合語句或空語句。? 循環(huán)里所有語句的一次完全執(zhí)行稱為一個循環(huán)周期。? 執(zhí)行過程:先執(zhí)行表達式 1 ,再執(zhí)行判斷表達式 2,如果為 true ,執(zhí)行一次循環(huán)體 (即一個循環(huán)周期) ,接著執(zhí)行表達式 3,然后重新執(zhí)行判斷表達式2,若為 true,又執(zhí)行一次循環(huán)體, 重復直至判斷表達式 2為false,,最后跳出整個循環(huán)。 若開始執(zhí) 行條件表示 2 為 false, 循環(huán)體一次也不執(zhí)行。? For 循環(huán)的

23、三個表達式可以是任意表達式。三個表達式都是可選的。? 如果循環(huán)不需要任何初始化工作,則表達式 1 可以缺省。 如循環(huán)前需要做多個初始 化工作,可以將多個初始化工作組合成一個逗號表達式,作為表達式1。如 for (i=1 , s=0; i<=10; +i) s+=i;? 表達式 2 也不一定是關(guān)系表達式。它可以是邏輯表達式,甚至可以是算術(shù)表達式。當表達式 2 是算術(shù)表達式時,只要表達式的值為非0,就執(zhí)行循環(huán)體,表達式的值為 0 時退出循環(huán)。? 如果表達式 2 省略,即不判斷循環(huán)條件,循環(huán)將無終止地進行下去。無終止的循環(huán)稱為“死循環(huán)” ,最簡單的死循環(huán)是 for ( ;);? 表達式 3 也

24、可以是任何表達式, 一般為賦值表達式或逗號表達式 。表達式 3 是在每 個循環(huán)周期結(jié)束后對循環(huán)變量的修正。表達式 3 也可以省略,此時做完循環(huán)體后直 接執(zhí)行表達式 2。 如從 1加到 100,可以寫為 S=0; for (i=1; i<=100; ) s+=i, i+; 或 s=0; for (i=1; i<=100; s+=i, i+) ;? 將一個 for 循環(huán)嵌入到另一個 for 循環(huán)中 ,內(nèi)層的 for 循環(huán)在外層循環(huán)的每一個周 期中都將執(zhí)行它的所有的周期 ,每個 for 循環(huán)都要有一個自己的循環(huán)變量以避免循 環(huán)變量間的互相干擾 。 其它循環(huán)嵌套類似執(zhí)行。( 10.2) W

25、hile 語句: 與 for 循環(huán)等價,可相互代替。? 格式: while (表達式) 語句; or 語句塊; ? 執(zhí)行過程:先計算出條件表達式的值。如果是 false,循環(huán)終止;如果是true,整個 循環(huán)體將被執(zhí)行, 而后又回到 while 語句的第一行, 再次對條件進行檢查, 若為 true, 接著執(zhí)行循環(huán)體,重復直到條件為false,,跳出整個循環(huán)。? 用途:用于循環(huán)次數(shù)不定的循環(huán)。循環(huán)是否結(jié)束取決于某一個變量的值(標記控制重復)? 在 for 和 while 語句之后一般沒有分號, 有分號表示循環(huán)體就是分號之前的內(nèi)容 (空 循環(huán)體)(10.3) Do- While 語句? 格式: do

26、 語句; or 語句塊; while ( 表達式 ) ;? 執(zhí)行過程:首先執(zhí)行語句,然后判斷表達式的值。如果表達式為0,繼續(xù)向下執(zhí)行,否則,再次執(zhí)行語句,再次判斷表達式的值? 用途:用于至少執(zhí)行一次的循環(huán)。注意后面有分號;11 跳轉(zhuǎn)語句:? break 語句:跳出整個循環(huán)或 switch 語句。若有多重循環(huán),跳出含 break 最近的循 環(huán)體。? continue 語句:跳出當前本次循環(huán),接著判斷是否執(zhí)行下次循環(huán)周期。12 幾種典型的循環(huán)。 注意格式及應(yīng)用? 輸入驗證循環(huán): 以下兩種等價,右邊一個常用cout <<" 請輸入半徑 :" / 提示輸入do cout

27、 <<" 請輸入半徑 :"cin>>radius;cin >> radius ;while ( radius < 0) / 當 radius < 0,重復輸入 , 直到 >0 while(radius < 0) / 當 cout <<" 請輸入半徑 :"radius < 0 重復輸入 , 直到 >0cin>>radius; ,area = PI * radius * radius ;area = PI * radius * radius ;? 哨兵循環(huán) 以下四

28、個等價 , 后面兩個常用cout << " 輸入 n 個整數(shù): " /提示用戶輸入do cin >>num;cout << " 輸入一個正數(shù) "while ( num != -1)/當輸入值不等于哨兵值時,繼續(xù)輸入cin >>num; sum += num;/處理數(shù)據(jù)sum += num;cout << " 輸入下一個整數(shù): "/ /提示用戶繼續(xù)輸入 cin >>num;while(true) / 或 while (1)cout << " 輸

29、入一個正整數(shù): "/ 提示用戶并讀入數(shù)據(jù) cin >>num;if (num = -1) break; / if (num= 標志 ) 跳出 ;sum += num;/處理數(shù)據(jù)查詢循環(huán)char ans; / 用于用戶響應(yīng) do cout <<" 請輸入半徑 :" / 提示輸入cin >> radius;area = PI * radius * radius ;cout << "area = " <<area <<endl;cout << "do you

30、 again?"<<endl;/ 詢問提示cin >>ans;/詢問輸入 while(ans = 'Y'| ans = 'y'); / / 詢問循環(huán) while(num != 0) ;/ 當輸入值不等于哨兵值時,繼續(xù)輸入for ( ; ; )cout << " 輸入一個正整數(shù): cin >>num;if (num = -1) break;sum += num;累加循環(huán) p=0; for(int i=1;i<=N;i+)p=p+i;累乘循環(huán) : p=1for(int i=1;i<=N;

31、i+)p=p*i;? 編譯( compiler ):將高級語言的程序翻譯成機器語言,分為解釋執(zhí)行,編譯執(zhí)行 ? 連接 (link) :將目標程序與已有的其它目標程序連接起來,產(chǎn)生一個可執(zhí)行的程序? 輸出流是傳給顯示器的數(shù)據(jù)流,將變量或表達式的內(nèi)容顯示在顯示器上 格式? 輸出一個變量的值: cout << a ;? 輸出多個變量的值: cout << a << b << c ;? 輸出表達式的結(jié)果: cout << “ Hello worldn ” << endl? 上述情況的組合: cout << a <

32、< + ' << b << =' << a+b << endl;? 鍵盤流入的數(shù)據(jù)流,將鍵盤輸入的數(shù)據(jù)存入變量格式: cin >>變量1 >> 變量2 >> >> 變量 n; 女口 cin >> a;當程序執(zhí)行到 cin 時會停下來等待用戶的輸入 , 后面一定是變量名,不可加引號 用戶可以輸入數(shù)據(jù),用回車(/)結(jié)束。當有多個輸入數(shù)據(jù)時,一般用空白字符(空格、制表符和回車)分隔。如: a 為整型, d 為 double ,則對應(yīng)于 cin >> a >

33、;>d ,用戶的輸入可以為12 13.2/or 12(tab 鍵) 13.2/ or 12/13.2/12. 。函數(shù)? 過程單元是程序的基本單位。在過程化的語言中,過程單元就是程序中某個模塊的 表示。在面向?qū)ο蟮恼Z言中,過程單元說明對象對各種事件是如何響應(yīng)的。? 過程單元分為:過程 (procedure) ,函數(shù) (function)? 執(zhí)行過程單元稱為調(diào)用 (calling) ,過程單元執(zhí)行完后返回到調(diào)用者? 主要技術(shù):自頂向下、逐步求精,采用單入口、單出口的控制結(jié)構(gòu)。? 函數(shù)是一系列獨立的程序步驟,這些程序步驟集合在一起,并賦予一個名字? 每個程序都必須有一個名為 main 的函數(shù),

34、它是程序的入口。主程序由一個或多個 函數(shù)組成? 程序主體(主函數(shù) main ():主要包含如下模塊:(definition -nput-proocess-ouput)(1) 變量定義:為程序中的數(shù)據(jù)準備存儲空間( declaration or definition)(2) 輸入階段: 接受所需輸入的信息。 它由兩部分組成: 顯示提示信息和接收輸入 (input)(3) 計算階段:完成所需的計算 (process)(4) 輸出階段:輸出計算的結(jié)果 (output)? 函數(shù)的主要構(gòu)成:函數(shù)聲明,函數(shù)定義,函數(shù)調(diào)用? 可以把函數(shù)想象成數(shù)學中的函數(shù)。如f(x)=2x參數(shù)表是一組自變量 x,返回類型是函

35、數(shù)值的類型 ; 函數(shù)聲明就是 設(shè)函數(shù)為 f(x), 函數(shù)定義 (函數(shù)頭 +函數(shù)體) 就是函數(shù) 表達式如2x,函數(shù)調(diào)用就是 帶值計算如f(2)=2 1。? 函數(shù)聲明: 類似于變量聲明,所有函數(shù)在使用前必須被聲明。又稱函數(shù)的原型,功 能:說明函數(shù)和外界的交流,反映函數(shù)調(diào)用的全部信息。包括下列內(nèi)容:函數(shù)名,函數(shù)的參數(shù)類型,函數(shù)的返回類型它的形式為: 返回類型 函數(shù)名(參數(shù)表) ; 返回類型: 是函數(shù)的輸出值的類型 , void 函數(shù)沒有返回值 函數(shù)名 :是函數(shù)的名字。程序可以通過函數(shù)名執(zhí)行函數(shù)體的語句 參數(shù)表 :是函數(shù)的輸入 , 無參數(shù)列表,可不寫,但是括號必須有。參數(shù)表中的參數(shù) 說明之間用 “,

36、”分開,每個參數(shù)說明可以是類型,也可以是類型后面再接一個參數(shù)名。如: int max(int, int); int max(int a, int b); int main( )? 函數(shù)定義 :函數(shù)頭 +函數(shù)體,相當于一個小程序。函數(shù)頭 :說明函數(shù)和外界的交流,與函數(shù)聲明一樣,參數(shù)表要有形參,void 除外函數(shù)體: 一系列獨立的程序步驟;,必須定義在函數(shù)體最前面 形式:返回類型 函數(shù)名(參數(shù)表) /函數(shù)頭 code here; /函數(shù)體Eg : int max(int a, int b)/函數(shù)定義 if (a > b) return(a);else return(b);? 函數(shù)調(diào)用形式 :

37、 函數(shù)名(實際參數(shù)表) ;一般出現(xiàn)在主調(diào)函數(shù)中或其他調(diào)用函數(shù)中。eg. max( x , y);? 函數(shù)執(zhí)行過程:( 1) 在主程序中 計算每個實際參數(shù)值。(2) 調(diào)用時將 實際參數(shù)的值 賦給對應(yīng)的 形式參數(shù) 。在賦值的過程中完成自動類型轉(zhuǎn)換。( 3) 進入函數(shù)體依次執(zhí)行函數(shù)體的每個語句,直到遇見 return 語句或函數(shù)體結(jié)束(4) 計算 return 后面的表達式的值,如果表達式的值與函數(shù)的返回類型不一致,則完 成類型的轉(zhuǎn)換。( 5) 用函數(shù)的返回值置換函數(shù),繼續(xù)主程序的執(zhí)行。Egint max(int a, int b); /函數(shù)聲明int main( ) int x, y ;cin &

38、gt;> x >> y;cout << max(x + 5, y - 3) ;/函數(shù)調(diào)用 int max(int a, int b)/ 函數(shù)定義if (a > b) return(a); else return(b);(1) 形式參數(shù)和實際參數(shù)的 個數(shù) (number) 、排列次序 (order) 、類型 ( type) 要完全相同。(2) 實際參數(shù)可以是常量、變量、表達式,甚至是另一個函數(shù)調(diào)用(3) 傳遞方式:值傳遞 ,執(zhí)行函數(shù)調(diào)用時,將實參值傳遞給形參,并替換形參同名的實體(4) 值傳遞:函數(shù)獲得了主調(diào)程序 參數(shù)變量值 的拷貝。被調(diào)程序可以改變這些拷貝,

39、但這對 主調(diào)程序的環(huán)境沒有影響。(5) 請注意:C+中不允許函數(shù)定義嵌套,即在函數(shù)定義中再定義一個函數(shù)是非法的。一個函數(shù)只能定義在別的函數(shù)的外部,函數(shù)定義之間都是平行的,互相獨立的。例如:下面的代碼在主函數(shù)中非法嵌套了一個 f ()函數(shù)定義:void main()void f()/函數(shù)參數(shù)的傳遞比較:1. 按值傳遞 以按值傳遞方式進行參數(shù)傳遞的過程為:首先計算出實參表達式的值, 接著給對應(yīng)的形參變量分配一個存儲空間,該空間的大小等于該形參類型的長度,然后把 已求出的實參表達式的值一一存入到為形參變量分配的存儲空間中,成為形參變量的初值, 供被調(diào)用函數(shù)執(zhí)行時使用。這種傳遞是把實參表達式的值傳送給

40、對應(yīng)的形參變量,故稱這 種傳遞方式為“按值傳遞” 。這種方式被調(diào)用函數(shù)本身不對(主調(diào)函數(shù)中)實參進行操作, 也就是說,即使形參的值在函數(shù)中發(fā)生了變化(主調(diào)函數(shù)中)實參的值也完全不會受到影 響,仍為調(diào)用前的值。例:按值傳遞。void swap(int,int);/函數(shù)定義void main()int a=3,b=4;cout<<"a="<<a<<",b= “<<b<<endl;swap(a,b); /函數(shù)調(diào)用cout<<"a="<<a<<",

41、b="<<b <<endl;void swap(int x,int y)/函數(shù)定義int t=x;x=y;y=t;此程序的運行結(jié)果為: a=3,b=4a=3,b=42. 地址傳遞 如果在函數(shù)定義時將形參的類型說明成指針,對這樣的函數(shù)進行調(diào)用時就 需要指定地址值形式的實參。這時的參數(shù)傳遞方式即為地址傳遞方式。這種地址傳遞與上 述的按值傳遞不同,它把實參的存儲地址傳送給對應(yīng)的形參,從而使得形參指針和實參指針指向同一個地址。因此,被調(diào)用函數(shù)中對形參指針所指向的地址中內(nèi)容的任何改變都會 影響到實參。例:地址傳遞。void swap(int *x ,int *y);/v

42、oid main()int a=3,b=4;cout<<"a="<<a<<",b=swap(&a,&b); 、cout<<"a="<<a<<",b=void swap(int *x,int *y)int t=*x;*x=*y;*y=t;此程序的運行結(jié)果為:函數(shù)聲明<<b<<endl;<<b<<endl;a=3,b=4a=4,b=33. 引用傳遞 按值傳遞方式容易理解,但形參值的改變不能對實參產(chǎn)生影響;

43、地址傳遞方 式雖然可以使得形參的改變對相應(yīng)的實參有效,但如果在函數(shù)中反復利用指針進行間接訪 問,會使程序容易產(chǎn)生錯誤且難以閱讀。如果以引用作為參數(shù),則既可以使得對形參的任 何操作都能改變相應(yīng)的實參的數(shù)據(jù),又使函數(shù)調(diào)用顯得方便、自然。引用傳遞方式是在函 數(shù)定義時在形參前面加上引用運算符“ &”。例引用傳遞。void swap(int &,int &);void main()int a=3,b=4;cout<<"a="<<a<<",b= “<<b<<endl;swap(a,b);cou

44、t<<"a="<<a<<",b= “<<b<<endl;void swap(int &x,int &y)int t=x;x=y;y=t;此程序的運行結(jié)果為: a=3,b=4a=4,b=3函數(shù)的嵌套調(diào)用:函數(shù)體由前述可知,C+函數(shù)不能嵌套定義,即一個函數(shù)不能在另一 個函數(shù)體中進行定義。但在使用時,允許嵌套調(diào)用,即在調(diào)用一個函數(shù)的過程 中又調(diào)用另一個函數(shù)。 例如: func1(int a, float b) float c;c=func2(b-1,b+1);/嵌套調(diào)用 ,func1 調(diào)用 fu

45、nc2int func2(float x, float y) / 函數(shù)體 /func1 和 func2 是分別獨立定義的函數(shù),互不從屬。函數(shù)的遞歸調(diào)用: 一個函數(shù)直接或間接地調(diào)用自身,這種現(xiàn)象就是函數(shù)的遞歸調(diào)用。 遞歸調(diào)用有兩種方式:直接遞歸調(diào)用和間接遞歸調(diào)用。直接遞歸調(diào)用即在一個函數(shù)中 調(diào)用自身,間接遞歸調(diào)用即在一個函數(shù)中調(diào)用了其他函數(shù),而在該其他函數(shù)中又調(diào)用了本 函數(shù)。利用函數(shù)的遞歸調(diào)用,可將一個復雜問題分解為一個相對簡單且可直接求解的子問題(“遞推”階段) ;然后將這個子問題的結(jié)果逐層進行回代求值,最終求得原來復雜問題的 解(“回歸”階段) 。例:求 n 的階乘。(函數(shù)遞歸調(diào)用的例程。

46、)long f(int n) if(n<0)cout<< “ error! “ <<endl;return(-1);else if(n<=1)return(1);elsereturn (n*f(n-1);/ 自己調(diào)用自己void main()long f(int n);int n;cout<<"input n:"<<endl;cin>>n;cout<<"n!="<<f(n)<<endl;此程序的運行結(jié)果為: please input n:5n!=1

47、20程序的內(nèi)存區(qū)域: 一個程序?qū)⒉僮飨到y(tǒng)分配給其運行的內(nèi)存塊分為 4 個區(qū)域。(1)代碼區(qū),存放程序的代碼,即程序中各個函數(shù)中的代碼塊。 (2)全局數(shù)據(jù)區(qū),存放程序全局數(shù)據(jù)和靜態(tài)數(shù)據(jù)。(3) 堆區(qū),存放程序的動態(tài)數(shù)據(jù)。(4) 棧區(qū),存放程序的局部數(shù)據(jù),即各個函數(shù)中的數(shù)據(jù)。2. 局部變量。 在一個函數(shù)內(nèi)部說明的變量是內(nèi)部變量,它只在該函數(shù)范圍內(nèi)有效。也就是說,只有 在包含變量說明的函數(shù)內(nèi)部,才能使用被說明的變量,在此函數(shù)之外就不能使用這些變量 了。所以內(nèi)部變量也稱“局部變量” 。關(guān)于局部變量的作用域還要說明以下幾點:1主函數(shù) main() 中定義的內(nèi)部變量,也只能在主函數(shù)中使用,其它函數(shù)不能使用

48、。同 時,主函數(shù)中也不能使用其它函數(shù)中定義的內(nèi)部變量。因為主函數(shù)也是一個函數(shù),與其它 函數(shù)是平行關(guān)系。這一點是與其它語言不同的,應(yīng)予以注意。2形參變量也是內(nèi)部變量,屬于被調(diào)用函數(shù);實參變量,則是調(diào)用函數(shù)的內(nèi)部變量。3允許在不同的函數(shù)中使用相同的變量名,它們代表不同的對象,分配不同的單元, 互不干擾,也不會發(fā)生混淆。4在復合語句中也可定義變量,其作用域只在復合語句范圍內(nèi)。3. 全局變量(1) 在函數(shù)外部定義的變量稱為外部變量。以此類推,在函數(shù)外部定義的數(shù)組就稱為外部數(shù) 組。(2) 外部變量不屬于任何一個函數(shù),其作用域是:從外部變量的定義位置開始,到本文件結(jié) 束為止。(3) 外部變量可被作用域內(nèi)的

49、所有函數(shù)直接引用,所以外部變量又稱全局變量對于全局變量還有以下幾點說明:(1)外部變量可加強函數(shù)模塊之間的數(shù)據(jù)聯(lián)系,但又使這些函數(shù)依賴這些外部變量,因而 使得這些函數(shù)的獨立性降低。從模塊化程序設(shè)計的觀點來看這是不利的,因此不是非用不 可時,不要使用外部變量。定義但不初始化,則自動賦以"0 "(整型和實型)或'0'(字符型)(2 )在同一源文件中,允許外部變量和內(nèi)部變量同名。在內(nèi)部變量的作用域內(nèi),外部變量 將被屏蔽而不起作用。(3 )外部變量的作用域是從定義點到本文件結(jié)束。如果定義點之前的函數(shù)需要引用這些外部變量時,需要在函數(shù)內(nèi)對被引用的外部變量進行說明。外部

50、變量說明的一般形式為:extern 數(shù)據(jù)類型 外部變量,外部變量2 ;注意:外部變量的定義和外部變量的說明是兩回事。外部變量的定義,必須在所有的函數(shù) 之外,且只能定義一次。而外部變量的說明,出現(xiàn)在要使用該外部變量的函數(shù)內(nèi),而且可 以出現(xiàn)多次。靜態(tài)局部變量1.定義格式:static數(shù)據(jù)類型內(nèi)部變量表;2. 存儲特點(1)靜態(tài)局部變量屬于靜態(tài)存儲。在程序執(zhí)行過程中,即使所在函數(shù)調(diào)用結(jié)束也 不釋放。換句話說,在程序執(zhí)行期間,靜態(tài)內(nèi)部變量始終存在,但其它函數(shù)是 不能引用它們的。 定義但不初始化,則自動賦以"0 "(整型和實型)或'0'(字符型);且每 次調(diào)用它們所在

51、的函數(shù)時,不再重新賦初值,只是保留上次調(diào)用結(jié)束時的值!(3)何時使用靜態(tài)局部變量需要保留函數(shù)上一次調(diào)用結(jié)束時的值。變量只被引用而不改變其值。外部存儲類型1.構(gòu)成一個程序的多個源文件之間,通過聲明數(shù)據(jù)或函數(shù)為外 部的(extern )來進行溝通。2. 所有函數(shù)聲明一般都放在源文件的開始位置。3. 帶extern的是變量聲明,不是變量定義。靜態(tài)存儲類型1.靜態(tài)全局變量(1) 在全局變量前加一個static,使該變量只在這個源文件中可用,稱之為全 局靜態(tài)變量。全局靜態(tài)變量就是靜態(tài)全局變量。(2) 靜態(tài)全局變量對組成該程序的其他源文件是無效的。2.靜態(tài)函數(shù)函數(shù)的聲明和定義默認情況下在整個程序中是ext

52、ern的。有時候,你可能需要使某個函數(shù)只在一個源文件中有效,不能被其他源文件所用,這時在函數(shù)前面 力卩上static 。生命期1.靜態(tài)生命期這種生命期與程序的運行期相同,只要程序一開始運行,這種生命期的變量就 存在,當程序結(jié)束時,其生命期就結(jié)束。2.局部生命期在函數(shù)內(nèi)部聲明的變量或者是塊中聲明的變量具有局部生命期。3. 動態(tài)生命期這種生命期由程序中特定的函數(shù)調(diào)用(malloc()和free()或操作符(new和 delete )來創(chuàng)建和釋放。函數(shù)的作用域 1. 局部作用域當標識符的聲明出現(xiàn)在由一對花括號所括起來的一段程序(塊)內(nèi)時,該標識 符的作用域從聲明點開始,到塊結(jié)束處為止,該作用域的范圍

53、具有局部性。2. 函數(shù)作用域函數(shù)標識符是唯一具有函數(shù)作用域的標識符。3. 函數(shù)原型作用域 函數(shù)原型聲明中所作的參數(shù)聲明在該作用域中。這個作用域開始于函數(shù)原型聲 明的左括號,結(jié)束于函數(shù)聲明的右括號。4. 文件作用域 文件作用域是在所有函數(shù)定義之外說明的,其作用域從說明點開始,一直延伸 到源文件結(jié)束??梢娦?可見性從另一角度表現(xiàn)標識符的有效性,標識符在某個位置可見,表示該標識 符可以被引用??梢娦耘c作用域是一致的。作用域指的是標識符有效的范圍, 而可見性是分析在某一位置標識符的有效性。函數(shù)重載:函數(shù)重載又稱為函數(shù)的多態(tài)性,是指同一個函數(shù)名對應(yīng)著多個不 同的函數(shù)。所謂“不同”是指這些函數(shù)的形參表必須

54、互不相同,或者是形參的 個數(shù)不同,或者是形參的類型不同,或者是兩者都不相同,否則將無法實現(xiàn)函 數(shù)重載重載函數(shù)的類型,即函數(shù)的返回類型可以相同,也可以不同。但如果僅僅是 返回類型不同而函數(shù)名相同、形參表也相同,則是不合法的,編譯器會報“語 法錯誤”。如:函數(shù)默認參數(shù):在C+語言中調(diào)用函數(shù)時,通常要為函數(shù)的每個形參給定對應(yīng)的實參。若沒有給出實參,則按指定的默認值進行工作。當一個函數(shù)既有定義又有聲明時,形參的默認值必須在聲明中指定,而不能放在定義 中指定。只有當函數(shù)沒有聲明時,才可以在函數(shù)定義中指定形參的默認值。默認值的定義必須遵守從右到左的順序,如果某個形參沒有默認值,則它左邊的參數(shù) 就不能有默認

55、值。 如: void func1(int a, double b=4.5, int c=3); /合法void func1(int a=1, double b, int c=3); /不合法在進行函數(shù)調(diào)用時,實參與形參按從左到右的順序進行匹配,當實參的數(shù)目少于形參 時,如果對應(yīng)位置形參又沒有設(shè)定默認值,就會產(chǎn)生編譯錯誤;如果設(shè)定了默認值,編譯 器將為那些沒有對應(yīng)實參的形參取默認值。 注意:形參的默認值可以是全局常量、全局變量、表達式、函數(shù)調(diào)用,但不能為局部變量。13. 數(shù)組:? 數(shù)組是一組同類元素,它有兩個特征:? 數(shù)組元素是有序的? 數(shù)組元素是同類的? 定義數(shù)組要定義三個基本內(nèi)容:? 數(shù)組名

56、字? 數(shù)組元素的類型? 數(shù)組的大小? 定義格式:類型 數(shù)組名 元素個數(shù) ;其中,元素個數(shù)必須是常量。如:int intarray10;但 int n=10; int intarrayn; 是錯的? 常用的方法是將元素個數(shù)定義為一個常量。如:Const int NumOfElement= 10;int intarrayNumOfElement; 相當于 int intarray10;? 聲明數(shù)組時可以對數(shù)組初始化float x5 = -1.1, 0.2, 33.0, 4.4, 5.05 ;? 初始化表的長度短于要被初始化的數(shù)組元素數(shù)目,那么剩余元素被初始化為0。? 帶有初始化的數(shù)組可以不定義長度

57、int a=1,2,3,4,5; 則默認數(shù)組大小為 5? 數(shù)組元素的使用是通過數(shù)組名及元素的序號來指定,如 intarray2 。當數(shù)組的大 小為n時,元素的序號為 0 - n-1。? 元素的序號稱為下標。程序中,下標可為整數(shù)、整型變量或結(jié)果為整型的任意表達 式? 定義數(shù)組就是定義了一塊連續(xù)的空間,空間的大小等于元素數(shù)*每個元素所占的空間大小。? 數(shù)組元素按序存放在這塊空間中。? C+語言不檢查數(shù)組下標的超界。如定義數(shù)組intin tarray10;合法的下標范圍是 0 - 9,但如果你引用 intarray10 ,系統(tǒng)不會報錯。如數(shù)組 intarray 的起始 地址是 1000,則引用 in

58、tarray10 ,則系統(tǒng)對 1040 號內(nèi)存進行操作。而 1040 可 能是另一個變量的地址? 解決方法:由程序員自己控制。在對下標變量進行操作前,先檢查下標的合法性。? 由一系列字符組成的一個單元稱為字符串?字符串:? 在C+沖,字符串常量用一對雙引號括起來。如”Hello,world ”? 字符串變量:用字符類型的數(shù)組來表示? 字符串的本質(zhì)是一系列的有序字符,因此可以用一個字符數(shù)組來保存這組字符。用數(shù)組名表示這個字符串? 由于數(shù)組名是數(shù)組的起始地址,因此該字符串從該地址開始存儲。但到哪里為止?C+用0'表示字符串的結(jié)束。? 字符串所需的存儲空間比實際的字符串長度大 1? 如要將字符串”Hello,world ”保存在一個數(shù)組中,該數(shù)組的長度為 12?Char ch=H','e', 'l ', 'l ', 'o', ',', 'w', 'o', 'r

溫馨提示

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

評論

0/150

提交評論