C語(yǔ)言程序設(shè)計(jì)實(shí)例教程課件7_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)實(shí)例教程課件7_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)實(shí)例教程課件7_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)實(shí)例教程課件7_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)實(shí)例教程課件7_第5頁(yè)
已閱讀5頁(yè),還剩29頁(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)介

1、第7章 函 數(shù) 7.1 模塊化程序設(shè)計(jì)的概念 7.2 庫(kù)函數(shù)7.3 函數(shù)的定義和調(diào)用 7.4 函數(shù)的返回值及其類(lèi)型 7.5 函數(shù)調(diào)用時(shí)參數(shù)間的傳遞 7.6 函數(shù)的嵌套調(diào)用 7.7 函數(shù)的遞歸調(diào)用 7.8 局部變量和全局變量7.9 靜態(tài)存儲(chǔ)變量和動(dòng)態(tài)存儲(chǔ)變量 7.10 內(nèi)部函數(shù)和外部函數(shù)7.11 程序舉例 第7章 函 數(shù) 7.1 模塊化程序設(shè)計(jì)的概念 7.1 模塊化程序設(shè)計(jì)的概念 模塊化程序設(shè)計(jì),是將一個(gè)大型程序按照其功能分解成若干個(gè)相對(duì)獨(dú)立的功能模塊,然后再分別進(jìn)行設(shè)計(jì),最后把這些功能模塊按照層次關(guān)系進(jìn)行組裝?;舅枷胧恰白皂斚蛳隆⒅鸩角缶?。 C語(yǔ)言程序是一個(gè)函數(shù)式的程序結(jié)構(gòu),即C語(yǔ)言程序的

2、全部功能都是由函數(shù)實(shí)現(xiàn)的,而每個(gè)函數(shù)對(duì)應(yīng)一個(gè)獨(dú)立的模塊,通過(guò)函數(shù)間調(diào)用來(lái)實(shí)現(xiàn)程序的總體功能。如圖7.1所示,是一個(gè)程序中函數(shù)調(diào)用示意圖。7.1 模塊化程序設(shè)計(jì)的概念 模塊 在C語(yǔ)言中,函數(shù)分為主函數(shù)、庫(kù)函數(shù)、用戶自定義函數(shù)三種。程序的執(zhí)行由主函數(shù)開(kāi)始,然后調(diào)用其它函數(shù),最終返回主函數(shù)結(jié)束。 main函數(shù) a函數(shù) b函數(shù) c函數(shù) d函數(shù) e函數(shù)圖7.1 函數(shù)調(diào)用示意圖 在C語(yǔ)言中,函數(shù)分為主函數(shù)、庫(kù)函數(shù)、 7.2 庫(kù)函數(shù) C語(yǔ)言提供了豐富的標(biāo)準(zhǔn)函數(shù),即庫(kù)函數(shù)。 7.2.1 C語(yǔ)言常用庫(kù)函數(shù) 1) 數(shù)學(xué)函數(shù) 調(diào)用數(shù)學(xué)庫(kù)函數(shù)時(shí),要求程序在調(diào)用數(shù)學(xué)庫(kù)函數(shù)前應(yīng)包含下面的頭文件: # include ma

3、 7.2 庫(kù)函數(shù) C語(yǔ)言提供 2) 字符函數(shù)和字符串函數(shù) 調(diào)用字符函數(shù)時(shí),要求程序在調(diào)用字符函數(shù)前應(yīng)包含下面的頭文件: # include ctype.h 調(diào)用字符串函數(shù)時(shí),要求在源文件中應(yīng)包含下面的頭文件: # include string.h 2) 字符函數(shù)和字符串函數(shù) 3) 輸入輸出函數(shù) 調(diào)用輸入輸出函數(shù)時(shí),要求在源文件中應(yīng)包含下面的頭文件: # include stdio.h 4) 動(dòng)態(tài)分配函數(shù)和隨機(jī)函數(shù) 調(diào)用動(dòng)態(tài)分配函數(shù)和隨機(jī)函數(shù)時(shí),要求在源文件中應(yīng)包含下面的頭文件: # include stdlib.h 3) 輸入輸出函數(shù)7.2.2 標(biāo)準(zhǔn)庫(kù)函數(shù)的調(diào)用 前面講到,調(diào)用C語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù)

4、時(shí)必須在源程序中用include命令。 include命令的格式是: # include 或 # include 頭文件名7.2.2 標(biāo)準(zhǔn)庫(kù)函數(shù)的調(diào)用 前面7.3 函數(shù)的定義和調(diào)用 由用戶編寫(xiě)的函數(shù)稱為自定義函數(shù)。 7.3.1 函數(shù)的定義 函數(shù)定義的一般格式如下: 類(lèi)型說(shuō)明符 函數(shù)名(類(lèi)型名 形式參數(shù)1 , 類(lèi)型名 形式參數(shù)2 , ) /* 函數(shù)的首部 */ 說(shuō)明部分 /* 函數(shù)體 */ 語(yǔ)句部分 7.3 函數(shù)的定義和調(diào)用 由用戶編寫(xiě)的 7.3.2 函數(shù)的調(diào)用 1. 函數(shù)調(diào)用的一般形式 函數(shù)調(diào)用的一般形式為: 函數(shù)名(實(shí)參表) ; 如果是調(diào)用無(wú)參函數(shù),則實(shí)參表可以沒(méi)有,但括號(hào)不能省略。如果實(shí)參

5、表列包含多個(gè)實(shí)參,則各實(shí)參間用逗號(hào)隔開(kāi)。實(shí)參與形參的個(gè)數(shù)應(yīng)相等,類(lèi)型應(yīng)一致。實(shí)參與形參按順序?qū)?yīng),一一傳遞數(shù)據(jù)。 7.3.2 函數(shù)的調(diào)用 2. 函數(shù)調(diào)用的方式 按函數(shù)在程序中出現(xiàn)的位置來(lái)分,有3種函數(shù)調(diào)用方式。 1) 函數(shù)語(yǔ)句 函數(shù)語(yǔ)句的調(diào)用,是指把被調(diào)函數(shù)作為一個(gè)獨(dú)立的語(yǔ)句直接出現(xiàn)在主調(diào)函數(shù)中。 2) 函數(shù)表達(dá)式 被調(diào)函數(shù)出現(xiàn)在主調(diào)函數(shù)中的表達(dá)式中,這種表達(dá)式稱為函數(shù)表達(dá)式。在被調(diào)函數(shù)中,必須有一個(gè)函數(shù)返回值,返回主調(diào)函數(shù)以參加表達(dá)式的運(yùn)算。 2. 函數(shù)調(diào)用的方式 3) 函數(shù)參數(shù) 函數(shù)參數(shù)的調(diào)用,是指被調(diào)函數(shù)作為另一個(gè)函數(shù)的參數(shù)時(shí)的調(diào)用,而另一個(gè)函數(shù)則是被調(diào)函數(shù)的主調(diào)函數(shù)。嵌套調(diào)用,如圖7.

6、2所示。 main函數(shù) printf函數(shù) max函數(shù)圖7.2 函數(shù)嵌套調(diào)用 3) 函數(shù)參數(shù) main函數(shù) prin 3. 調(diào)用函數(shù)時(shí)的注意事項(xiàng) 調(diào)用函數(shù)時(shí),應(yīng)注意以下幾點(diǎn): (1) 被調(diào)函數(shù)必須是已存在的函數(shù),可以是自定義函數(shù),也可以是庫(kù)函數(shù)。 (2) 在主調(diào)函數(shù)中,要對(duì)被調(diào)函數(shù)先做聲明。 3. 調(diào)用函數(shù)時(shí)的注意事項(xiàng) (3) 如果被調(diào)函數(shù)的返回值為int類(lèi)型,則不管被調(diào)函數(shù)位置如何均不需要在主調(diào)函數(shù)中說(shuō)明。 關(guān)于函數(shù)聲明的一般形式為: 函數(shù)類(lèi)型 函數(shù)名(參數(shù)類(lèi)型1 , 參數(shù)類(lèi)型2) ; 或 函數(shù)類(lèi)型 函數(shù)名(參數(shù)類(lèi)型1 , 參數(shù)名1 , 參數(shù)類(lèi)型2 , 參數(shù)名2) ; (4) 如果被調(diào)用函數(shù)的

7、聲明放在源文件的開(kāi)頭,則該聲明對(duì)整個(gè)源文件都有效。 (5) 如果被調(diào)用函數(shù)的聲明是在調(diào)用函數(shù)定義的內(nèi)部,則該聲明僅對(duì)該調(diào)用函數(shù)有效。 (3) 如果被調(diào)函數(shù)的返回值為int (6) 在函數(shù)調(diào)用中,有下面幾種情況可以省略聲明: a. 如果調(diào)用函數(shù)和被調(diào)用函數(shù)是在同一個(gè)源文件中,而且被調(diào)用函數(shù)的定義是在調(diào)用函數(shù)之前。 b. 函數(shù)的返回值是整數(shù)或字符。 c. 所有被調(diào)用函數(shù)的聲明都是在源文件開(kāi)頭。 d. 如果被調(diào)用函數(shù)不是在源文件開(kāi)頭,而是在源文件中間且在所有函數(shù)之外某處被聲明時(shí),則在被聲明之后引用它時(shí),不必再聲明,但在被聲明之前引用它時(shí),需要對(duì)其進(jìn)行聲明。 (7) 如果調(diào)用函數(shù)和被調(diào)用函數(shù)的定義是在

8、同一源文件中,應(yīng)該先說(shuō)明或定義被調(diào)用函數(shù)。 (6) 在函數(shù)調(diào)用中,有下面幾種情況可以省略聲7.4 函數(shù)的返回值及其類(lèi)型 函數(shù)的返回值通過(guò)函數(shù)體內(nèi)的return語(yǔ)句實(shí)現(xiàn)。 return語(yǔ)句的格式如下: return 表達(dá)式 ; 或 return (表達(dá)式) ; 如果沒(méi)有返回值,格式中的左、右圓括號(hào)可以省略,即寫(xiě)為: return ;7.4 函數(shù)的返回值及其類(lèi)型 函數(shù)的7.5 函數(shù)調(diào)用時(shí)參數(shù)間的傳遞 函數(shù)之間的聯(lián)系,是通過(guò)調(diào)用函數(shù)時(shí)參數(shù)的傳遞及函數(shù)值的返回。 在定義函數(shù)時(shí),函數(shù)名后面圓括號(hào)內(nèi)的參數(shù)稱形式參數(shù)。 調(diào)用函數(shù)時(shí),函數(shù)名后面圓括號(hào)內(nèi)的參數(shù)為實(shí)參。7.5 函數(shù)調(diào)用時(shí)參數(shù)間的傳遞 函數(shù) 7.5

9、.1 變量、常量、數(shù)組元素作為函數(shù)參數(shù) 在函數(shù)調(diào)用時(shí),使用變量、常量或數(shù)組元素作為函數(shù)參數(shù)時(shí),將實(shí)參的值復(fù)制到形參相應(yīng)的存儲(chǔ)單元中,即形參和實(shí)參分別占用不同存儲(chǔ)單元,這種傳遞方式稱為“值傳遞”。 值傳遞的特點(diǎn)是單向傳遞,即只能把實(shí)參的值傳遞給形參,而形參值的任何變化都不會(huì)影響實(shí)參。 7.5.1 變量、常量、數(shù)組元素作為函數(shù)參數(shù) 7.5.2 數(shù)組名作為函數(shù)參數(shù) 數(shù)組名作為函數(shù)參數(shù)時(shí),不是值的單向傳遞,而是把實(shí)參數(shù)組的首地址傳給形參數(shù)組,這個(gè)兩個(gè)數(shù)組共用一段存儲(chǔ)單元,即實(shí)參數(shù)組名和形參數(shù)組名共同指向數(shù)組的第一個(gè)元素。 7.5.2 數(shù)組名作為函數(shù)參數(shù)7.6 函數(shù)的嵌套調(diào)用 C語(yǔ)言中的函數(shù)定義是互相獨(dú)

10、立的,函數(shù)和函數(shù)之間沒(méi)有從屬關(guān)系,一個(gè)函數(shù)既可以被其它函數(shù)調(diào)用,同時(shí)它也可以調(diào)用別的函數(shù),這就是函數(shù)的嵌套調(diào)用。 fun1main返回printffun2返回調(diào)用調(diào)用調(diào)用結(jié)束圖7.4 函數(shù)嵌套調(diào)用過(guò)程 7.6 函數(shù)的嵌套調(diào)用 C語(yǔ)言中的函數(shù)7.7 函數(shù)的遞歸調(diào)用 所謂遞歸,就是自己調(diào)用自己。 函數(shù)的遞歸調(diào)用有兩種形式: (1) 直接遞歸調(diào)用,即一個(gè)函數(shù)可直接調(diào)用該函數(shù)本身。 (2) 間接遞歸調(diào)用,即一個(gè)函數(shù)可間接地調(diào)用該函數(shù)本身。7.7 函數(shù)的遞歸調(diào)用 所謂遞歸,就是7.8 局部變量和全局變量 7.8.1 局部變量 在一個(gè)函數(shù)內(nèi)定義的變量稱為內(nèi)部變量,它只在本函數(shù)內(nèi)有效,而在其它函數(shù)內(nèi)不能使用

11、,故這些變量又稱為局部變量。 7.8.2 全局變量 在函數(shù)外部定義的變量稱為外部變量,外部變量是全局變量。全局變量的作用范圍為:從定義全局變量位置開(kāi)始到源程序結(jié)束。 全局變量可以在其作用范圍內(nèi)由其它函數(shù)所共用。 7.8 局部變量和全局變量 7.8.1 局部變量7.9 靜態(tài)存儲(chǔ)變量和動(dòng)態(tài)存儲(chǔ)變量 變量從變量值存在的時(shí)間(即時(shí)域,亦稱生存期)角度來(lái)分,可分為靜態(tài)存儲(chǔ)變量和動(dòng)態(tài)存儲(chǔ)變量。 7.9.1 靜態(tài)存儲(chǔ)變量 所謂靜態(tài)存儲(chǔ)變量是指在程序運(yùn)行期間分配固定的存儲(chǔ)空間的變量。靜態(tài)存儲(chǔ)變量的定義格式為: static 數(shù)據(jù)類(lèi)型名 變量名=初始化常數(shù)表達(dá)式7.9 靜態(tài)存儲(chǔ)變量和動(dòng)態(tài)存儲(chǔ)變量 7.9.2 動(dòng)

12、態(tài)存儲(chǔ)變量 所謂動(dòng)態(tài)存儲(chǔ)變量是在程序運(yùn)行期間根據(jù)需要進(jìn)行動(dòng)態(tài)的分配存儲(chǔ)變量,它是在程序執(zhí)行的某一時(shí)刻被動(dòng)態(tài)建立,在另一時(shí)刻被動(dòng)態(tài)撤消的一種變量。 動(dòng)態(tài)存儲(chǔ)變量有兩種:自動(dòng)(auto)變量和寄存器(register)變量。 7.9.2 動(dòng)態(tài)存儲(chǔ)變量 1. 自動(dòng)變量 自動(dòng)變量說(shuō)明的一般格為: auto 類(lèi)型名 變量名=初始表達(dá)式 , auto為自動(dòng)變量存儲(chǔ)類(lèi)別標(biāo)識(shí)符,auto可省略,系統(tǒng)默認(rèn)為auto。以前函數(shù)中所定義的變量大都是auto變量。 2. 寄存器變量 所謂寄存器變量,是指將變量的值保留在CPU(中央處理器)的寄存器內(nèi),它不占用內(nèi)存單元。程序運(yùn)行時(shí),可以直接訪問(wèn)寄存器內(nèi)的數(shù)據(jù),其速度比訪

13、問(wèn)內(nèi)存的數(shù)據(jù)快得多。 register 類(lèi)型標(biāo)識(shí)符號(hào) 變量名 1. 自動(dòng)變量7.10 內(nèi)部函數(shù)和外部函數(shù) 根據(jù)函數(shù)的使用范圍,可分為內(nèi)部函數(shù)和外部函數(shù)。 7.10.1 內(nèi)部函數(shù) 在定義函數(shù)的前面使用static關(guān)鍵字,此函數(shù)稱內(nèi)部函數(shù)。 7.10.2 外部函數(shù) 在定義函數(shù)的前面加extern關(guān)鍵字,此函數(shù)稱為外部函數(shù)。如: extern int fun(a , b)7.10 內(nèi)部函數(shù)和外部函數(shù) 根據(jù)函數(shù)的7.11 程序舉例 【例7-16】 編寫(xiě)函數(shù),要求統(tǒng)計(jì)輸入文本中單詞的個(gè)數(shù),單詞之間用空格符、換行符、跳格符隔開(kāi)。 程序如下: # include stdio.h“ # define IN 1

14、 /* 標(biāo)志一個(gè)單詞的內(nèi)部 */ # define OUT 0 /* 標(biāo)志一個(gè)單詞的外部 */ main() int n ; n=countword(); printf(n=%dn , n) ; 7.11 程序舉例 【例7-16】 編寫(xiě)函數(shù), countword() int c , nw , state ; state=OUT ; nw=0 ; while (c=getchar()!=EOF) if (c= | c=n | c=t) state=OUT; /* 在一個(gè)單詞的外部 */ else if (state=OUT) /* 如果遇到單詞的第一個(gè)字符 */ state=IN ; /* 狀態(tài)

15、變量置成IN,在單詞的內(nèi)部 */ nw+ ; /* 單詞個(gè)數(shù)增1 */ return nw ; countword() 說(shuō)明: (1) 當(dāng)狀態(tài)變量state標(biāo)志為:在單詞內(nèi)部且讀入的字符不是分隔符時(shí),表示c仍是單詞的一部分,因此不作任何操作;如果讀入的字符是分隔符,表示一個(gè)單詞已結(jié)束,準(zhǔn)備統(tǒng)計(jì)下一個(gè)單詞。 (2) 在while循環(huán)中,用EOF作為循環(huán)結(jié)束的標(biāo)志,EOF是在stdio.h文件中定義了的預(yù)定義符,在Turbo C的環(huán)境下,輸入Ctrl+Z后,回車(chē),即輸入了EOF。 說(shuō)明: 【例7-17】 從鍵盤(pán)輸入一較大正整數(shù)n(n=6),并驗(yàn)證從6到n之間的所有偶數(shù)都可以分解為兩個(gè)素?cái)?shù)之和的形式

16、。 程序如下: # include stdio.h # include math.h int prime(int m) int i , k ; k=sqrt(m) ; for (i=2 ; i=6:) ; scanf (%d , &limit) ; if (limit=6) break ; main() for (n=6; n=limit; n+=2) for (a=3; a=n/2; a+=2) if (prime(a) b=na ; if (prime(b) printf (%d=%d+%dn , n , a , b) ; break ; for (n=6; n=limit; n+=2 說(shuō)

17、明: (1) prime(m)函數(shù)是用于驗(yàn)證m是不是素?cái)?shù)的函數(shù)。當(dāng)其返回值為0時(shí),說(shuō)明m不是素?cái)?shù);當(dāng)其返回值為1時(shí),說(shuō)明m是素?cái)?shù)。 (2) main()函數(shù)中有一個(gè)雙層循環(huán),第一層循環(huán)的循環(huán)變量n是一個(gè)從開(kāi)始到limit為止的連續(xù)偶數(shù),此程序的主要功能就是判斷這些偶數(shù)是否都能表示成兩個(gè)素?cái)?shù)之和的形式;第二層循環(huán)的主要目的是尋找a、b(b=n-a)兩個(gè)素?cái)?shù)之和,以使n=a+b成立。由于除此之外,其它素?cái)?shù)都是奇數(shù),因而a、b始終取奇數(shù)。 (3) 由此程序不難看出,如果一個(gè)偶數(shù)能夠表示為一組以上的素?cái)?shù)之和,則只取一個(gè)素?cái)?shù)最小、另一個(gè)素?cái)?shù)最大的一組。 說(shuō)明: 【例7-18】 輸入100個(gè)整型數(shù),并把其中的最大值和最小值顯示出來(lái)。 程序如下: # include stdio.h int max , min ; void find (int a , int n) int i ; max=a0 ; min=a0 ; for (i=1 ; ima

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論