freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

函數(shù)是c程序的基本模塊可將一些功能相對獨立的或經(jīng)常(參考版)

2025-05-16 07:55本頁面
  

【正文】 undef指令用來取消 define指令所定義的符號,這樣可以根據(jù)需要打開和關(guān)閉符號。 條件編譯指令包括: if、 else、 ifdef、 ifndef、endif、 undef等。形式如下: ifdef DEBUG cout″a=″a′\t′″x=″xendl??梢酝ㄟ^在該指令前面安排宏定義來控制編譯不同的程序段。這種情況就要使用條件編譯指令。避免重復包含可以用 條件編譯指令 。 一個被包含的頭文件中還可以有 include指令,即 include指令可以嵌套 ,但是,如果同一個頭文件在同一個源程序文件中被 重復包含 ,就會出現(xiàn) 標識符重復定義的錯誤 。 而 第二種方式 編譯器將首先在當前文件所在目錄下搜索 , 如果找不到再按標準方式搜索 。 格式為: include 文件名 或 include ″文件名 ″ 第一種 方式稱為 標準方式 , 預處理器將在 include子目錄下搜索由文件名所指明的文件 。 帶參宏定義形式上象定義函數(shù),但它與函數(shù)的本質(zhì)不同,宏定義仍然只是產(chǎn)生字符串替代,不存在分配內(nèi)存和參數(shù)傳遞。注意,宏定義時形參通常要用括號括起來,否則容易導致邏輯錯誤。 宏替換只是字符串和標識符之間的簡單替換,預處理本身不做任何數(shù)據(jù)類型和合法性檢查,也不分配內(nèi)存單元 。替換過程稱為宏替換或宏展開。 圖 。編譯時每個源程序文件單獨編譯,如果源程序文件中有編譯預處理指令,則首先經(jīng)過編譯預處理生成臨時文件存放在內(nèi)存,之后對臨時文件進行編譯生成目標文件 .obj,編譯后臨時文件撤銷。 多文件結(jié)構(gòu)通過工程進行管理,在工程中建立若干用戶定義的頭文件.h和源程序文件 .cpp。 4. 9. 2 多文件結(jié)構(gòu) 在開發(fā)較大程序時,通常將其分解為多個源程序文件,每個較小的程序用一個源程序文件建立。對于具有外部存儲類型的標識符,可以在其他任何一個源程序文件中經(jīng)聲明后引用,因此用戶完全可以將一些具有外部存儲類型的標識符的聲明放在一個頭文件中。如: include 其中的 ,這種以“ .h”命名的文件稱為頭文件, 系統(tǒng)定義的頭文件 中定義了一些常用的公用標識符和函數(shù),用戶只要將頭文件包含進自己的文件,就可使頭文件中定義的標識符在用戶文件中變得可見,也就可以直接使用頭文件中定義的標識符和函數(shù)。 4. 9 頭文件與多文件結(jié)構(gòu) 4. 9. 1 頭文件 在將一個程序分解成若干個文件時,需要考慮標識符在其他文件中的可見性。這些文件均以 .h的形式命名,存放在系統(tǒng)目錄的 include子目錄 下。 C++的系統(tǒng)庫函數(shù) C++提供了一個很大的常用函數(shù)庫,該函數(shù)庫本身并不是C++語言的組成部分,所有庫中的函數(shù)用戶都可以自己定義,但直接使用庫函數(shù)能給編程帶來很大方便。 else cout″不是數(shù)字字符 ″endl。 } void main(){ char ch。amp。 為了協(xié)調(diào)好效率和可讀性之間的矛盾 , C++提供了另一種方法,即定義 內(nèi)聯(lián)函數(shù) ,方法是在定義函數(shù)時用修飾詞 inline。為了提高效率,一個解決辦法就是不使用函數(shù),直接將函數(shù)的代碼嵌入到程序中。參數(shù)名也可省略 void fun1(){…} int fun2(int a, int b, int c) {…}// 定義中不再給出缺省值 缺省變元 內(nèi)聯(lián)函數(shù) 當程序執(zhí)行函數(shù)調(diào)用時,系統(tǒng)要建立??臻g,保護現(xiàn)場,傳遞參數(shù)以及控制程序執(zhí)行的轉(zhuǎn)移等等,這些工作需要系統(tǒng)時間和空間的開銷。例如: int fun2 (int, int =10, int =20)。這是因為在函數(shù)調(diào)用時, 參數(shù)自左向右逐個匹配 ,當實參和形參個數(shù)不一致時只有這樣才不會產(chǎn)生二義性。 參數(shù) a缺省時,可由隨機數(shù)發(fā)生函數(shù)當場產(chǎn)生, 編譯時定的是調(diào)什么函數(shù) 。 //等同于 delay(5) cout“延時 5個時間單位 endl。 cout“延時 3個時間單位 endl。 loops)。 //文件名: include void delay(int loops=5){ //延時函數(shù) ,默認延時 5個時間單位 for (。 缺省參數(shù)的函數(shù)調(diào)用:缺省參數(shù)的 值 或 表達方式 在編譯時確定,即其值通過 表達式 給出,但表達式必須有意義;缺省值還可以是全局常量、全局變量,甚至可以 通過函數(shù)調(diào)用給出 ;但不能通過局部變量給出,因為局部變量的值在執(zhí)行時才有意義。這樣的函數(shù)在調(diào)用時,對于缺省參數(shù),可以給出實參值,也可以不給出參數(shù)值。} 一般情況下,函數(shù)調(diào)用時的實參個數(shù)應與形參相同,但為了更方便地使用函數(shù), C++也允許定義具有缺省參數(shù)的函數(shù),這種函數(shù)調(diào)用時實參個數(shù)可以與形參不相同。 cout+=“ sum(,)endl。 } float sum(float a,float b,float c){ return a+b+c。 include sum(int a,int b){ return a+b。函數(shù)重載的好處在于,可以用相同的函數(shù)名來定義一組功能相同或類似的函數(shù),程序的可讀性增強。匹配過程按如下步驟進行: ( 1)如果有嚴格匹配的函數(shù),就調(diào)用該函數(shù); ( 2)參數(shù)內(nèi)部轉(zhuǎn)換后如果匹配,調(diào)用該函數(shù); ( 3)通過用戶定義的轉(zhuǎn)換尋求匹配。 函數(shù)的遞歸調(diào)用 函數(shù)的一些高級議題 4. 7. 1 函數(shù)重載 4. 7. 2 缺省變元 4. 7. 3 內(nèi)聯(lián)函數(shù) 函數(shù)重載 在 C++中,如果需要定義幾個功能相似,而參數(shù)類型不同的函數(shù),那么這樣的幾個函數(shù)可以使用相同的函數(shù)名,這就是 函數(shù)重載 。 } 函數(shù)的遞歸調(diào)用 圖 遞歸求解斐波那契數(shù)列調(diào)用樹 同其他算法相比,用遞歸算法編制的程序 非常簡潔易讀 ,但缺點是增加了內(nèi)存的開銷,在遞推的過程中會 占用大量??臻g ,且連續(xù)的調(diào)用返回操作 占用較多 CPU時間 。 coutsetw(6)fib(i)。i++){ //將 19改為 69,可以看出計算到后面越來越緩慢。 } void main(){ for(int i=0。 else if(n==1) return 1。本例的遞歸調(diào)用過程參見圖 。因此,遞歸的終止條件非常重要,否則將會無休止地遞歸下去,陷入死循環(huán)狀態(tài)。如果先遞歸后輸出余數(shù),則是在回歸的過程中輸出,實現(xiàn)的就是正序輸出。 coutendl。 backward(247) return。 n=24 cout4。 n=2 cout2。 } 函數(shù)的遞歸調(diào)用 n=247 cout7。 backward(n)。 cinn。 } void main(){ int n。 if(n10) return。 分析: 在遞歸過程的遞推步驟中用求余運算將整數(shù)的各個位分離,并打印出來。)。,39。,39。 hanoi(n,39。 cout輸入盤子數(shù): endl。 //將最后一個盤子搬到目標柱 hanoi(n1,temp,source,target)。 else{ hanoi(n1,source,target,temp)。 程序如下: include void move(char source,char target){ coutsourcetargetendl。 函數(shù)的遞歸調(diào)用 函數(shù)的遞歸調(diào)用 算法可以描述為: 1 n1個盤子 A柱 ?B柱,借助于 C柱; 2 第 n個盤子 A柱 ?C柱; 3 n1個盤子 B柱 ?C柱,借助于 A柱; 其中步驟 1和步驟 3繼續(xù)遞歸下去,直至搬動一個盤子為止。 問題轉(zhuǎn)化成搬動 n1個盤子的問題 , 同樣 , 將 n1個盤子看成上面 n2個盤子和下面第 n1個盤子的情況 , 進一步轉(zhuǎn)化為搬動 n2個盤子的問題 , …… , 類推下去 , 一直到最后成為搬動一個盤子的問題 。 3 A柱有 n個盤子的情況:將此問題看成上面 n1個盤子和最下面第 n個盤子的情況 。 打印出搬動的步驟 。 有 A、 B、 C三根柱子 , A柱上有 n個大小不等的盤子 , 大盤在下 , 小盤在上 。遞歸調(diào)用同普通的函數(shù)調(diào)用一樣,每當調(diào)用發(fā)生時,在棧中分配單元保存返回地址以及參數(shù)和局部變量;而與普通的函數(shù)調(diào)用不同的是,由于遞推的過程是一個逐層調(diào)用的過程,因此存在一個逐層連續(xù)的參數(shù)入棧過程,直至遇到遞歸終止條件時,才開始回歸,這時才逐層釋放??臻g,返回到上一層,直至最后返回到主調(diào)函數(shù)。 24 遞歸函數(shù)的執(zhí)行分為 “ 遞推 ” 和 “ 回歸 ” 兩個過程,這兩個過程由遞歸終止條件控制,即 逐層遞推 ,直至 遞歸終止條件 ,然后 逐層回歸 。 cout2。 cout6。 cout24。 n=1 n=3 cout3。 cout1。 n=2 cout1。 fac(4)= cout2。 } n=4 cout4。 return y。 couty39。 if(n==0||n==1) y=1。 coutn39。 } 只要設計主函數(shù)調(diào)用階乘函數(shù),即可實現(xiàn)計算階乘。 遞歸定義的階乘算法用函數(shù)描述為: fac(int n){ if (n==0||n==1) return 1。本節(jié)只介紹直接遞歸。 在函數(shù)調(diào)用中,有這樣兩種情況,一種是在函數(shù) A的定義中有調(diào)用函數(shù) A的語句,即自己調(diào)用自己;另一種是函數(shù)A的定義中出現(xiàn)調(diào)用函數(shù) B的語句,而函數(shù) B的定義中也出現(xiàn)調(diào)用函數(shù) A的語句,即相互調(diào)用。 遞歸的思想可以簡單地描述為 “ 自己調(diào)用自己 ” 。 } m++。 { float m=。 int m=1。圖 段中變量的作用域與可見性。可見性在理解同名標識符的 作用域嵌套 時十分直觀。 2 可見性 可見性 從另一個角度說明標識符的有效性,可見性與作用域具有一定的一致性。具有動態(tài)生命期的變量存放在堆區(qū)。 具有局部生命期的標識符必定具有局部作用域;但反之不然 , 靜態(tài)局部變量具有局部作用域 , 但卻具有靜態(tài)生命期 。 具有靜態(tài)生命期的標識符存放在棧區(qū) 。 所有具有文件作用域的標識符都具有靜態(tài)生命期 。 具有靜態(tài)生命期的標識符在未被用戶初始化的情況下 , 系統(tǒng)會自動將其初始化為全 0。 ( 1) 靜態(tài)生命期 靜態(tài)生命期 指的是標識符從程序開始運行時存在 , 即具有存儲空間 , 到程序運行結(jié)束時消亡 ,即釋放存儲空間 。 生命期與可見性 1. 生命期 2. 可見性 1 生命期 ( 1)靜態(tài)生命期 ( 2)局部生命期 ( 3)動態(tài)生命期 生命期( Life
點擊復制文檔內(nèi)容
高考資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1