




已閱讀5頁(yè),還剩87頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
模塊化程序設(shè)計(jì)基本思想 將一個(gè)大的程序按功能分割成一些小模塊 特點(diǎn) 各模塊相對(duì)獨(dú)立 功能單一 結(jié)構(gòu)清晰 接口簡(jiǎn)單控制了程序設(shè)計(jì)的復(fù)雜性提高元件的可靠性縮短開發(fā)周期避免程序開發(fā)的重復(fù)勞動(dòng)易于維護(hù)和功能擴(kuò)充 第六章函數(shù) C是模塊化程序設(shè)計(jì)語(yǔ)言 C程序結(jié)構(gòu) C是函數(shù)式語(yǔ)言必須有且只能有一個(gè)名為main的主函數(shù)C程序的執(zhí)行總是從main函數(shù)開始 在main中結(jié)束函數(shù)不能嵌套定義 可以嵌套調(diào)用 例 在C程序中 函數(shù)既可以嵌套定義 也可以嵌套調(diào)用 函數(shù)分類從用戶角度標(biāo)準(zhǔn)函數(shù) 庫(kù)函數(shù) 由系統(tǒng)提供用戶自定義函數(shù)從函數(shù)形式無(wú)參函數(shù)有參函數(shù) 使用庫(kù)函數(shù)應(yīng)注意 1 函數(shù)功能2 函數(shù)參數(shù)的數(shù)目和順序 及各參數(shù)意義和類型3 函數(shù)返回值意義和類型4 需要使用的包含文件 Ch7 201 c 6 1函數(shù)一 函數(shù)的定義一般格式 合法標(biāo)識(shí)符 函數(shù)返回值類型缺省int型無(wú)返回值void 函數(shù)體 例有參函數(shù) 現(xiàn)代風(fēng)格 intmax intx inty intz z x y x y return z 例無(wú)參函數(shù)printstar printf n 或printstar void printf n 返回語(yǔ)句形式 return 表達(dá)式 或return表達(dá)式 或return 功能 使程序控制從被調(diào)用函數(shù)返回到調(diào)用函數(shù)中 同時(shí)把返值帶給調(diào)用函數(shù)說(shuō)明 函數(shù)中可有多個(gè)return語(yǔ)句若無(wú)return語(yǔ)句 遇 時(shí) 自動(dòng)返回調(diào)用函數(shù)若函數(shù)類型與return語(yǔ)句中表達(dá)式值的類型不一致 按前者為準(zhǔn) 自動(dòng)轉(zhuǎn)換 函數(shù)調(diào)用轉(zhuǎn)換void型函數(shù) 例無(wú)返回值函數(shù)voidsx inty inttemp temp x x y y temp 例 編寫程序 輸入一個(gè)正整數(shù)n 求下列算式的值 要求定義和調(diào)用函數(shù)fact k 計(jì)算k的階乘 函數(shù)返回值的類型是double 2006年春試題 doublefact intk doubles 0 inti t 1 for i 1 i k i t t i s s 1 0 t returns 二 函數(shù)的調(diào)用調(diào)用形式函數(shù)名 實(shí)參表 說(shuō)明 實(shí)參與形參個(gè)數(shù)相等 類型一致 按順序一一對(duì)應(yīng)實(shí)參表求值順序 因系統(tǒng)而定 TurboC自右向左 includemain intn doublesum scanf d 調(diào)用方式函數(shù)語(yǔ)句 例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 main inti 2 j 2 p p f i j printf d p intf inta intb intc if a b c 1 elseif a b c 0 elsec 1 return c 例參數(shù)求值順序 運(yùn)行結(jié)果 0 調(diào)用函數(shù)語(yǔ)句1 主調(diào)函數(shù) 主調(diào)函數(shù) Return語(yǔ)句或最后一個(gè) 執(zhí)行函數(shù)調(diào)用的內(nèi)涵 1 把實(shí)參的值傳給形參 2 把控制語(yǔ)句傳給被調(diào)函數(shù) 也就是說(shuō)程序的執(zhí)行由主調(diào)函轉(zhuǎn)到被調(diào)函數(shù) 3 在函數(shù)中執(zhí)行return語(yǔ)句 將返回值帶回到主調(diào)函數(shù) 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 三 函數(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 說(shuō)明1 實(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)存釋放 形參與實(shí)參形式參數(shù) 定義函數(shù)時(shí)函數(shù)名后面括號(hào)中的變量名實(shí)際參數(shù) 調(diào)用函數(shù)時(shí)函數(shù)名后面括號(hào)中的表達(dá)式 說(shuō)明2 1 形參只有在函數(shù)調(diào)用時(shí)才分配存儲(chǔ)單元 調(diào)用結(jié)束后 釋放所分配的單元 2 實(shí)參可以是常量 變量 表達(dá)式 總之要有確定的值 當(dāng)函數(shù)調(diào)用時(shí) 將實(shí)參的值傳遞給形參 若是數(shù)組名 則傳送的是數(shù)組的首地址 3 被調(diào)函數(shù)中 形參類型必須指定 以便分配存儲(chǔ)單元 4 實(shí)參 形參的數(shù)據(jù)類型一致 賦值要兼容 順序要一致 5 若被調(diào)函數(shù)類型為非整形 要在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)作原形聲明或在主調(diào)函數(shù)之前定義 6 實(shí)參對(duì)形參的數(shù)據(jù)傳送是值傳送 也是單向傳送 當(dāng)被調(diào)函數(shù)的形參發(fā)生變化時(shí) 并不改變主調(diào)函數(shù)實(shí)參的值 例計(jì)算x的立方 includefloatcube floatx return x x x main floata product printf Pleaseinputvalueofa scanf f x 1 2 1 2 1 728 1 參數(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 s n s printf x d ty d n x y swap inta intb inttemp temp a a b b temp 函數(shù)說(shuō)明對(duì)被調(diào)用函數(shù)要求 必須是已存在的函數(shù)庫(kù)函數(shù) include用戶自定義函數(shù) 函數(shù)類型說(shuō)明函數(shù)說(shuō)明一般形式 函數(shù)類型函數(shù)名 形參類型 形參名 或函數(shù)類型函數(shù)名 作用 告訴編譯系統(tǒng)函數(shù)類型 參數(shù)個(gè)數(shù)及類型 以便檢驗(yàn)函數(shù)定義與函數(shù)說(shuō)明不同函數(shù)說(shuō)明位置 程序的數(shù)據(jù)說(shuō)明部分 函數(shù)內(nèi)或外 下列情況下 可不作函數(shù)說(shuō)明若函數(shù)返值是char或int型 系統(tǒng)自動(dòng)按int型處理被調(diào)用函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前有些系統(tǒng) 如BorlandC 要求函數(shù)說(shuō)明指出函數(shù)返值類型和形參類型 并且對(duì)void和int型函數(shù)也要進(jìn)行函數(shù)說(shuō)明 例函數(shù)說(shuō)明舉例 二 地址傳遞方式 函數(shù)調(diào)用時(shí) 將數(shù)據(jù)的存儲(chǔ)地址作為參數(shù)傳遞給形參特點(diǎn) 形參與實(shí)參占用同樣的存儲(chǔ)單元 雙向 傳遞實(shí)參和形參必須是地址常量或變量方法有兩種指針作函數(shù)的參數(shù)數(shù)組作函數(shù)的參數(shù) 1 指針作函數(shù)的參數(shù) 1 用指針 地址 作函數(shù)參數(shù) 可以實(shí)現(xiàn) 通過(guò)被調(diào)用的函數(shù)改變主調(diào)函數(shù)中變量的值 的目的 2 使用指針作為函數(shù)參數(shù)可以在調(diào)用一個(gè)函數(shù)時(shí)得到多個(gè)由被調(diào)函數(shù)改變了的值 ch9 3 c s p1 int p2 intp p p1 p1 p2 p2 p main inta b scanf d d 例交換兩個(gè)數(shù) 例如 有一數(shù)組有10個(gè)元素 要求輸出其中最大和最小的元素值 defineN10main voidmax min intarr int pt1 int pt2 intn intarray N 1 8 10 2 5 0 7 15 4 5 p1 p2 a b p1 函數(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)用 說(shuō)明C編譯系統(tǒng)對(duì)遞歸函數(shù)的自調(diào)用次數(shù)沒有限制每調(diào)用函數(shù)一次 在內(nèi)存堆棧區(qū)分配空間 用于存放函數(shù)變量 返回值等信息 所以遞歸次數(shù)過(guò)多 可能引起堆棧溢出 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 例1 函數(shù)f定義如下 執(zhí)行語(yǔ)句 m f 5 后 m的值應(yīng)為 intf intk if k 0 k 1 return1 elsereturnf k 1 f k 2 A 3B 8C 5D 13 例2 對(duì)于以下遞歸函數(shù)f 調(diào)用函數(shù)f 2 1 2 3 的輸出結(jié)果是 Voidf intn chara charb charc if n 1 printf c c a b else f n 1 a c b printf c c a b f n 1 c b a A 1 1 3 3 2 B 3 2 1 2 1 3 C 1 3 3 2 1 2 D 1 3 1 2 3 2 6 2函數(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é)生的平均成績(jī) 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ù)組排序 簡(jiǎn)單選擇排序 9 49 i 0 例數(shù)組排序 簡(jiǎn)單選擇排序 13 68 i 1 i 8 例數(shù)組排序 簡(jiǎn)單選擇排序 例求二維數(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 幾點(diǎn)說(shuō)明 1 數(shù)組名作形 實(shí)參數(shù)時(shí) 應(yīng)分別在主 被調(diào)函數(shù)中對(duì)其聲明2 形 實(shí)參數(shù)的數(shù)組類型要一致 大小一般相等 以保證數(shù)據(jù)的全部傳送 3 當(dāng)形參數(shù)組大小未指定時(shí) 用一實(shí)參將數(shù)組長(zhǎng)度傳遞給形參以便對(duì)數(shù)組進(jìn)行操作 4 數(shù)組名作參數(shù)時(shí) 傳遞的是地址 對(duì)形參數(shù)組的操作實(shí)際上也是對(duì)實(shí)參數(shù)組的操作 6 2 2字符串指針作函數(shù)參數(shù) 將一個(gè)字符串從一個(gè)函數(shù)傳遞到另一個(gè)函數(shù) 可以采用地址傳遞的辦法 即將字符數(shù)組名作參數(shù)或用指向字符串的指針變量作參數(shù) 在被調(diào)用的函數(shù)中可以改變字符串的內(nèi)容 在主調(diào)函數(shù)中可以得到改變了的字符串 voidcopy string from to charfrom to inti 0 while from i 0 to i from i i to i 0 main chara Iamateacher charb youareastudent printf string a s nstring b s n a b copy string a b printf nstring a s nstring b s n a b 1 形參和實(shí)參都用用字符數(shù)組作參數(shù) 程序 voidcopy string from to char from to for from 0 from to to from to 0 main chara Iamateacher charb youareastudent printf string a s nstring b s n a b copy string a b printf nstring a s nstring b s n a b 2 形參用字符指針變量 實(shí)參用數(shù)組名 另外形參和實(shí)參都用字符指針 以及形參用字符數(shù)組名 實(shí)參用字符指針在10 3 2中已經(jīng)講過(guò) 不再重復(fù) 3 copy string函數(shù)的簡(jiǎn)化 6 3函數(shù)指針 一個(gè)函數(shù)包括一組指令序列 存儲(chǔ)在某一段內(nèi)存中 這段內(nèi)存空間的起始地址稱為函數(shù)的入口地址稱函數(shù)入口地址為函數(shù)的指針 函數(shù)名代表函數(shù)的入口地址可以定義一個(gè)指針變量 其值等于該函數(shù)的入口地址 指向這個(gè)函數(shù) 這樣通過(guò)這個(gè)指針變量也能調(diào)用這個(gè)函數(shù) 這種指針變量稱為指向函數(shù)的指針變量 定義指向函數(shù)的指針變量的一般形式為 類型標(biāo)識(shí)符 指針變量名 例 int p 指針變量p可以指向一個(gè)整型函數(shù) float q 指針變量q可以指向一個(gè)浮點(diǎn)型函數(shù) 下一頁(yè) 上一頁(yè) 剛定義的指向函數(shù)的指針變量 亦象其它指針變量一樣要賦以地址值才能引用 當(dāng)將某個(gè)函數(shù)的入口地址賦給指向函數(shù)的指針變量 就可用該指針變量來(lái)調(diào)用所指向的函數(shù)給函數(shù)指針賦初值 將函數(shù)名 函數(shù)的入口地址值 賦給指針變量例如intm p intmax inta intb 則可以p max p指向函數(shù)max 指針調(diào)用函數(shù)的一般形式為 指針變量 實(shí)參表 如上例 m p 12 22 比較m max 12 22 下一頁(yè) 上一頁(yè) 用函數(shù)指針調(diào)用函數(shù)是間接調(diào)用 沒有參數(shù)類型說(shuō)明 C編譯系統(tǒng)也無(wú)法進(jìn)行類型檢查 因此 在使用這種形式調(diào)用函數(shù)時(shí)要特別小心 實(shí)參一定要和指針?biāo)负瘮?shù)的形參類型一致 函數(shù)指針可以作為函數(shù)參數(shù) 此時(shí) 當(dāng)函數(shù)指針每次指向不同的函數(shù)時(shí) 可執(zhí)行不同的函數(shù)來(lái)完成不同的功能 下一頁(yè) 上一頁(yè) 注意 例函數(shù)max 用來(lái)求一維數(shù)組的元素的最大值 在主調(diào)函數(shù)中用函數(shù)名調(diào)用該函數(shù)與用函數(shù)指針調(diào)用該函數(shù)來(lái)實(shí)現(xiàn) 下一頁(yè) 上一頁(yè) include stdio h defineM8main floatsumf sump floata M 11 2 3 4 5 5 69 7 80 float p 定義指向函數(shù)的指針p floatmax floata intn 函數(shù)聲明 p max 函數(shù)名 函數(shù)入口地址 賦給指針p sump p a M 用指針方式調(diào)用函數(shù) sumf max a M 用函數(shù)名調(diào)用max 函數(shù) printf sump 2f n sump printf sumf 2f n sumf floatmax floata intn intk floats s a 0 for k 0 k n k if s a k s a k returns 下一頁(yè) 上一頁(yè) 程序運(yùn)行結(jié)果 sump 80 00sumf 80 00 1 定義一個(gè)指向函數(shù)的指針變量 形如 float p 2 為函數(shù)指針賦值 格式如下 p 函數(shù)名 注意 賦值時(shí)只需給出函數(shù)名 不要帶參數(shù) 3 通過(guò)函數(shù)指針調(diào)用函數(shù) 調(diào)用格式如下 s p 實(shí)參 上一頁(yè) 指向函數(shù)的指針的使用步驟 返回 函數(shù)指針的作用 用函數(shù)指針變量作函數(shù)的參數(shù)函數(shù)的參數(shù)既可以是變量 常量 指針變量 數(shù)組名 數(shù)組指針變量 也可以是函數(shù)指針或函數(shù)指針變量 以便實(shí)現(xiàn)函數(shù)地址的傳送 達(dá)到用某個(gè)函數(shù)調(diào)用其他的函數(shù) 函數(shù)的調(diào)用方式 1 直接使用函數(shù)名2 間接調(diào)用 通過(guò)函數(shù)指針 0 Y X h f b f a n h b a f a 共n等份 f x h b a n f a h f a n 1 h s 1 x2 floatf1 x floatx floatf f 1 x x return f floatf3 x floatx floatf f x 1 x x return f 1 x x2 x3 floatf2 x floatx floatf f 1 x x x x x x return f 多層間接調(diào)用 即用函數(shù)指針變量作函數(shù)的參數(shù) 在調(diào)用一個(gè)通用函數(shù)時(shí) 便于處理多種情況 以便選用各種專用的函數(shù) 這樣做的好處是使得程序通用性強(qiáng) 結(jié)構(gòu)模塊化程度高 例 求不同被積函數(shù)的積分 1 x2 floatintegral fun a b float fun a b floats h y intn i s fun a fun b 2 0 n 100 h b a n for i 1 i n i s s fun a i h y s h return y 梯形法求解定積分 main floatf1 f2 f3 integral floaty1 y2 y3 y1 integral f1 0 0 1 0 y2 integral f2 0 0 2 0 y3 integral f3 0 0 3 5 printf y1 6 2f ny2 6 2f ny3 6 2f n y1 y2 y3 S h f a f b 2 f a h f a 2h f a n 1 h 由上述例子可以看出 首先函數(shù)integral fun a b 是用梯形法求積分的通用函數(shù) 它適用于各種被積函數(shù) f1 f2 f3為三個(gè)不同的被積函數(shù) 如果要用integral函數(shù)求解其它的被積函數(shù)的定積分 則只要添加相應(yīng)的被積函數(shù)的構(gòu)造函數(shù) 而無(wú)須改寫或重新編寫integral函數(shù) 在主調(diào)函數(shù)中直接調(diào)用integral函數(shù) 當(dāng)然要提供相應(yīng)的參數(shù) 即可 如果把被積函數(shù)的構(gòu)造和求積分的函數(shù)寫在一起 那就不具備通用性了 注意 main 函數(shù)中的floatf1 f2 f3 integral 語(yǔ)句不能省略 這一句告訴系統(tǒng)f1 f2 f3是函數(shù) 而不是變量 6 4指針型函數(shù) 返回指針的函數(shù) 下一頁(yè) 上一頁(yè) 指針函數(shù) 是指返回值為指針的函數(shù)指針函數(shù)的定義形式 類型標(biāo)示符 函數(shù)名 參數(shù) 例如 int fun inta intb 函數(shù)體語(yǔ)句 在函數(shù)體中有返回指針或地址的語(yǔ)句 形如 return 并且返回值的類型要與函數(shù)類型一致 例分析如下程序 main inta b p int max intx inty scanf d d int max intx inty ifx y return 下一頁(yè) 上一頁(yè) 6 5命令行參數(shù) 在操作系統(tǒng)命令狀態(tài)下 可以輸入程序或命令使其運(yùn)行 稱命令行狀態(tài) 輸入的命令 或運(yùn)行程序 及該命令 或程序 所需的參數(shù)稱為命令行參數(shù) 如 copyfdfscopy是文件拷貝命令 fd fs是命令行參數(shù) main函數(shù)是可以有參數(shù)的 但與普通函數(shù)不同 帶形參的main 函數(shù)的一般形式是 main intargc char argv 形參argc記錄命令行中字符串的個(gè)數(shù) argv是一個(gè)字符型指針數(shù)組 每一個(gè)元素順序指向命令行中的一個(gè)字符串 下一頁(yè) 上一頁(yè) 1 main 函數(shù)的形參與實(shí)參 main 函數(shù)由系統(tǒng)自動(dòng)調(diào)用 而不是被程序內(nèi)部的其它函數(shù)調(diào)用 main 函數(shù)所需的實(shí)參不可能由程序內(nèi)部得到 而是由系統(tǒng)傳送 main 函數(shù)所需的實(shí)參與形參的傳遞方式也與一般函數(shù)的參數(shù)傳遞不同 實(shí)參是在命令行與程序名一同輸入 程序名和各實(shí)際參數(shù)之間都用空格分隔 格式為 執(zhí)行程序名參數(shù)1參數(shù)2 參數(shù)n形參argc為命令行中參數(shù)的個(gè)數(shù) 包括執(zhí)行程序名 其值大于或等于1 而不是象普通C語(yǔ)言函數(shù)一樣接受第一個(gè)實(shí)參 形參argv是一個(gè)指針數(shù)組 其元素依次指向命令行中以空格分開的各字符串 即 第一個(gè)指針argv 0 指向程序名字符串 argv 1 指向參數(shù)1 argv 2 指向參數(shù)2 argv n 指向參數(shù)n 下一頁(yè) 上一頁(yè) 2 命令行參數(shù)的傳遞示例例8 11分析下列程序 指出其執(zhí)行結(jié)果 該程序命名為exam c 經(jīng)編譯連接后生成的可執(zhí)行程序?yàn)閑xam exe includemain intargc char argv inti 0 printf argc d n argc while argc 1 printf n參數(shù) d s i argv i argc argv 下一頁(yè) 上一頁(yè) 輸出結(jié)果 argc 4參數(shù)0 exam參數(shù)1 Turbo c參數(shù)2 C 參數(shù)3 Vc程序開始運(yùn)行后 系統(tǒng)將命令行中字符串個(gè)數(shù)送argc 將四個(gè)字符串實(shí)參 exam Turbo c C Vc的首地址分別傳給字符指針數(shù)組元素argv 0 argv 1 argv 2 argv 3 若運(yùn)行該程序時(shí)的命令行輸入的是 examTurbo cC Vc 上一頁(yè) 返回 6 6變量的存儲(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ù)類型變量表 概述變量是對(duì)程序中數(shù)據(jù)的存儲(chǔ)空間的抽象 如 intsum autointa b c registerinti staticfloatx y 局部變量與全局變量局部變量 內(nèi)部變量定義 在函數(shù)內(nèi)定義 只在本函數(shù)內(nèi)有效說(shuō)明 main中定義的變量只在main中有效不同函數(shù)中同名變量 占不同內(nèi)存單元形參屬于局部變量可定義在復(fù)合語(yǔ)句中有效的變量局部變量可用存儲(chǔ)類型 autoregisterstatic 默認(rèn)為auto 全局變量 外部變量定義 在函數(shù)外定義 可為本文件所有函數(shù)共用有效范圍 從定義變量的位置開始到本源文件結(jié)束 及有extern說(shuō)明的其它源文件 應(yīng)盡量少使用全局變量 因?yàn)?全局變量在程序全部執(zhí)行過(guò)程中占用存儲(chǔ)單元降低了函數(shù)的通用性 可靠性 可移植性降低程序清晰性 容易出錯(cuò) 定義說(shuō)明次數(shù) 只能1次可說(shuō)明多次位置 所有函數(shù)之外函數(shù)內(nèi)或函數(shù)外分配內(nèi)存 分配內(nèi)存 可初始化不分配內(nèi)存 不可初始化 外部變量說(shuō)明 extern數(shù)據(jù)類型變量表 外部變量定義與外部變量說(shuō)明不同 若外部變量與局部變量同名 則外部變量被屏蔽 外部變量可用存儲(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é)束 1 auto變量函數(shù)內(nèi)部無(wú)static聲明的局部量均為動(dòng)態(tài)存儲(chǔ)類別 被分配在動(dòng)態(tài)區(qū) 存儲(chǔ)類別為自動(dòng)時(shí) 聲明符auto可省 自動(dòng)變量被分配在動(dòng)態(tài)區(qū) 未賦初值時(shí) 其值未定義 每次調(diào)用重新賦值 intf inta autointb c 3 定義b c為自動(dòng)變量 又如 autointb c 3 intb c 3 兩者等價(jià) 2 用static聲明局部變量若希望函數(shù)調(diào)用結(jié)束后 其值不消失 下次調(diào)用函數(shù)時(shí)繼續(xù)使用 則用static對(duì)變量加以聲明 例考察靜態(tài)局部變量的值f inta autointb 0 staticintc 3 b b 1 c c 1 return a b c main inta 2 i for i 0 i 3 i printf d f a 運(yùn)行結(jié)果 789 靜態(tài)局部變量的聲明 1 分配在靜態(tài)區(qū) 程序運(yùn)行結(jié)束釋放存儲(chǔ)單元 2 僅開始時(shí)賦初值一次 未賦初值時(shí)為0 以后每次調(diào)用函數(shù)時(shí) 變量不再賦值 前次操作的結(jié)果被保留 3 局部動(dòng)態(tài)變量若未賦初值 其值是不確定的 所分配的存儲(chǔ)單元是不固定的 而局部靜態(tài)變量未賦初值 其值為0 字符型變量的值為 0 所分配的存儲(chǔ)單元是固定的 4 靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后雖存在 但其它函數(shù)不能引用它 使用局部靜態(tài)變量有如下幾種情況 1 需要保留上一次調(diào)用結(jié)束時(shí)的值 2 初始化后變量只被引用而不改變其值 則用靜態(tài)局部變量較方便 缺點(diǎn) 從程序運(yùn)行開始到結(jié)束一直占用內(nèi)存 這樣會(huì)浪費(fèi)系統(tǒng)資源 例打印1 5的階乘值intfac intn staticintf 1 f f n return f main inti for i 1 i 5 i printf d d n i fac i 問(wèn)題 1 將static改為auto2 其它函數(shù)能否使用局部靜態(tài)變量 f inta autointb 0 staticintc 3 b b 1 c c 1 printf f main 026ff 01famain a ffd8 a 2main i ffda i 252f a ffd6 a 2f b ffd0 b 1f c 0194 c 47f a ffd6 a 2f b ffd0 b 1f c 0194 c 58f a ffd6 a 2f b ffd0 b 1f c 0194 c 69 3 register變量CPU內(nèi)部有寄存器組可用來(lái)存放數(shù)據(jù) 若把數(shù)據(jù)聲明為寄存器類型 則將該類型的數(shù)據(jù)存放在寄存器中 其優(yōu)點(diǎn)在于 減少數(shù)據(jù)與內(nèi)存之間的交換頻率 提高程序的效率和速度 例使用寄存器變量intfac intn registerinti f 1 for i 1 i n i f f i return f main inti for i 1 i 5 i printf d d n i fac i 運(yùn)行結(jié)果 1 12 23 64 245 120 4 用extern聲明外部變量外部變量也稱全局變量 在函數(shù)外部定義 其作用域是從變量的定義處開始 到本程序文件的未尾 5 用static聲明外部變量若使全局變量只限于定義它的文件中的函數(shù)引用 而不讓其它文件中的函數(shù)引用 需要用static加以說(shuō)明 注意 此種說(shuō)法只在工程方法中有效 而在文件包含中則不起作用 關(guān)于作用域和生成期的概念用圖例說(shuō)明變量的作用域和生成期的關(guān)系 關(guān)于作用域和生成期的概念用圖例說(shuō)明變量的作用域和生成期的關(guān)系 變量存儲(chǔ)類型小結(jié) 局部變量默認(rèn)為auto型register型變量個(gè)數(shù)受限 且不能為long double float型局部static變量具有全局壽命和局部可見性局部static變量
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年陽(yáng)江市陽(yáng)春市三上數(shù)學(xué)期末調(diào)研試題含解析
- 自考行政管理文化產(chǎn)業(yè)題及答案
- 護(hù)理理論在實(shí)際中的應(yīng)用試題及答案
- 執(zhí)業(yè)藥師的法律法規(guī)理解試題及答案
- 精細(xì)化復(fù)習(xí)策略2025年執(zhí)業(yè)醫(yī)師考試試題及答案
- 2025年執(zhí)業(yè)護(hù)士考試產(chǎn)科護(hù)理知識(shí)試題及答案
- 現(xiàn)代化進(jìn)程中的文化沖突試題及答案
- 行政管理備考攻略試題及答案
- 主管護(hù)師考試可行性分析試題及答案
- 2025年行政管理運(yùn)作理論試題及答案
- 古生物基礎(chǔ)知識(shí)
- 2025年上海市16區(qū)初三語(yǔ)文一模試題匯編之古詩(shī)文閱讀(學(xué)生版)
- (2025)發(fā)展對(duì)象培訓(xùn)班考試試題及參考答案
- 2025年鄭州鐵路局招聘筆試參考題庫(kù)含答案解析
- 2025年國(guó)家衛(wèi)生健康委統(tǒng)計(jì)信息中心招聘1人管理單位筆試遴選500模擬題附帶答案詳解
- 2025年高考語(yǔ)文全國(guó)新高考Ⅰ卷作文解析及范文
- 基于質(zhì)譜技術(shù)的細(xì)胞成像研究
- 市場(chǎng)調(diào)查預(yù)測(cè)題庫(kù)+答案
- 2024年智能地鎖安裝與維護(hù)協(xié)議2篇
- 吉林省安全員-C證考試(專職安全員)題庫(kù)及答案
- 2024河北高考地理真題卷解析 課件
評(píng)論
0/150
提交評(píng)論