版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個(gè)人旅游住宿無(wú)息分期支付合同2篇
- 鐵礦粉供應(yīng)與采購(gòu)合同2025版5篇
- 2024年注冊(cè)城鄉(xiāng)規(guī)劃師考試題庫(kù)附參考答案(滿分必刷)
- 二零二五年部隊(duì)食堂食堂安全管理培訓(xùn)及應(yīng)急預(yù)案合同3篇
- 教育扶貧的調(diào)研報(bào)告
- 二零二五年高校畢業(yè)生就業(yè)服務(wù)區(qū)域合作與資源共享協(xié)議3篇
- 量身定制健身課程設(shè)計(jì)
- 高壓變電課程設(shè)計(jì)
- 二零二五年度民政局離婚調(diào)解中心合作服務(wù)合同4篇
- 課程設(shè)計(jì)里的設(shè)計(jì)背景
- 多感官交互對(duì)文化參與的影響
- 2024至2030年中國(guó)家庭維修行業(yè)發(fā)展前景預(yù)測(cè)及投資策略研究報(bào)告
- 文化旅游場(chǎng)所運(yùn)營(yíng)設(shè)備更新項(xiàng)目資金申請(qǐng)報(bào)告-超長(zhǎng)期特別國(guó)債投資專項(xiàng)
- 【人教版】二年級(jí)數(shù)學(xué)上冊(cè)說(shuō)課稿-第2課時(shí) 直角的認(rèn)識(shí)
- JTG F40-2004 公路瀝青路面施工技術(shù)規(guī)范
- 成都市2022級(jí)(2025屆)高中畢業(yè)班摸底測(cè)試(零診)英語(yǔ)試卷(含答案)
- 江蘇省南京市玄武區(qū)2022-2023學(xué)年七年級(jí)下學(xué)期期末語(yǔ)文試題
- 《金屬非金屬地下礦山監(jiān)測(cè)監(jiān)控系統(tǒng)建設(shè)規(guī)范》
- 房建EPC項(xiàng)目施工部署及-物資、機(jī)械設(shè)備、勞動(dòng)力投入計(jì)劃
- 如何提高護(hù)士的應(yīng)急能力
- 2024屆四川省瀘州市江陽(yáng)區(qū)八年級(jí)下冊(cè)數(shù)學(xué)期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)試題含解析
評(píng)論
0/150
提交評(píng)論