高素質(zhì)編程師湖南大學(xué)C語言課件第六章.ppt
《高素質(zhì)編程師湖南大學(xué)C語言課件第六章.ppt》由會員分享,可在線閱讀,更多相關(guān)《高素質(zhì)編程師湖南大學(xué)C語言課件第六章.ppt(56頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
第六章函數(shù) 6 1概述模塊化程序設(shè)計(jì)基本思想 將一個(gè)大的程序按功能分割成一些小模塊 特點(diǎn) 各模塊相對獨(dú)立 功能單一 結(jié)構(gòu)清晰 接口簡單控制了程序設(shè)計(jì)的復(fù)雜性提高元件的可靠性縮短開發(fā)周期避免程序開發(fā)的重復(fù)勞動易于維護(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ù)返回值類型缺省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í) 自動返回調(diào)用函數(shù)若函數(shù)類型與return語句中表達(dá)式值的類型不一致 按前者為準(zhǔn) 自動轉(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ù)相等 類型一致 按順序一一對應(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ù)說明對被調(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)自動按int型處理被調(diào)用函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前有些系統(tǒng) 如BorlandC 要求函數(shù)說明指出函數(shù)返值類型和形參類型 并且對void和int型函數(shù)也要進(jìn)行函數(shù)說明 例函數(shù)說明舉例 6 5函數(shù)參數(shù)及其傳遞方式形參與實(shí)參形式參數(shù) 定義函數(shù)時(shí)函數(shù)名后面括號中的變量名實(shí)際參數(shù) 調(diào)用函數(shù)時(shí)函數(shù)名后面括號中的表達(dá)式 例比較兩個(gè)數(shù)并輸出大者 main inta b c scanf d d 說明 實(shí)參必須有確定的值形參必須指定類型形參與實(shí)參類型一致 個(gè)數(shù)相同若形參與實(shí)參類型不一致 自動按形參類型轉(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ù)名后面括號中的變量名實(shí)際參數(shù) 調(diào)用函數(shù)時(shí)函數(shù)名后面括號中的表達(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ù)的存儲地址作為參數(shù)傳遞給形參特點(diǎn) 形參與實(shí)參占用同樣的存儲單元 雙向 傳遞實(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)對遞歸函數(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ù)組對應(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變量的存儲屬性概述變量是對程序中數(shù)據(jù)的存儲空間的抽象 編譯或函數(shù)調(diào)用時(shí)為其分配內(nèi)存單元 10 程序中使用變量名對內(nèi)存操作 變量的屬性數(shù)據(jù)類型 變量所持有的數(shù)據(jù)的性質(zhì) 操作屬性 存儲屬性存儲器類型 寄存器 靜態(tài)存儲區(qū) 動態(tài)存儲區(qū)生存期 變量在某一時(shí)刻存在 靜態(tài)變量與動態(tài)變量作用域 變量在某區(qū)域內(nèi)有效 局部變量與全局變量變量的存儲類型auto 自動型register 寄存器型static 靜態(tài)型extern 外部型變量定義格式 存儲類型 數(shù)據(jù)類型變量表 6 8變量的存儲屬性概述變量是對程序中數(shù)據(jù)的存儲空間的抽象 如 intsum autointa b c registerinti staticfloatx y 局部變量與全局變量局部變量 內(nèi)部變量定義 在函數(shù)內(nèi)定義 只在本函數(shù)內(nèi)有效說明 main中定義的變量只在main中有效不同函數(shù)中同名變量 占不同內(nèi)存單元形參屬于局部變量可定義在復(fù)合語句中有效的變量局部變量可用存儲類型 autoregisterstatic 默認(rèn)為auto 全局變量 外部變量定義 在函數(shù)外定義 可為本文件所有函數(shù)共用有效范圍 從定義變量的位置開始到本源文件結(jié)束 及有extern說明的其它源文件 應(yīng)盡量少使用全局變量 因?yàn)?全局變量在程序全部執(zhí)行過程中占用存儲單元降低了函數(shù)的通用性 可靠性 可移植性降低程序清晰性 容易出錯(cuò) 定義說明次數(shù) 只能1次可說明多次位置 所有函數(shù)之外函數(shù)內(nèi)或函數(shù)外分配內(nèi)存 分配內(nèi)存 可初始化不分配內(nèi)存 不可初始化 外部變量說明 extern數(shù)據(jù)類型變量表 外部變量定義與外部變量說明不同 若外部變量與局部變量同名 則外部變量被屏蔽 外部變量可用存儲類型 缺省或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é)果 動態(tài)變量與靜態(tài)變量存儲方式靜態(tài)存儲 程序運(yùn)行期間分配固定存儲空間動態(tài)存儲 程序運(yùn)行期間根據(jù)需要動態(tài)分配存儲空間內(nèi)存用戶區(qū) 生存期靜態(tài)變量 從程序開始執(zhí)行到程序結(jié)束動態(tài)變量 從包含該變量定義的函數(shù)開始執(zhí)行至函數(shù)執(zhí)行結(jié)束 變量存儲類型 局部變量默認(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.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuà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ì)者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 素質(zhì) 編程 湖南大學(xué) 語言 課件 第六
鏈接地址:http://m.appdesigncorp.com/p-6152887.html