



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、一、 C+標識符的命名規(guī)則1. 所有標識符必須由一個字母 (az 或 AZ) 或下劃線 (_)開頭;2.標識符的其它部分可以用字母、下劃線或數(shù)字(09) 組成;3.大小寫字母表示不同意義 , 即代表不同的標識符,如前面的cout 和 Cout ;二、如何正確地聲明變量及其初始化2. C+中變量定義的格式 :類型名變量名 1,變量名 2, ,變量名 n ; 如: int num1, num2;( 2.1)在 C+中,每個變量在使用前必須被定義,以便編譯器檢查變量使用的合法性。變量定義只是給變量分配相應(yīng)的空間。( 2.2) C+允許在定義變量的同時給變量賦初值。變量未被賦值前,值為未知格式: 類型
2、名 變量名 = 初值;或者:類型名 變量名(初值);如: int count = 0; 或 int count(0); 都是定義整型變量 count ,并為它賦初值0??梢越o被定義的變量中的一部分變量賦初值,如: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ù)類型
3、包括兩個方面:數(shù)據(jù)的取值范圍、可用的操作。C/C+ 中的數(shù)據(jù)類型分為兩大類:基本數(shù)據(jù)類型:整型、浮點型、字符型和布爾型構(gòu)造數(shù)據(jù)類型:字符串、數(shù)組、結(jié)構(gòu)、聯(lián)合和枚舉( 3.1)整型 (int) :以補碼形式存儲?;拘?int ;長整型 long: long / long int( )整數(shù)運算時要注意數(shù)據(jù)的表示范圍。如整數(shù)用兩個字節(jié)表示,正整數(shù) 32767 加 1 的結(jié)果為 -32768 。這稱為整數(shù)運算的溢出,系統(tǒng)不檢查這樣的錯誤,程序員必須自己保證程序中不出現(xiàn)這樣的錯誤。()在某些應(yīng)用中,不可能出現(xiàn)負數(shù),則整型數(shù)中有一半的數(shù)值范圍是被浪費的。因此在 C/C+ 中可以將所有的數(shù)都看成正整數(shù),稱
4、為無符號數(shù)。無 符 號 數(shù) 的 定 義 : 在 各 種 整 數(shù) 類 型 前 加 上 關(guān) 鍵 詞 unsigned , 變 成 unsigned int, unsigned short, unsigned long( 3.2) 實型:以浮點表示,操作類似于整型,浮點數(shù)無法精確表示。( )浮點類型的分類:單精度 float ;雙精度 double( 3.3)字符型( char ):存放一個字母或符號,占一個字節(jié),存放的是字符的內(nèi)碼??蓤?zhí)行比較、連接等運算。具有雙重屬性:整數(shù)屬性和字符屬性,整數(shù)屬性:字符類型即單字節(jié)的整數(shù)類 ,字符屬性:數(shù)據(jù)值即為相應(yīng)字符的 Ascii 碼。字符類型名: char
5、。可分為可打印字符:小寫字母、大寫字母、數(shù)字、標點符號、空格等;非打印字符:換行和報警字符或響鈴等控制字符( 3.4 ) 布 爾 型 (bool) :只 有 “真 ”、 “假 ”兩 個 值 。 可 執(zhí) 行 判 斷 運 算 。如 bool flag=true;( 3.5)字符串( string ):是類類型,用雙引號 “”表示,可執(zhí)行字符串比較 ,連接應(yīng)用時要加 #include <string> 如 string str= “dfhdsf ”;三、如何聲明常量4.常量:值的直接表示。如1、 3、1.57 、“A?等 ,又稱直接量。( 4.1) 整型常量可用十進制、八進制和十六進制表
6、示:如十進制: 123, -234;八進制:0123 十六進制: 0x123, 0x3a2f( 4.2)浮點數(shù)常量有兩種表示法:( 1)十進制表示: 1.23 , 3.14;( 2)科學(xué)計數(shù)法:尾數(shù) e 指數(shù) 123e2=12300 2.25e-3=0.00225 ; 注意:尾數(shù)不能為空,指數(shù)必須為整數(shù)( 4.3)字符常量: ”a?, “S?, ”2?等用一對單引號括起來的數(shù)據(jù)。字符串常量用雙引號( 4.4)命名常量:為值指定一個描述性的文字,增加程序的可讀性。在 C+語言中,用 const 修飾,如 const double PI =3.14; 見 PI 即知 3.14。注意一般變量名需大寫
7、,如 PI。二、算術(shù)運算符號及其運行規(guī)則a) 整數(shù)除整數(shù)b) % 求模運算5.算術(shù)運算符: +(加) -(減)*(乘)/ (求商)%(求余)( 5.1) “-”可為二元運算符,也可為一元運算符,其余所有的算術(shù)運算符都是二元運算符。( 5.2)優(yōu)先級:高 * / % , 低 + -( 5.3)整型與整型數(shù)運算,結(jié)果為整型,如5 / 2 = 2 ;整型與浮點數(shù)運算,結(jié)果為浮點數(shù),如5 / 2.0 = 2.5 ;字符與整型數(shù)運算,結(jié)果為整型;字符與浮點數(shù)運算,結(jié)果為浮點數(shù)。浮點數(shù)與浮點數(shù)運算,結(jié)果為浮點數(shù)?!?”運算符:取余,其兩邊都必須是整型數(shù)。6.關(guān)系運算符:>,>=,=,<=
8、,<,!=( 6.1) 優(yōu)先級:高于賦值運算符,低于算術(shù)運算符。關(guān)系運算符內(nèi)部:=和 ! =較低( 6.2)關(guān)系表達式:用關(guān)系運算符將二個表達式連接起來稱為關(guān)系表達式。關(guān)系表達式的結(jié)果是 true 或 false。 “等于 ”運算符是由兩個等號組成。常見的錯誤是在比較相等時用一個等號。 =( 相等 ), =(賦值)7. 邏輯運算符:&& (and)| (or)!(not)( 7.1)優(yōu)先級:! 高于 關(guān)系運算符 高于 && 高于 |( 7.2)邏輯表達式:由邏輯運算符連接起來的表達式,其結(jié)果為 “真 (true) ”或 “假(false) ”邏輯表達式在執(zhí)
9、行時,先處理左邊。如左邊已能決定此邏輯表達式的結(jié)果,則右邊不執(zhí)行。因此,在&& 邏輯表達式中,應(yīng)把false 可能性較大的條件放在左邊,在 | 表達式中,應(yīng)把 true 可能性較大的條件放在左邊,這樣可以減少程序執(zhí)行的時間8賦值運算符: = 的優(yōu)先級比算術(shù)運算符低( 8.1)賦值語句:把一個值賦給一個變量。如x = y + z; x = 3.14; 賦值語句的左邊是變量,右邊是表達式。( 8.2)賦值表達式格式:<變量 > = <表達式 >如 x = x + 2。作用:將右邊的表達式的值存入左邊的變量,整個表達式的值是右邊的表達式的結(jié)果。 賦值運算符是右
10、結(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é)果存于變量a( 8.6)其他運算符與賦值運算符結(jié)合的運算符稱為復(fù)合賦值運算符。格式:變量 op= 表達式 ; 等價于:變量 = 變量 op 表達式 ;常用的復(fù)合賦值運算符有:+=,=,*=,/=,%= 如: balance += d
11、eposit; balance -= surcharge; x /= 10; salary *=2;( 8.7)賦值和運算時的自動類型轉(zhuǎn)換,在進行賦值操作時,會發(fā)生類型轉(zhuǎn)換,將取范圍小的類型轉(zhuǎn)為取值范圍大的類型是安全的反之是不安全的,如果大類型的值在小類型能容納的范圍之內(nèi),則平安無事強制類型轉(zhuǎn)換: (類型名)(表達式);或類型名 (表達式);如 z = (double)x / y; 靜態(tài)轉(zhuǎn)換 (static_cast) :用于編譯器隱式執(zhí)行的任何類型轉(zhuǎn)換格式:轉(zhuǎn)換類型 <類型名 > (表達式 ) 如 z = static_cast<double>(x) / y;1. 單
12、個分號組成的語句成為空語句2. 用 括起來的一組語句稱為復(fù)合語句。在邏輯上看成一個語句。 v 復(fù)合語句可以放在任何單語句出現(xiàn)的地方。3. 在復(fù)合語句中可以定義變量,但必須定義在最前面。4. 逗號表達式語句格式:表達式 1,表達式 2,,表達式 nv 逗號運 算符的優(yōu) 先級 是所有 運算 符中最 低的 如 a 的初值為 0 , 則表達式 a += 1, a += 2, a += 3, a += 4, a += 5的結(jié)果為 155. 前置+i, -i ( 先執(zhí)行 i+1 或 i-1 ,再使用 i 值)6.后置 i+, i-( 先使用 i 值 ,再執(zhí)行 i+1 或 i-1 )If 語句c) 形式d)
13、 三種 If 語句的執(zhí)行流程9. 控制語句 : 改變程序中語句的執(zhí)行次序。(9.1)if 語句 : 兩個分支:條件測試為 true 時所執(zhí)行的程序塊叫做 then 子句,條件為 false 時執(zhí)行的語句叫做 else 子句。格式( 1 )if (條件測試)語句;即 else 語句可省略( 2)if (條件測試)語句 1; else語句 2;eg. if (grade >= 60)cout << “passed”;eg. if (grade >= 60)cout << “passed”;elsecout <<“failed ”;格式( 3)多分支語
14、句:條件 1 為 true 時所執(zhí)行的程序塊 1,條件 1 為 false 但滿足條件 2 時執(zhí)行的語句塊 2,。依次類推,條件 n-1 為 false 但滿足條件 n 時執(zhí)行 else 語句。常見的有 3 分支語句: if else ifelse。eg. if(grade >= 90)cout << “A”;else if(grade >= 80)cout << “B”;else if(grade >= 70)cout << “C”;else if(grade >= 60)cout << “D”;elsecout <
15、;<”E”;( 9.2)條件語句使用注意 條件的結(jié)果值應(yīng)該是true 或 false,它們是 C+中 bool 類型的值 條件可為任意表達式,不一定是關(guān)系表達式。0 為 false,非 0 為 true 。 if 語句可以沒有else 子句。合理的縮排。 if 語句的 then 子句和 else 子句含有 if 語句,稱為 if 語句的嵌套。 eg if (x < 100)if (x < 90)語句 1;else if (x<80)語句 2;else語句 3;else 語句 4; 歧義性:如最后一個else 跟哪個 if 配對 .。egif (y != 0)if (x
16、!= 0)result = x / y;elsecout<<“error :y = 0 ”<<endl;配對原則:每個else 子句是和在它之前最近的一個沒有else 子句的 if 語句配對。 在每個 if-else 語句后加一對大括號是一種良好習(xí)慣,特別是有兩個以上的復(fù)合語句需要執(zhí)行時。( 9.2)條件表達式: 作用:更加簡練的用來表達條件執(zhí)行的機制?:運算符 :問號冒號運算符形式 : (條件 ) ? 表達式 1 : 表達式 2 eg: max = x > y ? x :y;循環(huán)語句e) 形式f) 三種循環(huán)語句的區(qū)別g) 三種循環(huán)語句的執(zhí)行流程10.循環(huán)語句:一
17、個完整的循環(huán)結(jié)構(gòu)一般由四部分組成:( 10.1)For 語句:主要用于計數(shù)循環(huán)v 格式: for (表達式 1;表達式 2;表達式 3) 語句; or 語句快 ;可以理解為 :for( 循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值 )符合循環(huán)條件時的執(zhí)行語句v 循環(huán)體可以是復(fù)合語句或空語句。v 循環(huán)里所有語句的一次完全執(zhí)行稱為一個循環(huán)周期。v 執(zhí)行過程:先執(zhí)行表達式1,再執(zhí)行判斷表達式2,如果為true ,執(zhí)行一次循環(huán)體(即一個循環(huán)周期),接著執(zhí)行表達式3,然后重新執(zhí)行判斷表達式2,若為true,又執(zhí)行一次循環(huán)體,重復(fù)直至判斷表達式2 為 false,,最后跳出整個循環(huán)。若開始執(zhí)行條件表示2 為 f
18、alse, 循環(huán)體一次也不執(zhí)行。v For 循環(huán)的三個表達式可以是任意表達式。三個表達式都是可選的。v 如果循環(huán)不需要任何初始化工作,則表達式1 可以缺省。如循環(huán)前需要做多個初始化工作,可以將多個初始化工作組合成一個逗號表達式,作為表達式1。如 for (int i=0,; i<=10; +i) ;v 表達式2 也不一定是關(guān)系表達式。它可以是邏輯表達式,甚至可以是算術(shù)表達式。當(dāng)表達式 2 是算術(shù)表達式時,只要表達式的值為非0,就執(zhí)行循環(huán)體,表達式的值為 0 時退出循環(huán)。v 如果表達式2 省略,即不判斷循環(huán)條件,循環(huán)將無終止地進行下去。無終止的循環(huán)稱為 “死循環(huán) ”,最簡單的死循環(huán)是for
19、 ( ;);( 10.2)While 語句: 與 for 循環(huán)等價,可相互代替。v 格式: while (表達式)語句; or 語句塊; v 執(zhí)行過程:先計算出條件表達式的值。如果是false,循環(huán)終止;如果是true ,整個循環(huán)體將被執(zhí)行,而后又回到 while 語句的第一行,再次對條件進行檢查,若為 true, 接著執(zhí)行循環(huán)體,重復(fù)直到條件為 false,,跳出整個循環(huán)。v 用途:用于循環(huán)次數(shù)不定的循環(huán)。循環(huán)是否結(jié)束取決于某一個變量的值(標記控制重復(fù))v 在 for 和 while語句之后一般沒有分號,有分號表示循環(huán)體就是分號之前的內(nèi)容(空循環(huán)體)( 10.3)Do- While 語句v
20、格式:do 語句; or 語句塊; while ( 表達式 );v 執(zhí)行過程:首先執(zhí)行語句,然后判斷表達式的值。如果表達式為0,繼續(xù)向下執(zhí)行,否則,再次執(zhí)行語句,再次判斷表達式的值v 用途:用于至少執(zhí)行一次的循環(huán)。注意后面有分號;11 跳轉(zhuǎn)語句:v break 語句:跳出整個循環(huán)或switch 語句。若有多重循環(huán),跳出含break最近的循環(huán)體。v continue 語句:跳出當(dāng)前本次循環(huán),接著判斷是否執(zhí)行下次循環(huán)周期。12 幾種典型的循環(huán)。注意格式及應(yīng)用v 輸入驗證循環(huán):以下兩種等價,右邊一個常用 cout <<" 請輸入半徑 :" / 提示輸入do cout
21、<< “請輸入半徑 :" cin>>radius;area = PI * radius * radius while ( radius < 0);/ 當(dāng) radius < 0 ,重復(fù)輸入,直到2.while(true) /或 while (1)>0for () cout << “輸入一個正整數(shù):"/cin >>num;if (num = -1) break; / if (num=sum += num;/ 處理數(shù)據(jù)提示用戶并讀入數(shù)據(jù)標志) 跳出 ;v 查詢循環(huán) 累加循環(huán) p=0; char ans; / 用于用
22、戶響應(yīng)for(int i=1;i<=N;i+) cout <<" 請輸入半徑 :" / 提示輸入p=p+i;cin >> radius;area = PI * radius * radius 累乘循環(huán) : p=1cout << "area = " <<area <<endl;for(int i=1;i<=N;i+)cout << "do you again?"<<endl; /詢問提示p=p*i;cin >>ans; / 詢問輸
23、入 while(ans = 'Y'| ans = 'y'); /詢問循環(huán)v 編譯( compiler ):將高級語言的程序翻譯成機器語言,分為解釋執(zhí)行,編譯執(zhí)行v 連接 (link) :將目標程序與已有的其它目標程序連接起來,產(chǎn)生一個可執(zhí)行的程序v 輸出流是傳給顯示器的數(shù)據(jù)流,將變量或表達式的內(nèi)容顯示在顯示器上格式? 輸出一個變量的值: cout << a;? 輸出多個變量的值: cout << a << b << c;? 輸出表達式的結(jié)果: cout << “Hello worldn ”<<
24、; endl? 上述情況的組合: cout << a << “+”<< b << “=”<< a+b << endl; v 鍵盤流入的數(shù)據(jù)流,將鍵盤輸入的數(shù)據(jù)存入變量格式: cin >>變量 1 >> 變量 2 >> >> 變量 n; 如 cin >> a;當(dāng)程序執(zhí)行到 cin 時會停下來等待用戶的輸入 ,后面一定是變量名,不可加引號 用戶可以輸入數(shù)據(jù),用回車()結(jié)束。當(dāng)有多個輸入數(shù)據(jù)時,一般用空白字符(空格、制表符和回車)分隔。如: a 為整型, d 為 dou
25、ble ,則對應(yīng)于cin >> a >>d,用戶的輸入可以為12 13.2or12( tab 鍵) 13.2 or 1213.2如何定義一個帶默認值參數(shù)的函數(shù)如何調(diào)用一個帶默認值參數(shù)的函數(shù)h) 參數(shù)使用默認值i) 參數(shù)不使用默認值函數(shù)v 過程單元是程序的基本單位。在過程化的語言中,過程單元就是程序中某個模塊的表示。在面向?qū)ο蟮恼Z言中,過程單元說明對象對各種事件是如何響應(yīng)的。v 每個程序都必須有一個名為main的函數(shù),它是程序的入口。主程序由一個或多個函數(shù)組成v 程序主體(主函數(shù)main ():主要包含如下模塊:(definitioninput-proocess-oupu
26、t)(1) 變量定義:為程序中的數(shù)據(jù)準備存儲空間( declaration or definition)(2) 輸入階段:接受所需輸入的信息。它由兩部分組成:顯示提示信息和接收輸入 (input)(3) 計算階段:完成所需的計算 (process)(4) 輸出階段:輸出計算的結(jié)果 (output)v 函數(shù)的主要構(gòu)成:函數(shù)聲明,函數(shù)定義,函數(shù)調(diào)用v 可以把函數(shù)想象成數(shù)學(xué)中的函數(shù)。如 f(x)=2x 參數(shù)表是一組自變量 x,返回類型是函數(shù)值的類型 ; 函數(shù)聲明就是設(shè)函數(shù)為 f(x), 函數(shù)定義(函數(shù)頭 +函數(shù)體)就是函數(shù)表達式如 2x,函數(shù)調(diào)用就是帶值計算如 f(2)=2 ×2。v 函數(shù)
27、聲明:類似于變量聲明,所有函數(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ù)說明之間用 “, ”分開,每個參數(shù)說明可以是類型,也可以是類型后面再接一個參數(shù)名。如: int max(int, int);int max(int a, int b); int main( ) v
28、函數(shù)定義:函數(shù)頭+函數(shù)體,相當(dāng)于一個小程序。void函數(shù)頭:說明函數(shù)和外界的交流,與函數(shù)聲明一樣,參數(shù)表要有形參,除外 函數(shù)體: 一系列獨立的程序步驟 ; ,必須定義在函數(shù)體最前面形式:返回類型函數(shù)名(參數(shù)表) / 函數(shù)頭 code here;/ 函數(shù)體Eg : int max(int a, int b)/ 函數(shù)定義 if (a > b) return(a); else return(b);v 函數(shù)調(diào)用形式 : 函數(shù)名(實際參數(shù)表) ;一般出現(xiàn)在主調(diào)函數(shù)中或其他調(diào)用函數(shù)中。eg. max( x,y) ;v 函數(shù)執(zhí)行過程:( 1) 在主程序中計算每個實際參數(shù)值。( 2) 調(diào)用時將實際參數(shù)的
29、值賦給對應(yīng)的形式參數(shù)。在賦值的過程中完成自動類型轉(zhuǎn)換。( 3) 進入函數(shù)體依次執(zhí)行函數(shù)體的每個語句,直到遇見return 語句或函數(shù)體結(jié)束( 4) 計算 return 后面的表達式的值,如果表達式的值與函數(shù)的返回類型不一致,則完成類型的轉(zhuǎn)換。( 5) 用函數(shù)的返回值置換函數(shù),繼續(xù)主程序的執(zhí)行。 Eg int max(int a, int b); / 函數(shù)聲明int main( ) int x, y ;cin >> x >> y;cout << max(x + 5, y - 3);/函數(shù)調(diào)用 int max(int a, int b) /函數(shù)定義 if (a
30、> b) return(a); else return(b); v 注意:(1) 形式參數(shù)和實際參數(shù)的個數(shù) (number) 、排列次序 (order) 、類型 (type) 要完全相同。(2) 實際參數(shù)可以是常量、變量、表達式,甚至是另一個函數(shù)調(diào)用(3) 傳遞方式:值傳遞,執(zhí)行函數(shù)調(diào)用時,將實參值傳遞給形參,并替換形參同名的實體(4) int a=3,b=4; cout<<"a="<<a<<",b= cout<<"a="<<a<<",b=(5) void
31、swap(int *x ,int *y);/(4) 值傳遞:函數(shù)獲得了主調(diào)程序參數(shù)變量值的拷貝。被調(diào)程序可以改變這些拷貝,但這對主調(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)的形參變量分配一個存儲空間,該空
32、間的大小等于該形參類型的長度,然后把已求出的實參表達式的值一一存入到為形參變量分配的存儲空間中,成為形參變量的初值,供被調(diào)用函數(shù)執(zhí)行時使用。這種傳遞是把實參表達式的值傳送給對應(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=“<
33、;<b<<endl;swap(a,b); /函數(shù)調(diào)用cout<<"a="<<a<<",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)的形參,從而使得形參
34、指針和實參指針指向同一個地址。因此,被調(diào)用函數(shù)中對形參指針所指向的地址中內(nèi)容的任何改變都會影響到實參。例:地址傳遞。函數(shù)聲明 void main() “ <<b<<endl; swap(&a,&b); 、 “ <<b<<endl; void swap(int *x,int *y) int t=*x; *x=*y; *y=t; 此程序的運行結(jié)果為:a=3,b=4a=4,b=33. 引用傳遞 按值傳遞方式容易理解,但形參值的改變不能對實參產(chǎn)生影響;地址傳遞方式雖然可以使得形參的改變對相應(yīng)的實參有效,但如果在函數(shù)中反復(fù)利用指針進行間接訪
35、問,會使程序容易產(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);cout<<"a="<<a<<&quo
36、t;,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);/ int func2(float x, float y),func1 /函數(shù)體func2/func1和 func2
37、 是分別獨立定義的函數(shù),互不從屬。如何定義一個遞歸函數(shù)j) 漢諾塔k) 求最大公約數(shù)l) 計算階乘函數(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)用,可將一個復(fù)雜問題分解為一個相對簡單且可直接求解的子問題( “遞推 ”階段);然后將這個子問題的結(jié)果逐層進行回代求值,最終求得原來復(fù) 雜問 題的 解( “回 歸 ”階 段)。 例: 求 n 的階乘 。( 函 數(shù)遞 歸調(diào)用 的例程。) long f(in
38、t 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!=120程序的內(nèi)存區(qū)域:
39、一個程序?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ù)
40、不能使用。同時,主函數(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在復(fù)合語句中也可定義變量,其作用域只在復(fù)合語句范圍內(nèi)。3.全局變量(1) 在函數(shù)外部定義的變量稱為外部變量。以此類推,在函數(shù)外部定義的數(shù)組就稱為外部數(shù)組。(2) 外部變量不屬于任何一個函數(shù),其作用域是:從外部變量的定義位置開始,到本文件結(jié)束為止。(3) 外部變量可被作用域內(nèi)的所
41、有函數(shù)直接引用,所以外部變量又稱全局變量 對于全局變量還有以下幾點說明:( 1)外部變量可加強函數(shù)模塊之間的數(shù)據(jù)聯(lián)系,但又使這些函數(shù)依賴這些外部變量,因而使得這些函數(shù)的獨立性降低。從模塊化程序設(shè)計的觀點來看這是不利的,因此不是非用不可時,不要使用外部變量。定義但不初始化,則自動賦以 " "(整型和實型)或 '0' (字符型)( 2)在同一源文件中,允許外部變量和內(nèi)部變量同名。在內(nèi)部變量的作用域內(nèi),外部變量將被屏蔽而不起作用。( 3)外部變量的作用域是從定義點到本文件結(jié)束。如果定義點之前的函數(shù)需要引用這些外部變量時,需要在函數(shù)內(nèi)對被引用的外部變量進行說明。外部
42、變量說明的一般形式為: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ù)是不能引用它們的。(2) 定義但不初始化,則自動賦以 " " (整型和實型)或 '0' (字符型);且每次
43、調(diào)用它們所在的函數(shù)時,不再重新賦初值,只是保留上次調(diào)用結(jié)束時的值!(3) 何時使用靜態(tài)局部變量§需要保留函數(shù)上一次調(diào)用結(jié)束時的值。變量只被引用而不改變其值。一維數(shù)組m) 如何正確地聲明一維 “靜態(tài) ”數(shù)組并初始化i. 初始化列表的長度與數(shù)組大小的關(guān)系ii. 數(shù)組大小必須是整型常量n) 如何使用數(shù)組元素i. 通過 “索引值 ”訪問數(shù)組中的具體元素ii. Const int NumOfElement= 10;ii. 對“索引值 ”的說明(整型值、從 0 開始)o) Josephus 問題p) 篩選質(zhì)數(shù)13.數(shù)組:v 數(shù)組是一組同類元素,它有兩個特征:?數(shù)組元素是有序的?數(shù)組元素是同類的v
44、 定義數(shù)組要定義三個基本內(nèi)容:?數(shù)組名字?數(shù)組元素的類型?數(shù)組的大小v 定義格式:類型數(shù)組名 元素個數(shù) ;其中,元素個數(shù)必須是常量。如:但int n=10; int intarrayn;是錯的int intarray10;v常用的方法是將元素個數(shù)定義為一個常量。如:int intarrayNumOfElement;相當(dāng)于 int intarray10;v 聲明數(shù)組時可以對數(shù)組初始化float x5 = -1.1, 0.2, 33.0, 4.4, 5.05 ;v 初始化表的長度短于要被初始化的數(shù)組元素數(shù)目,那么剩余元素被初始化為0。 v 帶有初始化的數(shù)組可以不定義長度int a=1,2,3,4,
45、5; 則默認數(shù)組大小為5v 數(shù)組元素的使用是通過數(shù)組名及元素的序號來指定,如 intarray2 。當(dāng)數(shù)組的大小為 n 時,元素的序號為 0 n-1。v 元素的序號稱為下標。程序中,下標可為整數(shù)、整型變量或結(jié)果為整型的任意表達式v 定義數(shù)組就是定義了一塊連續(xù)的空間,空間的大小等于元素數(shù)* 每個元素所占的空間大小。v 數(shù)組元素按序存放在這塊空間中。v C+語言不檢查數(shù)組下標的超界。如定義數(shù)組int intarray10;合法的下標范圍是 0 9,但如果你引用intarray10 ,系統(tǒng)不會報錯。如數(shù)組intarray 的起始地址是 1000 ,則引用 intarray10 ,則系統(tǒng)對1040 號
46、內(nèi)存進行操作。而1040 可能是另一個變量的地址v 解決方法:由程序員自己控制。在對下標變量進行操作前,先檢查下標的合法性。v 由一系列字符組成的一個單元稱為字符串v字符串:v 在 C+中,字符串常量用一對雙引號括起來。如”Hello,world ”v 字符串變量:用字符類型的數(shù)組來表示v 字符串的本質(zhì)是一系列的有序字符,因此可以用一個字符數(shù)組來保存這組字符。用數(shù)組名表示這個字符串v 由于數(shù)組名是數(shù)組的起始地址,因此該字符串從該地址開始存儲。但到哪里為止?C+用 0 表示字符串的結(jié)束。v 字符串所需的存儲空間比實際的字符串長度大v 如要將字符串 ”Hello,world ”保存在一個數(shù)組中v
47、Charch= H,e,l,l,o,w ,o,r,l,d,0 ;v char ch = ”Hello,world ”;v char ch = ”Hello,world ”;v 不包含任何字符的字符串稱為空字符串。v 空字符串占用的空間為1 個字節(jié),存儲 0 v 注意 a和“a”的區(qū)別1,該數(shù)組的長度為12v 逐個字符的輸入輸出:這種做法和普通的數(shù)組操作一樣。v 將整個字符串一次性地用cin 和 cout 輸入或輸出。v 通過函數(shù) get 和 put 輸入輸出。v get 函數(shù)v 從終端接受一個包含任意字符的字符串。v 格式: cin.get (ch) ch 為 char 型v put 函數(shù)v
48、將一個字符串(以 0 結(jié)束的字符序列)輸出到終端v 格式: cout.put ( ch) ch 為 char 型v 字符串不能直接用系統(tǒng)的內(nèi)置運算符進行操作v C+的函數(shù)庫中提供了一些用來處理字符串的函數(shù)。這些函數(shù)在庫中 v C+還提供了一個string類來處理字符串函數(shù) 作用 strcpy(dst, src)cstring將字符從 src 拷貝到 dst 。函數(shù)的返回值是 dst 的地址 strncpy(dst, src, n)至多從 src 拷貝 n 個字符到 dst 。函數(shù)的返回值是 dst 的地址 strcat(dst, src) 將 src 接到 dst 后。函數(shù)的返回值是 dst
49、的地址strncat(dst, src, n)從 src 至多取 n 個字符接到dst 后。函數(shù)的返回值是dst的地址 strlen(s) 返回 s 的長度strcmp(s1, s2)比較 s1 和 s2。如 s1 > s2 返回值為正數(shù), s1=s1 返回值為 0, s1<s2 返回值為負數(shù)strncmp(s1, s2, n) 如 strcmp ,但至多比較n 個字符 strchr(s, ch) 返回一個指向s 中第一次出現(xiàn)ch 的地址 strrchr(s, ch) 返回一個指向s 中最后一次出現(xiàn)ch 的地址 strstr(s1, s2) 返回一個指向 s1 中第一次出現(xiàn) s2
50、的地址如何定義一個函數(shù)q) 函數(shù)返回類型r) 函數(shù)名s) 參數(shù)列表i. 一維數(shù)組作為參數(shù),該如何處理?ii. 二維數(shù)組作為參數(shù),該如何處理?t) return 語句數(shù)組作為函數(shù)的參數(shù)小結(jié):v 可以將數(shù)組元素傳遞給函數(shù),這時實際參數(shù)用的是數(shù)組元素素數(shù) isprime(ai);函數(shù)定義 bool isprime (ai);v 也可以將整個數(shù)組傳遞給函數(shù),這時實際參數(shù)用的是數(shù)組名。函數(shù)調(diào)用判斷是否為如 函數(shù)調(diào)用sort(a,n);函數(shù)定義 sort(int a, int n);v 數(shù)組傳遞的實質(zhì)是傳遞地址。把實際參數(shù)中的數(shù)組首地址作為形式參數(shù)中的數(shù)組的首地址 vv 數(shù)組在函數(shù)中的定義:函數(shù)原型應(yīng)該體
51、現(xiàn)數(shù)組參數(shù)是一個數(shù)組,所以用無數(shù)組大小定義的方括號表示數(shù)組。你可能希望規(guī)定數(shù)組的大小,但在C+語言中并不檢查數(shù)組的界限,所以在函數(shù)中也沒必要知道數(shù)組的大小。數(shù)組大小只在數(shù)組定義中明確(為了申請內(nèi)存量) 。v 數(shù)組的每一個元素又是數(shù)組的數(shù)組稱為多維數(shù)組v 最常用的多維數(shù)組是二維數(shù)組,又稱為矩陣v 二維數(shù)組的定義格式:類型說明數(shù)組名 常量表達式 1 常量表達式 2v 存放次序:按行存放int a45;v vector類模板是一種更加健壯, 且有許多附加功能的數(shù)組v 附加功能例如 :提供下標越界檢查 ;提供數(shù)組用相等運算和大小比較提供數(shù)組間賦值等運算指針u)利用指針移動(指針加法、減法運算) ,處理
52、數(shù)組中的不同元素。v) 利用 new/delete 處理一維動態(tài)數(shù)組指針與引用v 指針就是把地址作為數(shù)據(jù),可以把地址存儲在內(nèi)存中v 指針變量:存儲地址的變量v 變量的指針:當(dāng)一個變量存儲另一個變量的地址時,那我們說它就是那個變量的指針v 如何定義一個變量是指針? 類型標識符 *指針變量;如: int *intp;double *doublepv 如何把某一變量的地址置入一個指針變量中?因為我們不知道系統(tǒng)分配給變量的真正地址是什么。?用地址運算符“&”解決。如表達式“&x”返回的是變量x 的地址。如: intp = &x;? &運算符后面不能跟常量或表達式。如 &2 是沒有意義的,&(m * n + p ) 。也是沒有意義的v 如何用指針變量處理和改變它所指向的單元的值??用引用運算符“*”解決。如 *intp 表示的是 intp 指向的這個單元的內(nèi)容。?在對 intp 使用引用運算之前,必須先對intp 賦值如有: int X, *intp, Y;X=3;Y=4 intp=&X;注意:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年旅游管理專業(yè)職稱考試題及答案
- 2025年職業(yè)技能培訓(xùn)考試試卷及答案討論
- 2025年國考公務(wù)員面試模擬題及答案
- 2025年工程項目管理考試試題及答案解讀
- 2025年網(wǎng)絡(luò)安全師資格考試試卷及答案
- 2025年衛(wèi)校護理專業(yè)入學(xué)考試試卷及答案
- 公共交通樞紐施工圖深化設(shè)計及咨詢服務(wù)協(xié)議
- 婚前個人財產(chǎn)確認及分割補償協(xié)議
- 網(wǎng)絡(luò)大電影聯(lián)合投資合作協(xié)議范本
- 生命科學(xué)領(lǐng)域數(shù)據(jù)專有權(quán)許可協(xié)議
- 了不起的狐貍爸爸課件
- 全過程工程咨詢投標方案(技術(shù)方案)
- 2024中國合同能源管理行業(yè)發(fā)展前景預(yù)測及投資戰(zhàn)略咨詢報告
- 風(fēng)力發(fā)電項目實習(xí)報告范文
- 海南省臨高縣2022-2023學(xué)年小升初語文試卷(有答案)
- 名著《紅巖》三年中考真題及典型模擬題訓(xùn)練(原卷版)
- “艾梅乙”感染者消除醫(yī)療歧視制度-
- 2024年6月浙江省普通高校招生選考高考信息技術(shù)真題及答案
- 患者畫像與精準營銷-深度研究
- 熱點素材41+2025年央視春晚里的作文素材-備戰(zhàn)高考語文作文高分素材運用與范文
- DB11-T 356-2017 公共廁所運行管理規(guī)范
評論
0/150
提交評論