九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > PPT文檔下載  

C++實(shí)用教程[鄭阿奇主編]5實(shí)用教案

  • 資源ID:63327108       資源大小:1.23MB        全文頁數(shù):39頁
  • 資源格式: PPT        下載積分:20積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要20積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號:
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

C++實(shí)用教程[鄭阿奇主編]5實(shí)用教案

5.1 函數(shù)(hnsh)概述 主函數(shù)main不僅是程序的入口函數(shù),而且與其他函數(shù)相比較還有許多使用上的限制。例如,它不能被其他函數(shù)調(diào)用,不能用inline和static來說明等。ANSI/ISO C+還規(guī)定主函數(shù)main的函數(shù)類型必須是int,以保證程序的可移植性。 圖5.1 函數(shù)調(diào)用關(guān)系示意圖 自定義函數(shù)是用戶根據(jù)程序的需要,將某個功能相對獨(dú)立的程序定義成一個函數(shù),或?qū)⒔鉀Q某個問題(wnt)的算法用一個函數(shù)來組織。第1頁/共38頁第一頁,共39頁。5.1 函數(shù)調(diào)用關(guān)系(gun x)示意圖第2頁/共38頁第二頁,共39頁。5.2 函數(shù)(hnsh)的定義和聲明 與變量的使用規(guī)則相同(xin tn),在C+程序中函數(shù)定要先定義后調(diào)用 第3頁/共38頁第三頁,共39頁。5.2.1 函數(shù)(hnsh)的定義 C+中每一個函數(shù)(hnsh)的定義都由4部分組成,即函數(shù)(hnsh)名、函數(shù)(hnsh)類型、形式參數(shù)表和函數(shù)(hnsh)體,其定義格式如下: ( ) 函數(shù)(hnsh)體 注意:函數(shù)(hnsh)頭末尾沒有也不能有分號“;”,函數(shù)(hnsh)體花括號“”后面也沒有分號“;” .第4頁/共38頁第四頁,共39頁。例:定義一個(y )函數(shù)sum 第5頁/共38頁第五頁,共39頁。下面就函數(shù)定義的幾個部分(b fen)分別說明函數(shù)類型和返回值: 若函數(shù)類型為void,則表示該函數(shù)沒有返回值。2.函數(shù)名: 注意自定義函數(shù)名與庫函數(shù)名或系統(tǒng)命名盡量不要(byo)相同。 3. 形式參數(shù)表:在函數(shù)定義中,當(dāng)形參個數(shù)為0時,應(yīng)在圓括號中使用void關(guān)鍵字,表示沒有形參,這是一個良好的編程習(xí)慣。如int f( void ).。第6頁/共38頁第六頁,共39頁。4. 形參的作用和設(shè)計(jì):函數(shù)中的形參,用來指定調(diào)用此函數(shù)時所需要的 參數(shù)個數(shù)和類型。一個函數(shù)的函數(shù)體中必須(bx)有相關(guān) 語句對形參進(jìn)行操作,否則形參定義毫無意義。5. 函數(shù)體:函數(shù)體由一對花括號中的若干語句組成,用于實(shí)現(xiàn)這個函數(shù)的功能。它僅為程序結(jié)構(gòu)而設(shè)定,本身不實(shí)現(xiàn)任何操作 。注意:C+不允許在一個函數(shù)體中再定義函數(shù) 第7頁/共38頁第七頁,共39頁。5.2.2 函數(shù)的調(diào)用(dioyng)和聲明 1. 函數(shù)的實(shí)參和形參 要注意形參和實(shí)參有如下區(qū)別 2. 函數(shù)的調(diào)用 函數(shù)調(diào)用的一般格式如下: ( ) 注 : 調(diào) 用 函 數(shù) 時 要 注 意 , 實(shí) 參 與 形 參 的 個 數(shù) 應(yīng) 相 等 , 類 型 應(yīng) 一 致 , 且 按 順 序(shnx)對應(yīng),一一傳遞數(shù)據(jù) 第8頁/共38頁第八頁,共39頁。3. 函數(shù)的聲明聲明一個(y )函數(shù)按下列格式進(jìn)行: ( )下面幾種形式都是對sum函數(shù)原型的合法聲明: int sum(int a, int b); / 允許原型聲明時的形參名與 定義時不同int sum(int, int); / 省略全部形參名int sum(int a, int);/ 省略部分形參名int sum(int, int b);/ 省略部分形參名第9頁/共38頁第九頁,共39頁。5.3 函數(shù)的參數(shù)(cnsh)特性 5.3.1 全局變量和局部變量 C+中每一個變量必須先定義后使用,若變量是在函數(shù)頭或函數(shù)體內(nèi)定義的,則該變量就是一個局部變量,它只能在函數(shù)體內(nèi)使用,函數(shù)體外則不能使用。 若變量是在函數(shù)外部(如在main主函數(shù)前)定義的,則它從定義開始一直(yzh)到源文件結(jié)束都能被后面的所有函數(shù)或語句引用,這樣的變量稱為全局變量。第10頁/共38頁第十頁,共39頁。#include using namespace std;函數(shù)聲明和定義(dngy)void f( int n);/ 函數(shù)原型聲明int a = 8;/ 定義(dngy)全局變量int main()coutaendl;/ 輸出8f(10);coutaendl;/ 輸出10return 0;void f(int n )/ 函數(shù)定義(dngy)a = n;/ 將全局變量的值改為n代碼中,變量a是在main函數(shù)中定義(dngy)的,是一個全局變量,因此它能在后面的main函數(shù)和f函數(shù)中使用。程序運(yùn)行結(jié)果如下: 8 10例Ex_Global 使用(shyng)全局變量示例 第11頁/共38頁第十一頁,共39頁。5.3.2 函數(shù)調(diào)用的內(nèi)部(nib)機(jī)制 函數(shù)調(diào)用是在棧內(nèi)存空間中完成的,棧的工作原理是先入后出。當(dāng)調(diào)用一個函數(shù)時,整個調(diào)用過程(guchng)分為三步進(jìn)行:調(diào)用初始化、執(zhí)行函數(shù)調(diào)用、調(diào)用后處理 。第12頁/共38頁第十二頁,共39頁。從圖中可以看出,在調(diào)用函數(shù)sum時,C+首先進(jìn)行如下(rxi)初始化步驟。 因sum函數(shù)調(diào)用需要指定實(shí)參,這里是10和20,故先從右向左將實(shí)參值20(14h)和10(0Ah)分別入棧(在匯編中使用push指令來進(jìn)行)。 把函數(shù)返回后執(zhí)行的第一條指令地址入棧(在匯編中call指令隱含(yn hn)一個這樣的操作,此時入棧的地址是004015C1)。 將控制權(quán)轉(zhuǎn)交到被調(diào)函數(shù)處(通過call和jmp指令來進(jìn)行),然后執(zhí)行函數(shù)調(diào)用,其步驟如下所述。 將所有相關(guān)寄存器的運(yùn)行狀態(tài)入棧,即保護(hù)現(xiàn)場。第13頁/共38頁第十三頁,共39頁。 在棧中開辟并預(yù)留一定(ydng)數(shù)量的臨時內(nèi)存空間,此時函數(shù)的 形參和函數(shù)體中定義的變量的內(nèi)存空間的分配等 操作一并在 此步完成,其中形參的內(nèi)存空間就是已壓入棧中的實(shí)參值所 在的內(nèi)存空間。 執(zhí)行函數(shù)體中的其他語句(yj)(z = x+y; return z;)。 函數(shù)在返回時(這里是在“return z;”執(zhí)行之后),進(jìn)行如下函數(shù)調(diào)用后處理的步驟。 將返回值保存在棧中的臨時內(nèi)存空間中(如果無返回值,則此步不執(zhí)行)。 將所有入棧的相關(guān)寄存器運(yùn)行狀態(tài)出棧(使用pop指令),即恢復(fù)現(xiàn)場。 釋放??臻g,根據(jù)返回地址,回到主調(diào)函數(shù),執(zhí)行下一條指令(即地址004015C1中的指令add esp,8)。第14頁/共38頁第十四頁,共39頁。5.3.3 參數(shù)傳遞方式(fngsh) 函數(shù)的參數(shù)傳遞有兩種方式: 一是按值傳遞, 二是地址傳遞或引用傳遞。 值傳遞具有如下特點(diǎn) : 1)在值傳遞方式下,若實(shí)參指定的是變量,則在調(diào)用初始化時入棧的是實(shí)參變量的值而不是實(shí)參變量的地址 2)即使形參的值在函數(shù)中發(fā)生了變化,函數(shù)調(diào)用結(jié)束(jish)后,實(shí)參的值不會受到影響。 第15頁/共38頁第十五頁,共39頁。例Ex_SwapValue 交換函數(shù)(hnsh)兩個參數(shù)的值 #include using namespace std;void swap(float x, float y);/ 函數(shù)原型說明(shumng)int main()float a = 20, b = 40;couta = a, b = bn;swap(a, b);/ 函數(shù)調(diào)用couta = a, b = bn;return 0;void swap(float x, float y)/ 函數(shù)定義float temp;temp = x; x = y; y = temp;coutx = x, y = yn;第16頁/共38頁第十六頁,共39頁。程序運(yùn)行結(jié)果(ji gu)如下: a=20, b=40 X=40, y=20 a=20, b=40 注:函數(shù)值傳遞方式的最大好處是保持函數(shù)的獨(dú)立性。該方式下,函數(shù)只有通過指定函數(shù)類型并在函數(shù)體中使用return來返回(fnhu)某一類型的數(shù)值。 第17頁/共38頁第十七頁,共39頁。5.3.4 函數(shù)(hnsh)的默認(rèn)形參值 在C+中,允許在函數(shù)聲明(shngmng)或定義時給一個或多個參數(shù)指定默認(rèn)值。這樣在調(diào)用時,可以不給出實(shí)際參數(shù),而按指定的默認(rèn)值工作 void delay(int loops = 1000)/ 函數(shù)定義,1000為形參loops的默認(rèn)值 if ( 0 = loops) return;for (int i=0; iloops; i+);/ 空循環(huán),起延時作用 這樣,當(dāng)有調(diào)用 delay();/ 和delay(1000)等效 時,程序就會自動將loops當(dāng)1000的默認(rèn)值來處理。當(dāng)然,也可在函數(shù)調(diào)用時指定相應(yīng)的實(shí)際參數(shù)值,例如: delay(2000);/ 形參loops的值為2000第18頁/共38頁第十八頁,共39頁。在設(shè)置函數(shù)(hnsh)的默認(rèn)形參值時要注意以下5點(diǎn):(1)當(dāng)函數(shù)既有原型聲明又有定義時,默認(rèn)參數(shù)只能(zh nn)在原型聲明中指定,而不能在函數(shù)定義中指定。 (2)當(dāng)一個函數(shù)需要有多個默認(rèn)參數(shù)時,則在形參分布中,默認(rèn)參數(shù)應(yīng)嚴(yán)格從右到左逐次定義和指定,中間不能跳開。 (3)當(dāng)帶有默認(rèn)參數(shù)的函數(shù)調(diào)用時,系統(tǒng)按從左到右的順序?qū)?shí)參與形參結(jié)合。當(dāng)實(shí)參的數(shù)目不足時,系統(tǒng)將按同樣的順序用聲明或定義中的默認(rèn)值來補(bǔ)齊所缺少的參數(shù)。 (4)由于對同一個函數(shù)的原型可進(jìn)行多次聲明,因此在函數(shù)聲明中指定多個默認(rèn)參數(shù)時,可用多條函數(shù)原型聲明語句來指定,但同一個參數(shù)的默認(rèn)值只能(zh nn)指定一次 (5)默認(rèn)參數(shù)值可以是全局變量、全局常量,甚至是一個函數(shù),但不能是局部變量。因?yàn)槟J(rèn)參數(shù)的函數(shù)調(diào)用是在編譯時確定的,而局部變量的值在編譯時無法確定。 第19頁/共38頁第十九頁,共39頁。5.4 函數(shù)(hnsh)的調(diào)用特性 在C+中,函數(shù)還有重載、內(nèi)聯(lián)調(diào)用、嵌套調(diào)用及遞歸調(diào)用等特性,相應(yīng)的函數(shù)被稱為重載函數(shù)、內(nèi)聯(lián)函數(shù)、嵌套函數(shù)和遞歸函數(shù)。 5.4.1 函數(shù)重載 函數(shù)重載是指C+允許多個同名的函數(shù)存在,但同名的各個函數(shù)的形參必須有區(qū)別:要么形參的個數(shù)不同(b tn);要么形參的個數(shù)相同,但參數(shù)類型不同(b tn) 第20頁/共38頁第二十頁,共39頁。例Ex_OverLoad 編程求兩個(lin )或三個操作數(shù)之和。 #include using namespace std; int sum(int x, int y); int sum(int x, int y, int z); double sum(double x, double y); double sum(double x, double y, double z); int main() coutsum(2, 5)endl;/ 結(jié)果( ji gu)為7coutsum(2, 5, 7)endl;/ 結(jié)果( ji gu)為14coutsum(1.2, 5.0, 7.5)endl;/ 結(jié)果( ji gu)為13.7return 0; 第21頁/共38頁第二十一頁,共39頁。int sum(int x, int y)return x+y;int sum(int x, int y, int z)return x+y+z;double sum(double x, double y)return x+y;double sum(double x, double y, double z)return x+y+z;程序運(yùn)行結(jié)果( ji gu)如下: 714 13.7 第22頁/共38頁第二十二頁,共39頁。5.4.2 內(nèi)聯(lián)函數(shù)(hnsh)例Ex_Inline 用內(nèi)聯(lián)函數(shù)實(shí)現(xiàn)求兩個(lin )實(shí)數(shù)的最大值。#include using namespace std;inline float fmax(float x, float y)return xy?x:y;int main()float a;a = fmax(5, 10);/ Acout最大的數(shù)為:a10 ? 5 : 10;第23頁/共38頁第二十三頁,共39頁。程序運(yùn)行結(jié)果(ji gu)如下:最大的數(shù)為:10要注意使用內(nèi)聯(lián)函數(shù)的一些限制:(1)內(nèi)聯(lián)函數(shù)中不能有數(shù)組定義,也不能有任何靜態(tài)類型(lixng)的定義。(2)內(nèi)聯(lián)函數(shù)中不能含有循環(huán)、switch和復(fù)雜嵌套的if語句。(3)內(nèi)聯(lián)函數(shù)不能是遞歸函數(shù)。 總之,內(nèi)聯(lián)函數(shù)一般是比較小的、經(jīng)常被調(diào)用的、大多可在一行寫完的函數(shù),并常用來代替以后要討論的帶參數(shù)的宏定義 第24頁/共38頁第二十四頁,共39頁。5.4.3 函數(shù)(hnsh)嵌套調(diào)用C+允許在函數(shù)中再調(diào)用其他函數(shù),這種調(diào)用稱為函數(shù)的嵌套調(diào)用。 例Ex_Root 用函數(shù)嵌套調(diào)用求解一元二次方程的根 :#include #include using namespace std;void print( double r1, double r2, int n = 2);/ 輸出(shch)根,默認(rèn)時根的個數(shù)n為2double sdelta( double a, double b, double c);/ 計(jì)算b*b-4*a*c的平方根void root( double a, double b, double c);/ 計(jì)算并輸出(shch)根第25頁/共38頁第二十五頁,共39頁。 int main() double a = 2.0, b = 6.0, c = 3.0;/ 定義(dngy)并初始化變量root(a, b, c);/ 調(diào)用函數(shù)return 0; void print( double r1, double r2, int n) if (n1)cout方程無根!;else cout方程有 n 根:n;coutt根1: r1;if (n=2) coutt根2: r2;coutendl; double sdelta( double a, double b, double c) 第26頁/共38頁第二十六頁,共39頁。 double res;double d = b*b - 4.0 * a * c;/ 當(dāng)d小于0無平方根,返回值為-1,若小于1.0e-10,則d認(rèn)為是0,返回值為0/ 否則調(diào)用sqrt庫函數(shù)求平方根if (d0.0) res = -1.0;else if ( fabs(d) 1.0e-10 ) res = 0.0;else res = sqrt(d);return res; void root( double a, double b, double c) double d = sdelta(a, b, c);/ 調(diào)用函數(shù)sdelta,此時形參作為(zuwi)函數(shù)sdelta的實(shí)參if (d0 由于n!和(n-1)!都是同一個問題的求解,因此可將n!用遞歸函數(shù)long factorial(int n)來描述,程序(chngx)代碼如下。第29頁/共38頁第二十九頁,共39頁。例Ex_Factorial 編程求n的階乘(ji chn)n! #include using namespace std; long factorial(int n); int main() coutfactorial(4)endl;/ 結(jié)果為24return 0; long factorial(int n) long result = 0;if (0 = n) result = 1;elseresult = n*factorial(n-1);/ 進(jìn)行自身調(diào)用(dioyng)return result; 程序運(yùn)行結(jié)果如下: 24第30頁/共38頁第三十頁,共39頁。2. 遞歸函數(shù)的運(yùn)行(ynxng)過程 int m = 0;/ 全局變量 long factorial(int n) long result = 0;int i;for (i=0; im; i+) coutt;/ 按調(diào)用的次數(shù)(csh)來決定輸出位置couthex&n: decn, result = resultendl;/ 輸出形參n的地址和值以及result的值m+;if (0 = n) result = 1;elseresult = n*factorial(n-1);m-;for (i=0; im; i+) coutt;couthex&n: decn, result = resultendl;/ 輸出形參n的地址和值以及result的值return result; 第31頁/共38頁第三十一頁,共39頁。程序運(yùn)行結(jié)果(ji gu)如下:可見(kjin),盡管函數(shù)factorial遞歸調(diào)用時的形參都是n,但每次調(diào)用都會為其分配不同的內(nèi)存空間,且每次調(diào)用都是按照調(diào)用初始化、執(zhí)行函數(shù)代碼、調(diào)用后處理這三步進(jìn)行。因此,遞歸函數(shù)實(shí)際上可理解為同名函數(shù)的多級嵌套調(diào)用 第32頁/共38頁第三十二頁,共39頁。3. 遞歸的條件(tiojin) 一般來說,遞歸需要滿足兩個條件:一是要有遞歸公式,即能將一個問題可化解一個或多個子問題求解,且子問題和原問題具有相同的解法 若將例Ex_Factorial中的函數(shù)factorial代碼修改成下列代碼: long factorial(int n) return n*factorial(n-1); 則因無終止條件而使遞歸無休止地進(jìn)行下去。若修改成 long factorial(int n) long result = 0;if (0 = n) result = 1;elseresult = n*factorial(n);return result; 則遞歸調(diào)用時,由于參數(shù)n沒有變化,因此(ync)代碼中的if條件永遠(yuǎn)不會滿足,遞歸會一直進(jìn)行下去,直到棧內(nèi)存空間用完為止。第33頁/共38頁第三十三頁,共39頁。5.5 遞歸程序設(shè)計(jì)(chn x sh j)5.5.1 設(shè)計(jì)步驟(bzhu)一般地,用遞歸方法進(jìn)行“問題求解”時,需要依次進(jìn)行下列三個步驟(bzhu) 化解問題,求得算法規(guī)劃遞歸路線確定形參,設(shè)計(jì)遞歸終止條件第34頁/共38頁第三十四頁,共39頁。5.5.2 Fibonacci數(shù)列(shli) 1. Fibonacci數(shù)列(shli)問題例Ex_Fibonacci1 編程求Fibonacci數(shù)列(shli)的第n項(xiàng) #include using namespace std;long fib(int n);int main()coutfib(8) n;/ 結(jié)果為21return 0;long fib(int n)switch(n) case 0: return 0;case 1:case 2:return 1;return fib(n-1)+fib(n-2);程序運(yùn)行結(jié)果如下:21第35頁/共38頁第三十五頁,共39頁。5.5.3 Hanoi塔問題(wnt)例Ex_Hanoi 求解(qi ji)Hanoi塔問題。#include using namespace std;void move( int n, char s, char d)coutn, sdendl;void hanoi( int n, char A = A, char B = B, char C = C)if (1 = n)move(n, A, C);elsehanoi( n-1, A, C, B);move(n, A, C);hanoi( n-1, B, A, C);int main()hanoi(3);return 0;第36頁/共38頁第三十六頁,共39頁。程序運(yùn)行結(jié)果(ji gu)如下:第37頁/共38頁第三十七頁,共39頁。謝謝您的觀看(gunkn)!第38頁/共38頁第三十八頁,共39頁。NoImage內(nèi)容(nirng)總結(jié)5.1 函數(shù)概述。 ( )。函數(shù)中的形參,用來指定調(diào)用此函數(shù)時所需要的 參數(shù)個數(shù)和類型。一個(y )函數(shù)的函數(shù)體中必須有相關(guān) 語句對形參進(jìn)行操作,否則形參定義毫無意義。 ( )。void f(int n )/ 函數(shù)定義第三十九頁,共39頁。

注意事項(xiàng)

本文(C++實(shí)用教程[鄭阿奇主編]5實(shí)用教案)為本站會員(牛***)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!