高素質(zhì)編程師湖南大學(xué)C語言課件第六章.ppt
《高素質(zhì)編程師湖南大學(xué)C語言課件第六章.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《高素質(zhì)編程師湖南大學(xué)C語言課件第六章.ppt(56頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第六章函數(shù) 6 1概述模塊化程序設(shè)計(jì)基本思想 將一個(gè)大的程序按功能分割成一些小模塊 特點(diǎn) 各模塊相對(duì)獨(dú)立 功能單一 結(jié)構(gòu)清晰 接口簡單控制了程序設(shè)計(jì)的復(fù)雜性提高元件的可靠性縮短開發(fā)周期避免程序開發(fā)的重復(fù)勞動(dòng)易于維護(hù)和功能擴(kuò)充開發(fā)方法 自上向下 逐步分解 分而治之 C是模塊化程序設(shè)計(jì)語言 C程序結(jié)構(gòu) C是函數(shù)式語言必須有且只能有一個(gè)名為main的主函數(shù)C程序的執(zhí)行總是從main函數(shù)開始 在main中結(jié)束函數(shù)不能嵌套定義 可以嵌套調(diào)用 函數(shù)分類從用戶角度標(biāo)準(zhǔn)函數(shù) 庫函數(shù) 由系統(tǒng)提供用戶自定義函數(shù)從函數(shù)形式無參函數(shù)有參函數(shù) 使用庫函數(shù)應(yīng)注意 1 函數(shù)功能2 函數(shù)參數(shù)的數(shù)目和順序 及各參數(shù)意義和類型3 函數(shù)返回值意義和類型4 需要使用的包含文件 Ch7 201 c 6 2函數(shù)的定義一般格式 合法標(biāo)識(shí)符 函數(shù)返回值類型缺省int型無返回值void 函數(shù)體 例有參函數(shù) 現(xiàn)代風(fēng)格 intmax intx inty intz z x y x y return z 例無參函數(shù)printstar printf n 或printstar void printf n 例有參函數(shù) 傳統(tǒng)風(fēng)格 intmax x y intx y intz z x y x y return z 6 3函數(shù)的返回值返回語句形式 return 表達(dá)式 或return表達(dá)式 或return 功能 使程序控制從被調(diào)用函數(shù)返回到調(diào)用函數(shù)中 同時(shí)把返值帶給調(diào)用函數(shù)說明 函數(shù)中可有多個(gè)return語句若無return語句 遇 時(shí) 自動(dòng)返回調(diào)用函數(shù)若函數(shù)類型與return語句中表達(dá)式值的類型不一致 按前者為準(zhǔn) 自動(dòng)轉(zhuǎn)換 函數(shù)調(diào)用轉(zhuǎn)換void型函數(shù) 例無返回值函數(shù)voidswap intx inty inttemp temp x x y y temp printstar printf main inta a printstar printf d a 例函數(shù)帶回不確定值 輸出 10 voidprintstar printf main inta a printstar printf d a 編譯錯(cuò)誤 例函數(shù)返回值類型轉(zhuǎn)換 main floata b intc scanf f f 6 4函數(shù)的調(diào)用調(diào)用形式函數(shù)名 實(shí)參表 說明 實(shí)參與形參個(gè)數(shù)相等 類型一致 按順序一一對(duì)應(yīng)實(shí)參表求值順序 因系統(tǒng)而定 TurboC自右向左 main inti 2 p p f i i printf d p intf inta intb intc if a b c 1 elseif a b c 0 elsec 1 return c 例參數(shù)求值順序 main inti 2 p p f i i printf d p intf inta intb intc if a b c 1 elseif a b c 0 elsec 1 return c 運(yùn)行結(jié)果 0 運(yùn)行結(jié)果 1 調(diào)用方式函數(shù)語句 例printstar printf Hello World n 函數(shù)表達(dá)式 例m max a b 2 函數(shù)參數(shù) 例printf d max a b m max a max b c 函數(shù)說明對(duì)被調(diào)用函數(shù)要求 必須是已存在的函數(shù)庫函數(shù) include用戶自定義函數(shù) 函數(shù)類型說明函數(shù)說明一般形式 函數(shù)類型函數(shù)名 形參類型 形參名 或函數(shù)類型函數(shù)名 作用 告訴編譯系統(tǒng)函數(shù)類型 參數(shù)個(gè)數(shù)及類型 以便檢驗(yàn)函數(shù)定義與函數(shù)說明不同函數(shù)說明位置 程序的數(shù)據(jù)說明部分 函數(shù)內(nèi)或外 下列情況下 可不作函數(shù)說明若函數(shù)返值是char或int型 系統(tǒng)自動(dòng)按int型處理被調(diào)用函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前有些系統(tǒng) 如BorlandC 要求函數(shù)說明指出函數(shù)返值類型和形參類型 并且對(duì)void和int型函數(shù)也要進(jìn)行函數(shù)說明 例函數(shù)說明舉例 6 5函數(shù)參數(shù)及其傳遞方式形參與實(shí)參形式參數(shù) 定義函數(shù)時(shí)函數(shù)名后面括號(hào)中的變量名實(shí)際參數(shù) 調(diào)用函數(shù)時(shí)函數(shù)名后面括號(hào)中的表達(dá)式 例比較兩個(gè)數(shù)并輸出大者 main inta b c scanf d d 說明 實(shí)參必須有確定的值形參必須指定類型形參與實(shí)參類型一致 個(gè)數(shù)相同若形參與實(shí)參類型不一致 自動(dòng)按形參類型轉(zhuǎn)換 函數(shù)調(diào)用轉(zhuǎn)換形參在函數(shù)被調(diào)用前不占內(nèi)存 函數(shù)調(diào)用時(shí)為形參分配內(nèi)存 調(diào)用結(jié)束 內(nèi)存釋放 6 5函數(shù)參數(shù)及其傳遞方式形參與實(shí)參形式參數(shù) 定義函數(shù)時(shí)函數(shù)名后面括號(hào)中的變量名實(shí)際參數(shù) 調(diào)用函數(shù)時(shí)函數(shù)名后面括號(hào)中的表達(dá)式 例計(jì)算x的立方 includefloatcube floatx return x x x main floata product printf Pleaseinputvalueofa scanf f x 1 2 1 2 1 728 參數(shù)傳遞方式值傳遞方式方式 函數(shù)調(diào)用時(shí) 為形參分配單元 并將實(shí)參的值復(fù)制到形參中 調(diào)用結(jié)束 形參單元被釋放 實(shí)參單元仍保留并維持原值特點(diǎn) 形參與實(shí)參占用不同的內(nèi)存單元單向傳遞 例交換兩個(gè)數(shù) ch7 2 c includemain intx 7 y 11 printf x d ty d n x y printf swapped n swap x y printf x d ty d n x y swap inta intb inttemp temp a a b b temp 地址傳遞方式 函數(shù)調(diào)用時(shí) 將數(shù)據(jù)的存儲(chǔ)地址作為參數(shù)傳遞給形參特點(diǎn) 形參與實(shí)參占用同樣的存儲(chǔ)單元 雙向 傳遞實(shí)參和形參必須是地址常量或變量 ch9 3 c swap p1 p2 int p1 p2 intp p p1 p1 p2 p2 p main inta b scanf d d 例交換兩個(gè)數(shù) 6 6函數(shù)的嵌套與遞歸調(diào)用嵌套調(diào)用C規(guī)定 函數(shù)定義不可嵌套 但可以嵌套調(diào)用函數(shù) 例求三個(gè)數(shù)中最大數(shù)和最小數(shù)的差值 includeintdif intx inty intz intmax intx inty intz intmin intx inty intz voidmain inta b c d scanf d d d Ch7 202 c intdif intx inty intz returnmax x y z min x y z intmax intx inty intz intr r x y x y return r z r z intmin intx inty intz intr r x y x y return r z r z 例用弦截法求方程根 運(yùn)行情況 Inputx1 x2 2 6 Arootofequationis5 0000 遞歸調(diào)用定義 函數(shù)直接或間接的調(diào)用自身叫函數(shù)的遞歸調(diào)用 說明C編譯系統(tǒng)對(duì)遞歸函數(shù)的自調(diào)用次數(shù)沒有限制每調(diào)用函數(shù)一次 在內(nèi)存堆棧區(qū)分配空間 用于存放函數(shù)變量 返回值等信息 所以遞歸次數(shù)過多 可能引起堆棧溢出 intf intx inty z z f y return 2 z 例求n的階乘 ch7 8 c includeintfac intn intf if n 0 printf n 0 dataerror elseif n 0 n 1 f 1 elsef fac n 1 n return f main intn y printf Inputaintegernumber scanf d 例Hanoi問題 voidmove chargetone charputone printf c c n getone putone voidhanoi intn charone chartwo charthree if n 1 move one three else hanoi n 1 one three two move one three hanoi n 1 two one three main intm printf Inputthenumberofdisks scanf d D fengyi bkc power power c 6 7數(shù)組作為函數(shù)參數(shù)數(shù)組元素作函數(shù)實(shí)參 值傳遞 例兩個(gè)數(shù)組大小比較 n 0m 0k 0 a和b為有10個(gè)元素的整型數(shù)組比較兩數(shù)組對(duì)應(yīng)元素變量n m k記錄a i b i a i b i a i k 認(rèn)為數(shù)組a b若n k 認(rèn)為數(shù)組a b若n k 認(rèn)為數(shù)組a b 數(shù)組名作函數(shù)參數(shù)地址傳遞在主調(diào)函數(shù)與被調(diào)函數(shù)分別定義數(shù)組 且類型應(yīng)一致形參數(shù)組大小 多維數(shù)組第一維 可不指定形參數(shù)組名是地址變量 例求學(xué)生的平均成績 includefloataverage intstu 10 intn voidmain intscore 10 i floatav printf Input10scores n for i 0 i 10 i scanf d floataverage intstu 10 intn inti floatav total 0 for i 0 i n i total stu i av total n returnav 實(shí)參用數(shù)組名 形參用數(shù)組定義 intstu 例數(shù)組元素與數(shù)組名作函數(shù)參數(shù)比較 includevoidswap2 intx inty intz z x x y y z main inta 2 1 2 swap2 a 0 a 1 printf a 0 d na 1 d n a 0 a 1 值傳遞 includevoidswap2 intx intz z x 0 x 0 x 1 x 1 z main inta 2 1 2 swap2 a printf a 0 d na 1 d n a 0 a 1 地址傳遞 例數(shù)組元素與數(shù)組名作函數(shù)參數(shù)比較 例數(shù)組排序 簡單選擇排序 9 49 i 0 例數(shù)組排序 簡單選擇排序 13 68 i 1 i 8 例數(shù)組排序 簡單選擇排序 例求二維數(shù)組中最大元素值 intmax value intarray 3 4 inti j k max max array 0 0 for i 0 imax max array i j return max main inta 3 4 1 3 5 7 2 4 6 8 15 17 34 12 printf maxvalueis d n max value a 例求二維數(shù)組中各行元素之和 get sum row intx 3 intresult introw intcol inti j for i 0 i row i result i 0 for j 0 j col j result i x i j main inta 2 3 3 6 9 1 4 7 intsum row 2 row 2 col 3 i get sum row a sum row row col for i 0 i row i printf Thesumofrow d d n i 1 sum row i 18 12 6 8變量的存儲(chǔ)屬性概述變量是對(duì)程序中數(shù)據(jù)的存儲(chǔ)空間的抽象 編譯或函數(shù)調(diào)用時(shí)為其分配內(nèi)存單元 10 程序中使用變量名對(duì)內(nèi)存操作 變量的屬性數(shù)據(jù)類型 變量所持有的數(shù)據(jù)的性質(zhì) 操作屬性 存儲(chǔ)屬性存儲(chǔ)器類型 寄存器 靜態(tài)存儲(chǔ)區(qū) 動(dòng)態(tài)存儲(chǔ)區(qū)生存期 變量在某一時(shí)刻存在 靜態(tài)變量與動(dòng)態(tài)變量作用域 變量在某區(qū)域內(nèi)有效 局部變量與全局變量變量的存儲(chǔ)類型auto 自動(dòng)型register 寄存器型static 靜態(tài)型extern 外部型變量定義格式 存儲(chǔ)類型 數(shù)據(jù)類型變量表 6 8變量的存儲(chǔ)屬性概述變量是對(duì)程序中數(shù)據(jù)的存儲(chǔ)空間的抽象 如 intsum autointa b c registerinti staticfloatx y 局部變量與全局變量局部變量 內(nèi)部變量定義 在函數(shù)內(nèi)定義 只在本函數(shù)內(nèi)有效說明 main中定義的變量只在main中有效不同函數(shù)中同名變量 占不同內(nèi)存單元形參屬于局部變量可定義在復(fù)合語句中有效的變量局部變量可用存儲(chǔ)類型 autoregisterstatic 默認(rèn)為auto 全局變量 外部變量定義 在函數(shù)外定義 可為本文件所有函數(shù)共用有效范圍 從定義變量的位置開始到本源文件結(jié)束 及有extern說明的其它源文件 應(yīng)盡量少使用全局變量 因?yàn)?全局變量在程序全部執(zhí)行過程中占用存儲(chǔ)單元降低了函數(shù)的通用性 可靠性 可移植性降低程序清晰性 容易出錯(cuò) 定義說明次數(shù) 只能1次可說明多次位置 所有函數(shù)之外函數(shù)內(nèi)或函數(shù)外分配內(nèi)存 分配內(nèi)存 可初始化不分配內(nèi)存 不可初始化 外部變量說明 extern數(shù)據(jù)類型變量表 外部變量定義與外部變量說明不同 若外部變量與局部變量同名 則外部變量被屏蔽 外部變量可用存儲(chǔ)類型 缺省或static floatmax min floataverage floatarray intn inti floatsum array 0 max min array 0 for i 1 imax max array i elseif array i min min array i sum array i return sum n main inti floatave score 10 Input ave average score 10 printf max 6 2f nmin 6 2f naverage 6 2f n max min ave externcharc1 c2 externcharc1 c2 運(yùn)行結(jié)果 max 13 externinta b intmax intz z a b a b return z main printf max d max inta 13 b 8 運(yùn)行結(jié)果 max 8 inti main voidprt for i 0 i 5 i prt voidprt for i 0 i 5 i printf c printf n 例外部變量副作用 運(yùn)行結(jié)果 動(dòng)態(tài)變量與靜態(tài)變量存儲(chǔ)方式靜態(tài)存儲(chǔ) 程序運(yùn)行期間分配固定存儲(chǔ)空間動(dòng)態(tài)存儲(chǔ) 程序運(yùn)行期間根據(jù)需要?jiǎng)討B(tài)分配存儲(chǔ)空間內(nèi)存用戶區(qū) 生存期靜態(tài)變量 從程序開始執(zhí)行到程序結(jié)束動(dòng)態(tài)變量 從包含該變量定義的函數(shù)開始執(zhí)行至函數(shù)執(zhí)行結(jié)束 變量存儲(chǔ)類型 局部變量默認(rèn)為auto型register型變量個(gè)數(shù)受限 且不能為long double float型局部static變量具有全局壽命和局部可見性局部static變量具有可繼承性extern不是變量定義 可擴(kuò)展外部變量作用域 例文件file1 cinta main f2 f1 f1 autointb f2 f2 staticintc 例auto變量的作用域 main intx 1 voidprt void intx 3 prt printf 2ndx d n x printf 1stx d n x voidprt void intx 5 printf 3thx d n x 運(yùn)行結(jié)果 3thx 52ndx 31stx 1 main voidincrement void increment increment increment voidincrement void intx 0 x printf d n x 例局部靜態(tài)變量值具有可繼承性 運(yùn)行結(jié)果 111 main voidincrement void increment increment increment voidincrement void staticintx 0 x printf d n x 運(yùn)行結(jié)果 123 例變量的壽命與可見性 includeinti 1 main staticinta registerintb 10 intc 0 printf MAIN n printf i da d b dc d n i a b c c c 8 other printf MAIN n printf i da d b dc d n i a b c i i 10 other other staticinta 2 staticintb intc 10 a a 2 i i 32 c c 5 printf OTHER n printf i da d b dc d n i a b c b a Main i 1a 0b 10c 0 Other i 33a 4b 0c 15 Main i 33a 0b 10c 8 Other i 75a 6b 4c 15 8 4 33 15 4 43 6 75 15 6 main voidgx gy externintx y printf 1 x d ty d n x y y 246 gx gy voidgx externintx y x 135 printf 2 x d ty d n x y intx y voidgy printf 3 x d ty d n x y 例用extern擴(kuò)展外部變量作用域 運(yùn)行結(jié)果 1 x 0y 02 x 135y 2463 x 135y 246 例引用其它文件中的外部變量 例引用其它文件中的變量 輸出a b和a的m次方- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 素質(zhì) 編程 湖南大學(xué) 語言 課件 第六
鏈接地址:http://italysoccerbets.com/p-6152887.html