![第6章_函數(shù)與編譯預(yù)處理_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/7148273c-6d1e-4598-b644-d5004c59431d/7148273c-6d1e-4598-b644-d5004c59431d1.gif)
![第6章_函數(shù)與編譯預(yù)處理_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/7148273c-6d1e-4598-b644-d5004c59431d/7148273c-6d1e-4598-b644-d5004c59431d2.gif)
![第6章_函數(shù)與編譯預(yù)處理_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/7148273c-6d1e-4598-b644-d5004c59431d/7148273c-6d1e-4598-b644-d5004c59431d3.gif)
![第6章_函數(shù)與編譯預(yù)處理_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/7148273c-6d1e-4598-b644-d5004c59431d/7148273c-6d1e-4598-b644-d5004c59431d4.gif)
![第6章_函數(shù)與編譯預(yù)處理_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/7148273c-6d1e-4598-b644-d5004c59431d/7148273c-6d1e-4598-b644-d5004c59431d5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材 函數(shù)是函數(shù)是 C C語(yǔ)言程序的基本模塊,由于采用了函數(shù)模語(yǔ)言程序的基本模塊,由于采用了函數(shù)模塊式的結(jié)構(gòu),塊式的結(jié)構(gòu),C C 語(yǔ)言易于實(shí)現(xiàn)結(jié)構(gòu)化程序設(shè)計(jì),使程序語(yǔ)言易于實(shí)現(xiàn)結(jié)構(gòu)化程序設(shè)計(jì),使程序的結(jié)構(gòu)清晰、減少重復(fù)編寫(xiě)程序的工作量、提高程序的的結(jié)構(gòu)清晰、減少重復(fù)編寫(xiě)程序的工作量、提高程序的可讀性和可維護(hù)性。本章主要介紹函數(shù)的定義與調(diào)用、可讀性和可維護(hù)性。本章主要介紹函數(shù)的定義與調(diào)用、函數(shù)間的數(shù)據(jù)傳遞方法、函數(shù)的遞歸調(diào)用、變量的作用函數(shù)間的數(shù)據(jù)傳遞方法、函數(shù)的遞歸調(diào)用、變量的作用域和存儲(chǔ)類別以及編譯預(yù)處理命令等相關(guān)內(nèi)容。域和存儲(chǔ)
2、類別以及編譯預(yù)處理命令等相關(guān)內(nèi)容。 普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材6.1 函數(shù)概述函數(shù)概述6.2 函數(shù)的調(diào)用函數(shù)的調(diào)用6.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值6.4 函數(shù)的嵌套調(diào)用與遞歸調(diào)用函數(shù)的嵌套調(diào)用與遞歸調(diào)用 6.5 變量的作用域與存儲(chǔ)類別變量的作用域與存儲(chǔ)類別6.6 內(nèi)部函數(shù)和外部函數(shù)內(nèi)部函數(shù)和外部函數(shù)6.7 編譯預(yù)處理編譯預(yù)處理 6.8 文件包含文件包含 6.9 條件編譯條件編譯 6.10 程序舉例程序舉例普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材普通高等教育普通高等教育“十一五十一五”國(guó)
3、家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材6.1 函數(shù)概述6.1.1 6.1.1 模塊化程序設(shè)計(jì)方法模塊化程序設(shè)計(jì)方法 通常人們?cè)谇蠼庖粋€(gè)復(fù)雜或較大規(guī)模的問(wèn)題時(shí),一般都采通常人們?cè)谇蠼庖粋€(gè)復(fù)雜或較大規(guī)模的問(wèn)題時(shí),一般都采用逐步分解、分而治之的方法,也就是把一個(gè)大而復(fù)雜的問(wèn)題用逐步分解、分而治之的方法,也就是把一個(gè)大而復(fù)雜的問(wèn)題分解成若干個(gè)比較容易求解的小問(wèn)題,然后分別求解。根據(jù)這分解成若干個(gè)比較容易求解的小問(wèn)題,然后分別求解。根據(jù)這一法則,程序員在設(shè)計(jì)一個(gè)大而復(fù)雜的程序時(shí),往往也是首先一法則,程序員在設(shè)計(jì)一個(gè)大而復(fù)雜的程序時(shí),往往也是首先把整個(gè)程序劃分為若干個(gè)功能較為單一的程序模塊,其次分別把整個(gè)程序劃分為若
4、干個(gè)功能較為單一的程序模塊,其次分別予以實(shí)現(xiàn),最后再把所有的程序模塊像搭積木一樣裝配起來(lái),予以實(shí)現(xiàn),最后再把所有的程序模塊像搭積木一樣裝配起來(lái),完成一個(gè)完整的程序,從而達(dá)到所要求的目的。這種在程序設(shè)完成一個(gè)完整的程序,從而達(dá)到所要求的目的。這種在程序設(shè)計(jì)中逐步分解、分而治之的策略,稱為模塊化程序設(shè)計(jì)方法。計(jì)中逐步分解、分而治之的策略,稱為模塊化程序設(shè)計(jì)方法。 如果軟件可劃分為可獨(dú)立命名和編程的部件,則每個(gè)部件如果軟件可劃分為可獨(dú)立命名和編程的部件,則每個(gè)部件稱為一個(gè)模塊。模塊化就是把系統(tǒng)劃分成若干個(gè)模塊,每個(gè)模稱為一個(gè)模塊。模塊化就是把系統(tǒng)劃分成若干個(gè)模塊,每個(gè)模塊完成一個(gè)子功能,把這些模塊集
5、中起來(lái)組成一個(gè)整體,從而塊完成一個(gè)子功能,把這些模塊集中起來(lái)組成一個(gè)整體,從而完成指定的功能,滿足問(wèn)題的要求。完成指定的功能,滿足問(wèn)題的要求。普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材例如,圖書(shū)管理系統(tǒng)模塊劃分如圖例如,圖書(shū)管理系統(tǒng)模塊劃分如圖6-16-1所示。所示。圖圖6-1 6-1 圖書(shū)管理系統(tǒng)模塊劃分示意圖圖書(shū)管理系統(tǒng)模塊劃分示意圖6.1 函數(shù)概述普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材 在在C C語(yǔ)言中,函數(shù)是程序的基本組成單位,因此可以很方便地用函數(shù)作語(yǔ)言中,函數(shù)是程序的基本組成單位,因此可以很方便地用函數(shù)作為程序模塊來(lái)實(shí)現(xiàn)為程序
6、模塊來(lái)實(shí)現(xiàn)C C語(yǔ)言程序。利用函數(shù),不僅可以實(shí)現(xiàn)程序的模塊化,避語(yǔ)言程序。利用函數(shù),不僅可以實(shí)現(xiàn)程序的模塊化,避免大量的重復(fù)工作、簡(jiǎn)化程序,提高程序的易讀性和可維護(hù)性,還可以提免大量的重復(fù)工作、簡(jiǎn)化程序,提高程序的易讀性和可維護(hù)性,還可以提高效率。高效率。 例如,以下是使用主函數(shù)調(diào)用例如,以下是使用主函數(shù)調(diào)用line()line()函數(shù)輸出一個(gè)簡(jiǎn)單的信頭的程序。函數(shù)輸出一個(gè)簡(jiǎn)單的信頭的程序。 #include #include Void line() Void line() / /* * 定義函數(shù)定義函數(shù) * */ / printf(=n); printf(=n); void main()vo
7、id main() line(); / line(); /* * 調(diào)用函數(shù)調(diào)用函數(shù) * */ / printf(%s, Xinjiang Agricultural Universityn); printf(%s, Xinjiang Agricultural Universityn); printf(%s,No.42 Nanchang Rd,Urumqi,Xinjiang,P.R.Chinan); printf(%s,No.42 Nanchang Rd,Urumqi,Xinjiang,P.R.Chinan); line(); / line(); /* * 調(diào)用函數(shù)調(diào)用函數(shù) * */ / 程序運(yùn)行
8、結(jié)果:程序運(yùn)行結(jié)果:= Xinjiang Agricultural University Xinjiang Agricultural University No.42 Nanchang Rd,Urumqi,Xinjiang,P.R.China No.42 Nanchang Rd,Urumqi,Xinjiang,P.R.China=6.1 函數(shù)概述普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材6.1.2 函數(shù)的分類函數(shù)的分類 C 語(yǔ)言不僅提供了極為豐富的庫(kù)函數(shù),還語(yǔ)言不僅提供了極為豐富的庫(kù)函數(shù),還允許用戶建立自己定義的函數(shù)。我們可以從不允許用戶建立自己定義的函數(shù)。我們可以從
9、不同的角度對(duì)同的角度對(duì) C 語(yǔ)言的函數(shù)進(jìn)行分類。語(yǔ)言的函數(shù)進(jìn)行分類。6.1 函數(shù)概述普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材6.1.2 6.1.2 函數(shù)的分類函數(shù)的分類 1 1從函數(shù)定義的角度,函數(shù)可分為從函數(shù)定義的角度,函數(shù)可分為庫(kù)函數(shù)庫(kù)函數(shù)( (又稱又稱標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)函數(shù)) )和和用戶自定義函數(shù)用戶自定義函數(shù)兩種。兩種。 庫(kù)函數(shù)包括了常用的數(shù)學(xué)函數(shù)、字符和字符串處理函數(shù)、庫(kù)函數(shù)包括了常用的數(shù)學(xué)函數(shù)、字符和字符串處理函數(shù)、輸入輸入 / / 輸出函數(shù)等。對(duì)每一類庫(kù)函數(shù),系統(tǒng)都提供了相應(yīng)的頭輸出函數(shù)等。對(duì)每一類庫(kù)函數(shù),系統(tǒng)都提供了相應(yīng)的頭文件,該頭文件中包含了這一類庫(kù)函
10、數(shù)的聲明,如數(shù)學(xué)函數(shù)的文件,該頭文件中包含了這一類庫(kù)函數(shù)的聲明,如數(shù)學(xué)函數(shù)的說(shuō)明包含在說(shuō)明包含在“math.h”math.h”文件中文件中, ,所以程序中如果要用到庫(kù)函數(shù)時(shí)所以程序中如果要用到庫(kù)函數(shù)時(shí),在程序文件的開(kāi)頭應(yīng)使用,在程序文件的開(kāi)頭應(yīng)使用#include#include命令包含相應(yīng)的頭文件。命令包含相應(yīng)的頭文件。用戶自定義函數(shù)是用戶根據(jù)自己的需要編寫(xiě)的函數(shù),以解決用用戶自定義函數(shù)是用戶根據(jù)自己的需要編寫(xiě)的函數(shù),以解決用戶的專門(mén)需要。戶的專門(mén)需要。6.1 函數(shù)概述普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材6.1.2 6.1.2 函數(shù)的分類函數(shù)的分類 2 2從函
11、數(shù)是否具有返回值的角度,函數(shù)分為從函數(shù)是否具有返回值的角度,函數(shù)分為有返回有返回值函數(shù)值函數(shù)和和無(wú)返回值函數(shù)無(wú)返回值函數(shù)兩種。兩種。 有返回值函數(shù)被調(diào)用執(zhí)行完后將向調(diào)用者返回一個(gè)執(zhí)有返回值函數(shù)被調(diào)用執(zhí)行完后將向調(diào)用者返回一個(gè)執(zhí)行結(jié)果,即函數(shù)返回值。如數(shù)學(xué)函數(shù)行結(jié)果,即函數(shù)返回值。如數(shù)學(xué)函數(shù)sin()sin()等即屬于此類函等即屬于此類函數(shù)。無(wú)返回值函數(shù)用于完成某項(xiàng)特定的處理任務(wù),執(zhí)行完數(shù)。無(wú)返回值函數(shù)用于完成某項(xiàng)特定的處理任務(wù),執(zhí)行完成后不向調(diào)用者返回函數(shù)值。由于函數(shù)無(wú)須返回值,用戶成后不向調(diào)用者返回函數(shù)值。由于函數(shù)無(wú)須返回值,用戶在定義此類函數(shù)時(shí)可指定它的返回值為在定義此類函數(shù)時(shí)可指定它的返
12、回值為“空類型空類型”,空類,空類型的說(shuō)明符為型的說(shuō)明符為“void”void”。6.1 函數(shù)概述普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材6.1.2 6.1.2 函數(shù)的分類函數(shù)的分類 3 3從函數(shù)是否帶有參數(shù)角度,函數(shù)分為從函數(shù)是否帶有參數(shù)角度,函數(shù)分為無(wú)參函數(shù)無(wú)參函數(shù)和和有參函數(shù)有參函數(shù)兩種。兩種。 無(wú)參函數(shù)在調(diào)用時(shí),主調(diào)函數(shù)并不將數(shù)據(jù)無(wú)參函數(shù)在調(diào)用時(shí),主調(diào)函數(shù)并不將數(shù)據(jù)傳送給被調(diào)函數(shù)。而調(diào)用有參數(shù)函數(shù)時(shí),在主傳送給被調(diào)函數(shù)。而調(diào)用有參數(shù)函數(shù)時(shí),在主調(diào)函數(shù)和被調(diào)函數(shù)之間有數(shù)據(jù)傳送。調(diào)函數(shù)和被調(diào)函數(shù)之間有數(shù)據(jù)傳送。6.1 函數(shù)概述普通高等教育普通高等教育“十一五十一
13、五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材6.1.3 6.1.3 函數(shù)的定義函數(shù)的定義 函數(shù)是函數(shù)是C C語(yǔ)言程序的模塊結(jié)構(gòu),除了標(biāo)準(zhǔn)庫(kù)函數(shù)以外語(yǔ)言程序的模塊結(jié)構(gòu),除了標(biāo)準(zhǔn)庫(kù)函數(shù)以外, ,要在要在C C語(yǔ)言程序中使用用戶自定義函數(shù),必須遵循函數(shù)的先定義、語(yǔ)言程序中使用用戶自定義函數(shù),必須遵循函數(shù)的先定義、后聲明、再使用的步驟,即首先應(yīng)定義好函數(shù)的數(shù)據(jù)類型、存后聲明、再使用的步驟,即首先應(yīng)定義好函數(shù)的數(shù)據(jù)類型、存儲(chǔ)類型和函數(shù)體,然后才能進(jìn)行使用。儲(chǔ)類型和函數(shù)體,然后才能進(jìn)行使用。 C C語(yǔ)言函數(shù)的定義形式如下:語(yǔ)言函數(shù)的定義形式如下: 數(shù)據(jù)類型說(shuō)明符數(shù)據(jù)類型說(shuō)明符 函數(shù)名函數(shù)名(形參定義表形參定義表) 內(nèi)
14、部資料的說(shuō)明內(nèi)部資料的說(shuō)明 執(zhí)行語(yǔ)句執(zhí)行語(yǔ)句 6.1 函數(shù)概述普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材例如:例如:說(shuō)明:說(shuō)明: 數(shù)據(jù)類型確定該函數(shù)返回值的數(shù)據(jù)類型,缺省時(shí)系統(tǒng)認(rèn)為是數(shù)據(jù)類型確定該函數(shù)返回值的數(shù)據(jù)類型,缺省時(shí)系統(tǒng)認(rèn)為是 整型或字符型。整型或字符型。 函數(shù)名由用戶自己確定,必須符合函數(shù)名由用戶自己確定,必須符合C C語(yǔ)言標(biāo)識(shí)符的規(guī)則。語(yǔ)言標(biāo)識(shí)符的規(guī)則。 形參之間用逗號(hào)隔開(kāi)。函數(shù)可以沒(méi)有形參,但函數(shù)名后面的形參之間用逗號(hào)隔開(kāi)。函數(shù)可以沒(méi)有形參,但函數(shù)名后面的 一對(duì)圓括號(hào)不能缺省。一對(duì)圓括號(hào)不能缺省。6.1 函數(shù)概述普通高等教育普通高等教育“十一五十一五”國(guó)
15、家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材例例6.1 編寫(xiě)一個(gè)函數(shù)編寫(xiě)一個(gè)函數(shù),輸出由指定數(shù)量的指定字符組成的分隔條。輸出由指定數(shù)量的指定字符組成的分隔條。#include #include void line(char c,int n) /*此函數(shù)用于輸出由指定字符組成的分隔條此函數(shù)用于輸出由指定字符組成的分隔條 */ int i; for(i=1;i=n;i+) /* 循環(huán)循環(huán)n次次 */ putchar(c); /* 循環(huán)輸出循環(huán)輸出n個(gè)字符個(gè)字符 */ printf(n);void main() line(*,47); /* 傳送傳送*字符以及輸出的字符個(gè)數(shù)字符以及輸出的字符個(gè)數(shù)47 */ print
16、f(%s, Xinjiang Agricultural Universityn); printf(%s, No.42 Nanchang Rd,Urumqi,Xinjiang,P.R.Chinan); line(*,47); /* 傳送傳送*字符以及輸出的字符個(gè)數(shù)字符以及輸出的字符個(gè)數(shù)47 */程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:* Xinjiang Agricultural University No.42 Nanchang Rd,Urumqi,Xinjiang,P.R.China*6.1 函數(shù)概述普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材6.2 函數(shù)的調(diào)用函數(shù)的調(diào)用 在在
17、C C語(yǔ)言中,用戶可以根據(jù)需要調(diào)用任語(yǔ)言中,用戶可以根據(jù)需要調(diào)用任何函數(shù)來(lái)完成某種處理。一個(gè)函數(shù)調(diào)用另一何函數(shù)來(lái)完成某種處理。一個(gè)函數(shù)調(diào)用另一個(gè)函數(shù)稱為函數(shù)調(diào)用。其調(diào)用者稱為調(diào)用函個(gè)函數(shù)稱為函數(shù)調(diào)用。其調(diào)用者稱為調(diào)用函數(shù),被調(diào)用的函數(shù)稱為被調(diào)用函數(shù)。數(shù),被調(diào)用的函數(shù)稱為被調(diào)用函數(shù)。 普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材6.2 函數(shù)的調(diào)用6.2.1 6.2.1 函數(shù)的調(diào)用方式函數(shù)的調(diào)用方式 函數(shù)調(diào)用的一般形式為:函數(shù)調(diào)用的一般形式為: 函數(shù)名函數(shù)名( (實(shí)參表實(shí)參表) ) 實(shí)參可以是常量、變量、表達(dá)式及函數(shù),各實(shí)實(shí)參可以是常量、變量、表達(dá)式及函數(shù),各實(shí)參之間用逗號(hào)
18、隔開(kāi),如果函數(shù)沒(méi)有參數(shù),則參之間用逗號(hào)隔開(kāi),如果函數(shù)沒(méi)有參數(shù),則“實(shí)參實(shí)參表表”為空。為空。普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材 1 1)函數(shù)表達(dá)式。)函數(shù)表達(dá)式。函數(shù)調(diào)用出現(xiàn)在表達(dá)式中。函數(shù)調(diào)用出現(xiàn)在表達(dá)式中。 例如:例如: s=area(3,4,5)s=area(3,4,5); ; 是一個(gè)賦值表達(dá)式,把是一個(gè)賦值表達(dá)式,把a(bǔ)reaarea函數(shù)的返回值賦予變量函數(shù)的返回值賦予變量s s。 2 2)函數(shù)語(yǔ)句。)函數(shù)語(yǔ)句。函數(shù)的調(diào)用是一個(gè)單獨(dú)的語(yǔ)句。例如函數(shù)的調(diào)用是一個(gè)單獨(dú)的語(yǔ)句。例如: printf(I love China.n);printf(I love C
19、hina.n); scanf(%d,&a); scanf(%d,&a); 都是以函數(shù)語(yǔ)句的方式調(diào)用函數(shù)。都是以函數(shù)語(yǔ)句的方式調(diào)用函數(shù)。 3 3)函數(shù)參數(shù)。)函數(shù)參數(shù)。函數(shù)的調(diào)用出現(xiàn)在參數(shù)的位置。例如函數(shù)的調(diào)用出現(xiàn)在參數(shù)的位置。例如: printf(%d,min(x,y);printf(%d,min(x,y); max(max(a,b),c); max(max(a,b),c); 前者把前者把minmin函數(shù)的返回值作為函數(shù)的返回值作為printfprintf函數(shù)的實(shí)參來(lái)使用,函數(shù)的實(shí)參來(lái)使用, 而后者把而后者把maxmax函數(shù)的返回值又作為函數(shù)的返回值又作為max max 函數(shù)的
20、實(shí)參來(lái)使用。函數(shù)的實(shí)參來(lái)使用。 在函數(shù)調(diào)用中還應(yīng)該注意的一個(gè)問(wèn)題是求值順序的問(wèn)題,所謂求值順序在函數(shù)調(diào)用中還應(yīng)該注意的一個(gè)問(wèn)題是求值順序的問(wèn)題,所謂求值順序是指對(duì)實(shí)參表中各量是自左至右使用呢,還是自右至左使用。對(duì)此,各系統(tǒng)是指對(duì)實(shí)參表中各量是自左至右使用呢,還是自右至左使用。對(duì)此,各系統(tǒng)的規(guī)定不一定相同。的規(guī)定不一定相同。6.2 函數(shù)的調(diào)用普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材例例6.2 6.2 求求m m個(gè)元素中取出個(gè)元素中取出n n個(gè)元素的組合數(shù)。個(gè)元素的組合數(shù)。 求組合的公式為:求組合的公式為: 這個(gè)問(wèn)題三次計(jì)算階乘,因此編寫(xiě)一個(gè)函數(shù)這個(gè)問(wèn)題三次計(jì)算階乘,因
21、此編寫(xiě)一個(gè)函數(shù)計(jì)算階乘,主函數(shù)三次調(diào)用計(jì)算階乘的函數(shù),即計(jì)算階乘,主函數(shù)三次調(diào)用計(jì)算階乘的函數(shù),即可完成組合的計(jì)算。可完成組合的計(jì)算。)!( !nmnmCnm6.2 函數(shù)的調(diào)用普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材void main( )void main( ) long cmn; long cmn; int m, n, t; int m, n, t; printf(input m,n=); printf(input m,n=); scanf(%d,%d,&m,&n); scanf(%d,%d,&m,&n); if(mn) if(m
22、n) / /* * 若若mnmn,則交換,則交換m,nm,n的值的值 * */ / t=m; m=n; n=t; t=m; m=n; n=t; cmn=fac(m); cmn=fac(m); / /* * 調(diào)用調(diào)用facfac函數(shù)計(jì)算函數(shù)計(jì)算m! m! * */ / cmn=cmn/fac(n); cmn=cmn/fac(n); / /* * 調(diào)用調(diào)用facfac函數(shù)計(jì)算函數(shù)計(jì)算n!n!,并且計(jì)算(,并且計(jì)算(m! / n!m! / n!)* */ / cmn=cmn/fac(m-n); cmn=cmn/fac(m-n); / /* *調(diào)用調(diào)用facfac函數(shù)計(jì)算函數(shù)計(jì)算(m-n)!,(m-n
23、)!,并且計(jì)算并且計(jì)算m!/(n!(m-n)!) m!/(n!(m-n)!) * */ / printf(cmn=%ldn,cmn); printf(cmn=%ldn,cmn); / /* * 輸出計(jì)算結(jié)果輸出計(jì)算結(jié)果 * */ / 程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:input m,n=10,3 cmn=1206.2 函數(shù)的調(diào)用#include #include long fac(int n) long fac(int n) / /* * 此函數(shù)用于計(jì)算階乘此函數(shù)用于計(jì)算階乘 * */ / long t=1; long t=1; int k; int k; for(k=2;k=n;k+) for(k
24、=2;k=n;k+) t=t t=t* *k;k; return(t); return(t); 普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材6.2.1 6.2.1 函數(shù)的調(diào)用方式函數(shù)的調(diào)用方式 C C語(yǔ)言程序中一個(gè)函數(shù)調(diào)用另一個(gè)函數(shù)需要具備的條件是:語(yǔ)言程序中一個(gè)函數(shù)調(diào)用另一個(gè)函數(shù)需要具備的條件是: 被調(diào)用的函數(shù)必須是已經(jīng)存在的函數(shù),是庫(kù)函數(shù)或用戶自被調(diào)用的函數(shù)必須是已經(jīng)存在的函數(shù),是庫(kù)函數(shù)或用戶自定義函數(shù)。定義函數(shù)。 如果調(diào)用庫(kù)函數(shù),必須要在程序文件的開(kāi)頭用如果調(diào)用庫(kù)函數(shù),必須要在程序文件的開(kāi)頭用#include#include命命令將與被調(diào)用函數(shù)有關(guān)的庫(kù)函數(shù)所在的頭
25、文件包含到文件中來(lái)。令將與被調(diào)用函數(shù)有關(guān)的庫(kù)函數(shù)所在的頭文件包含到文件中來(lái)。如在前面幾章已經(jīng)用過(guò)的文件包含宏命令(詳見(jiàn)如在前面幾章已經(jīng)用過(guò)的文件包含宏命令(詳見(jiàn)6.86.8節(jié)內(nèi)容):節(jié)內(nèi)容): #include /#include /* *說(shuō)明被調(diào)用函數(shù)將要用到數(shù)學(xué)函數(shù)說(shuō)明被調(diào)用函數(shù)將要用到數(shù)學(xué)函數(shù)* */ /6.2 函數(shù)的調(diào)用普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材 如果調(diào)用用戶自定義函數(shù),并且該函數(shù)與調(diào)用它的函如果調(diào)用用戶自定義函數(shù),并且該函數(shù)與調(diào)用它的函數(shù)(即主調(diào)函數(shù))在同一個(gè)程序文件中,一般還應(yīng)該在主調(diào)函數(shù)(即主調(diào)函數(shù))在同一個(gè)程序文件中,一般還應(yīng)該在主調(diào)函
26、數(shù)中對(duì)被調(diào)函數(shù)作聲明。數(shù)中對(duì)被調(diào)函數(shù)作聲明。即向編譯系統(tǒng)聲明將要調(diào)用此函數(shù),即向編譯系統(tǒng)聲明將要調(diào)用此函數(shù),并將有關(guān)信息通知編譯。并將有關(guān)信息通知編譯。 與函數(shù)定義的格式對(duì)應(yīng),函數(shù)的聲明格式如下:與函數(shù)定義的格式對(duì)應(yīng),函數(shù)的聲明格式如下: 存儲(chǔ)類型存儲(chǔ)類型 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 函數(shù)名函數(shù)名( (形參的定義表形參的定義表) ); 例如:要對(duì)例例如:要對(duì)例6.16.1和例和例6.26.2中被調(diào)用函數(shù)中被調(diào)用函數(shù) void line(char c,int n)void line(char c,int n) 作函數(shù)原型的聲明,只在其最后再加一個(gè)分號(hào)即可,即:作函數(shù)原型的聲明,只在其最后再加一個(gè)分號(hào)即
27、可,即: void line(char c,int n);void line(char c,int n); long fac(int n); long fac(int n);6.2 函數(shù)的調(diào)用普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材#include #include void line(char c,int n) ;void main() line(*,47); printf(%s, Xinjiang Agricultural Universityn); printf(%s, No.42 Nanchang Rd,Urumqi,Xinjiang,P.R.Chinan)
28、; line(*,47);void line(char c,int n) int i; for(i=1;i=n;i+) putchar(c); printf(n);6.2 函數(shù)的調(diào)用普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材6.2.1 6.2.1 函數(shù)的調(diào)用方式函數(shù)的調(diào)用方式 以下幾種情況可以不在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)原型進(jìn)行聲以下幾種情況可以不在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)原型進(jìn)行聲明:明: 如果被調(diào)用函數(shù)的定義出現(xiàn)在主調(diào)函數(shù)之前如果被調(diào)用函數(shù)的定義出現(xiàn)在主調(diào)函數(shù)之前, ,可以不必可以不必加聲明。加聲明。 例如,在例例如,在例6.16.1和例和例6.26.2中,函數(shù)中,函數(shù)l
29、ine()line()和和fac()fac()均被寫(xiě)在均被寫(xiě)在主函數(shù)主函數(shù)main()main()之前,在主函數(shù)之前,在主函數(shù)main()main()的前面可以不必對(duì)被調(diào)函的前面可以不必對(duì)被調(diào)函數(shù)數(shù)line()line()、fac()fac()進(jìn)行聲明。如果函數(shù)進(jìn)行聲明。如果函數(shù)line()line()和和fac()fac()均被寫(xiě)在均被寫(xiě)在主函數(shù)主函數(shù)main()main()之后,則在主函數(shù)之后,則在主函數(shù)main()main()之前必須對(duì)被調(diào)函數(shù)之前必須對(duì)被調(diào)函數(shù)line()line()、fac()fac()進(jìn)行聲明。例如,例進(jìn)行聲明。例如,例6.16.1將其寫(xiě)在將其寫(xiě)在#include
30、#include 和和void line(char c,int n)void line(char c,int n)之間,例之間,例6.26.2寫(xiě)在寫(xiě)在#include #include 和和long fac(int n)long fac(int n)之間。之間。 6.2 函數(shù)的調(diào)用普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材 如果一個(gè)函數(shù)只被另一個(gè)函數(shù)所調(diào)用如果一個(gè)函數(shù)只被另一個(gè)函數(shù)所調(diào)用, ,在主調(diào)函數(shù)中聲在主調(diào)函數(shù)中聲明和在函數(shù)外聲明是等價(jià)的。如果一個(gè)函數(shù)被多個(gè)函數(shù)所調(diào)用明和在函數(shù)外聲明是等價(jià)的。如果一個(gè)函數(shù)被多個(gè)函數(shù)所調(diào)用,可以在所有函數(shù)的定義之前對(duì)被調(diào)函數(shù)進(jìn)行聲
31、明,這樣,在,可以在所有函數(shù)的定義之前對(duì)被調(diào)函數(shù)進(jìn)行聲明,這樣,在所有主調(diào)函數(shù)中就不必再對(duì)被調(diào)函數(shù)進(jìn)行聲明了。所有主調(diào)函數(shù)中就不必再對(duì)被調(diào)函數(shù)進(jìn)行聲明了。 函數(shù)的定義和函數(shù)原型的聲明不是一回事。函數(shù)的定義是函數(shù)的定義和函數(shù)原型的聲明不是一回事。函數(shù)的定義是對(duì)函數(shù)功能的確定,包括指定函數(shù)名、函數(shù)值的類型、形式參對(duì)函數(shù)功能的確定,包括指定函數(shù)名、函數(shù)值的類型、形式參數(shù)及其類型、函數(shù)體等,它是一個(gè)完整的、獨(dú)立的程序函數(shù)單數(shù)及其類型、函數(shù)體等,它是一個(gè)完整的、獨(dú)立的程序函數(shù)單位。函數(shù)原型的聲明的作用是把函數(shù)的名字、函數(shù)的類型及參位。函數(shù)原型的聲明的作用是把函數(shù)的名字、函數(shù)的類型及參數(shù)的類型、個(gè)數(shù)、順序
32、通知編譯系統(tǒng),以便在調(diào)用該函數(shù)時(shí)系數(shù)的類型、個(gè)數(shù)、順序通知編譯系統(tǒng),以便在調(diào)用該函數(shù)時(shí)系統(tǒng)按此進(jìn)行對(duì)照檢查(函數(shù)名是否正確,實(shí)參和形參的個(gè)數(shù)、統(tǒng)按此進(jìn)行對(duì)照檢查(函數(shù)名是否正確,實(shí)參和形參的個(gè)數(shù)、類型、順序是否一致)。另外,對(duì)被調(diào)函數(shù)原型的聲明,僅僅類型、順序是否一致)。另外,對(duì)被調(diào)函數(shù)原型的聲明,僅僅是在已定義的函數(shù)的首部最后再加一個(gè)分號(hào)即可。是在已定義的函數(shù)的首部最后再加一個(gè)分號(hào)即可。6.2 函數(shù)的調(diào)用普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材6.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值6.3.1 6
33、.3.1 函數(shù)的參數(shù)傳遞方式函數(shù)的參數(shù)傳遞方式 函數(shù)的參數(shù)主要用于在主調(diào)函數(shù)和被調(diào)函數(shù)之間進(jìn)行數(shù)據(jù)函數(shù)的參數(shù)主要用于在主調(diào)函數(shù)和被調(diào)函數(shù)之間進(jìn)行數(shù)據(jù)傳遞。傳遞。在定義函數(shù)時(shí),函數(shù)名后面圓括號(hào)中的變量名稱為形式在定義函數(shù)時(shí),函數(shù)名后面圓括號(hào)中的變量名稱為形式參數(shù)參數(shù),簡(jiǎn)稱形參。,簡(jiǎn)稱形參。在主調(diào)函數(shù)中調(diào)用一個(gè)函數(shù)時(shí),函數(shù)名后面在主調(diào)函數(shù)中調(diào)用一個(gè)函數(shù)時(shí),函數(shù)名后面圓括號(hào)中的參數(shù)稱為實(shí)際參數(shù)圓括號(hào)中的參數(shù)稱為實(shí)際參數(shù),簡(jiǎn)稱實(shí)參。在函數(shù)調(diào)用時(shí),主,簡(jiǎn)稱實(shí)參。在函數(shù)調(diào)用時(shí),主調(diào)函數(shù)把實(shí)參的值(實(shí)參都必須具有確定的值)傳送給被調(diào)函調(diào)函數(shù)把實(shí)參的值(實(shí)參都必須具有確定的值)傳送給被調(diào)函數(shù)的形參,從而實(shí)現(xiàn)主
34、調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送,達(dá)到被數(shù)的形參,從而實(shí)現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送,達(dá)到被調(diào)函數(shù)從主調(diào)函數(shù)接收數(shù)據(jù)的目的。在調(diào)函數(shù)從主調(diào)函數(shù)接收數(shù)據(jù)的目的。在C C語(yǔ)言中,參數(shù)的類型不語(yǔ)言中,參數(shù)的類型不同,其傳遞方式也不同,同,其傳遞方式也不同, 下面給出下面給出C C語(yǔ)言中的參數(shù)傳遞方式。語(yǔ)言中的參數(shù)傳遞方式。普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材6.3.1 6.3.1 函數(shù)的參數(shù)傳遞方式函數(shù)的參數(shù)傳遞方式 簡(jiǎn)單變量作函數(shù)參數(shù)時(shí),主調(diào)函數(shù)把實(shí)參的值傳送給被調(diào)簡(jiǎn)單變量作函數(shù)參數(shù)時(shí),主調(diào)函數(shù)把實(shí)參的值傳送給被調(diào)函數(shù)的形參,從而實(shí)現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。進(jìn)行函
35、數(shù)的形參,從而實(shí)現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。進(jìn)行數(shù)據(jù)傳送時(shí),形參和實(shí)參具有以下特點(diǎn):數(shù)據(jù)傳送時(shí),形參和實(shí)參具有以下特點(diǎn): 形參與實(shí)參各占獨(dú)立的存儲(chǔ)單元。形參與實(shí)參各占獨(dú)立的存儲(chǔ)單元。但是值得注意的是,但是值得注意的是,形參變量只有在被調(diào)用時(shí)才分配臨時(shí)內(nèi)存單元形參變量只有在被調(diào)用時(shí)才分配臨時(shí)內(nèi)存單元, ,在調(diào)用結(jié)束時(shí),在調(diào)用結(jié)束時(shí),立即釋放所分配的內(nèi)存單元。因此立即釋放所分配的內(nèi)存單元。因此, ,形參只有在函數(shù)內(nèi)部使用,形參只有在函數(shù)內(nèi)部使用,函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后,則不能再使用該形參變量。函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后,則不能再使用該形參變量。 函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的(也被稱為函
36、數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的(也被稱為“值傳值傳遞遞”方式),即只能把實(shí)參的值傳送給形參,而不能把形參的方式),即只能把實(shí)參的值傳送給形參,而不能把形參的值反向地傳送給實(shí)參,因此在函數(shù)調(diào)用過(guò)程中,形參的值發(fā)生值反向地傳送給實(shí)參,因此在函數(shù)調(diào)用過(guò)程中,形參的值發(fā)生改變,而實(shí)參中的值不會(huì)變化。改變,而實(shí)參中的值不會(huì)變化。6.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材例例6.3 6.3 編寫(xiě)一個(gè)程序,將主函數(shù)中的兩個(gè)變量的值傳送給編寫(xiě)一個(gè)程序,將主函數(shù)中的兩個(gè)變量的值傳送給swapswap函數(shù)中的兩個(gè)形參,交換兩個(gè)形參的值。函數(shù)中的兩個(gè)
37、形參,交換兩個(gè)形參的值。#include #include void swap(int x,int y) void swap(int x,int y) / /* * 簡(jiǎn)單變量作被調(diào)函數(shù)的形參簡(jiǎn)單變量作被調(diào)函數(shù)的形參 * */ / int t; int t; t=x; x=y; y=t; t=x; x=y; y=t; / /* * 通過(guò)中間變量通過(guò)中間變量t t,進(jìn)行數(shù)據(jù)交換,進(jìn)行數(shù)據(jù)交換 * */ / printf(x=%d, y=%dn,x,y);printf(x=%d, y=%dn,x,y); void main()void main() int a=10,b=20; int a=10,b
38、=20; swap(a,b); swap(a,b); / /* * 調(diào)用調(diào)用swapswap函數(shù)時(shí),簡(jiǎn)單變量函數(shù)時(shí),簡(jiǎn)單變量a,ba,b做實(shí)參做實(shí)參 * */ / printf(a=%d, b=%dn,a,b); printf(a=%d, b=%dn,a,b); 程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:x=20, y=10a=10, b=206.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材6.3.1 6.3.1 函數(shù)的參數(shù)傳遞方式函數(shù)的參數(shù)傳遞方式 (1) (1) 數(shù)組元素作函數(shù)的參數(shù)數(shù)組元素作函數(shù)的參數(shù) 數(shù)組元素作函數(shù)的參數(shù),與簡(jiǎn)單變量作參數(shù)一
39、數(shù)組元素作函數(shù)的參數(shù),與簡(jiǎn)單變量作參數(shù)一樣,遵循單向的樣,遵循單向的“值傳遞值傳遞”。即數(shù)組元素把它的值。即數(shù)組元素把它的值傳遞到系統(tǒng)為形參變量分配的臨時(shí)存儲(chǔ)單元中。傳遞到系統(tǒng)為形參變量分配的臨時(shí)存儲(chǔ)單元中。6.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材例例6.4 一個(gè)班學(xué)生的成績(jī)已存入一個(gè)一維數(shù)組中一個(gè)班學(xué)生的成績(jī)已存入一個(gè)一維數(shù)組中,調(diào)用函數(shù)統(tǒng)計(jì)及格的人數(shù)。調(diào)用函數(shù)統(tǒng)計(jì)及格的人數(shù)。#include #define N 10int fun(int x) /* 簡(jiǎn)單變量作被調(diào)函數(shù)的形參簡(jiǎn)單變量作被調(diào)函數(shù)的形參 */ if(x=60)
40、 return(1); /* 若學(xué)生成績(jī)及格返回若學(xué)生成績(jī)及格返回1 */ else return(0); /* 若學(xué)生成績(jī)不及格返回若學(xué)生成績(jī)不及格返回0 */void main() int cjN=76,80,65,60,58,91,47,63,70,85; int count=0,k; for(k=0;kN;k+) if(fun(cjk) /* 調(diào)用調(diào)用fun函數(shù)時(shí),數(shù)組元素函數(shù)時(shí),數(shù)組元素cjk做實(shí)參做實(shí)參 */ count+; /* 若若fun(cjk)的值為的值為1,則學(xué)生及格人數(shù)加,則學(xué)生及格人數(shù)加1 */ printf(count=%dn,count); /* 輸出及格的人數(shù)輸
41、出及格的人數(shù) */程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:count=86.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材 6.3.1 6.3.1 函數(shù)的參數(shù)傳遞方式函數(shù)的參數(shù)傳遞方式 (2 2) 數(shù)組名作函數(shù)的參數(shù)數(shù)組名作函數(shù)的參數(shù) 簡(jiǎn)單變量和數(shù)組元素作函數(shù)的參數(shù),遵循的是簡(jiǎn)單變量和數(shù)組元素作函數(shù)的參數(shù),遵循的是“值傳遞值傳遞”方式,而數(shù)組名作函數(shù)的參數(shù),遵循方式,而數(shù)組名作函數(shù)的參數(shù),遵循“地址傳遞地址傳遞”方式,即在方式,即在函數(shù)調(diào)用時(shí),若數(shù)組名作函數(shù)的參數(shù),則將數(shù)組的起始地址(函數(shù)調(diào)用時(shí),若數(shù)組名作函數(shù)的參數(shù),則將數(shù)組的起始地址(數(shù)組名代表
42、數(shù)組的起始地址)作為參數(shù)傳遞給形參。換言之,數(shù)組名代表數(shù)組的起始地址)作為參數(shù)傳遞給形參。換言之,“地址傳遞地址傳遞”方式的特點(diǎn)是,形參數(shù)組和實(shí)參數(shù)組共同使用同方式的特點(diǎn)是,形參數(shù)組和實(shí)參數(shù)組共同使用同樣的內(nèi)存單元,被調(diào)函數(shù)中對(duì)形參數(shù)組的操作其實(shí)就是對(duì)實(shí)參樣的內(nèi)存單元,被調(diào)函數(shù)中對(duì)形參數(shù)組的操作其實(shí)就是對(duì)實(shí)參數(shù)組的操作,因此,函數(shù)中對(duì)形參值的改變也會(huì)改變實(shí)參的值數(shù)組的操作,因此,函數(shù)中對(duì)形參值的改變也會(huì)改變實(shí)參的值。 6.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材例例6.5 一個(gè)班學(xué)生的成績(jī)已存入一個(gè)一維數(shù)組中,調(diào)用函數(shù)求平均成績(jī)。
43、一個(gè)班學(xué)生的成績(jī)已存入一個(gè)一維數(shù)組中,調(diào)用函數(shù)求平均成績(jī)。#include #define N 10float average(float xN) /* 數(shù)組作被調(diào)函數(shù)的形參數(shù)組作被調(diào)函數(shù)的形參 */ float sum=0,aver; int k; for(k=0;kN;k+) /* 計(jì)算成績(jī)之和計(jì)算成績(jī)之和 */ sum+=xk; aver=sum/N; /* 計(jì)算平均成績(jī)計(jì)算平均成績(jī) */ return(aver);void main() float cjN,aver; int k; printf(input %d scores:n,N); for(k=0;kN;k+) /* 通過(guò)鍵盤(pán)輸
44、入通過(guò)鍵盤(pán)輸入N個(gè)學(xué)生的成績(jī)個(gè)學(xué)生的成績(jī) */ scanf(%f,&cjk); aver=average(cj); /* 調(diào)用調(diào)用average函數(shù)時(shí),數(shù)組名函數(shù)時(shí),數(shù)組名cj作實(shí)參作實(shí)參 */ printf(average score is:%6.2fn,aver);6.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材程序運(yùn)行結(jié)果程序運(yùn)行結(jié)果:input 10 score:78 67 60 58 90 88 71 54 62 80 average score is: 70.806.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值普通高等教育
45、普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材例例6.6 使用調(diào)用函數(shù)的方法,將兩個(gè)字符串連接成一個(gè)字符串。使用調(diào)用函數(shù)的方法,將兩個(gè)字符串連接成一個(gè)字符串。#include #include #define M 50 #define M 50 / /* * 定義第一個(gè)字符串的最大長(zhǎng)度定義第一個(gè)字符串的最大長(zhǎng)度 * */ /#define N 25 #define N 25 / /* * 定義第二個(gè)字符串的最大長(zhǎng)度定義第二個(gè)字符串的最大長(zhǎng)度 * */ /void cat_str(char str1M,char str2Nvoid cat_str(char str1M,char str
46、2N)/ /* * 字符數(shù)組作被調(diào)函數(shù)的形參字符數(shù)組作被調(diào)函數(shù)的形參 * */ / int i=0,j=0; int i=0,j=0; while(str1i!=0) while(str1i!=0) / /* * 測(cè)出第一個(gè)字符串的長(zhǎng)度測(cè)出第一個(gè)字符串的長(zhǎng)度 * */ / i+; i+; while(str2j!=0) while(str2j!=0) / /* * 將第二個(gè)字符串連接到第一個(gè)字符串的的后面將第二個(gè)字符串連接到第一個(gè)字符串的的后面 * */ / str1i=str2j; str1i=str2j; i+; i+; j+; j+; void main()void main() cha
47、r str1M=A,B,C; char str1M=A,B,C; / /* * 定義并初始化第一個(gè)字符串定義并初始化第一個(gè)字符串 * */ / char str2N=D,E,F,G,H; char str2N=D,E,F,G,H; / /* * 定義并初始化第二個(gè)字符串定義并初始化第二個(gè)字符串 * */ / printf(str1:%sn,str1); printf(str1:%sn,str1); / /* * 輸出第一個(gè)字符串輸出第一個(gè)字符串 * */ / printf(str2:%sn,str2); printf(str2:%sn,str2); / /* * 輸出第二個(gè)字符串輸出第二個(gè)字符
48、串 * */ / cat_str(str1,str2); cat_str(str1,str2); / /* * 調(diào)用函數(shù)進(jìn)行字符串的連接調(diào)用函數(shù)進(jìn)行字符串的連接 * */ / printf(strcat string:%sn,str1); printf(strcat string:%sn,str1); / /* * 輸出連接后的字符串輸出連接后的字符串 * */ / 6.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材程序運(yùn)行結(jié)果程序運(yùn)行結(jié)果: str1:ABC str2:DEFGH strcat string:ABCDEFGH注意:注意
49、: 在被調(diào)函數(shù)中可以說(shuō)明形參數(shù)組的大小,也可以不說(shuō)明形在被調(diào)函數(shù)中可以說(shuō)明形參數(shù)組的大小,也可以不說(shuō)明形參數(shù)組的大小。例如,在例參數(shù)組的大小。例如,在例6.56.5和例和例6.66.6中,可以寫(xiě)成:中,可以寫(xiě)成:average(float x)average(float x)和和cat_str(char str1,char str2)cat_str(char str1,char str2)。實(shí)際上指定形參數(shù)組的大小不起任何作用,因?yàn)?,?shí)際上指定形參數(shù)組的大小不起任何作用,因?yàn)?,C C編譯系統(tǒng)對(duì)編譯系統(tǒng)對(duì)形參數(shù)組的大小不做檢查,只是將實(shí)參數(shù)組的起始地址傳遞給形參數(shù)組的大小不做檢查,只是將實(shí)參數(shù)組
50、的起始地址傳遞給對(duì)應(yīng)的形參數(shù)組。有時(shí)為了處理的需要,可以設(shè)置另一個(gè)參數(shù)對(duì)應(yīng)的形參數(shù)組。有時(shí)為了處理的需要,可以設(shè)置另一個(gè)參數(shù)傳遞需要處理的數(shù)組元素的個(gè)數(shù)。另外,實(shí)參數(shù)組名和形參數(shù)傳遞需要處理的數(shù)組元素的個(gè)數(shù)。另外,實(shí)參數(shù)組名和形參數(shù)組名可一致,也可以取不同的數(shù)組名。組名可一致,也可以取不同的數(shù)組名。 6.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材6.3.1 6.3.1 函數(shù)的參數(shù)傳遞方式函數(shù)的參數(shù)傳遞方式 (3 3)多維數(shù)組名作函數(shù)的參數(shù))多維數(shù)組名作函數(shù)的參數(shù) 多維數(shù)組名作函數(shù)的參數(shù)時(shí),除第一維可以不指定多維數(shù)組名作函數(shù)的參數(shù)時(shí),
51、除第一維可以不指定長(zhǎng)度外(也可以指定),其余各維都必須指定長(zhǎng)度。因長(zhǎng)度外(也可以指定),其余各維都必須指定長(zhǎng)度。因此,以下寫(xiě)法都是合法的:此,以下寫(xiě)法都是合法的: int fun(int a34)int fun(int a34) 或或 int fun(int a4)int fun(int a4)6.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材例例6.7 使用調(diào)用函數(shù)的方法使用調(diào)用函數(shù)的方法,求求34的矩陣中最大和最小的元素。的矩陣中最大和最小的元素。#include #define M 3 /* 定義矩陣的行數(shù)定義矩陣的行數(shù) */#d
52、efine N 4 /* 定義矩陣的列數(shù)定義矩陣的列數(shù) */void put_matric(int aMN) /* 輸出矩陣的函數(shù)輸出矩陣的函數(shù) */ int i,j; printf(array is:n); for(i=0;iM;i+) for(j=0;jN;j+) printf(%4d,aij); printf(n); printf(n);6.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材void max(int aN,int b) /*求矩陣元素中最大值和最小值的函數(shù)求矩陣元素中最大值和最小值的函數(shù)*/ int i,j; b0=a
53、00; /* 假設(shè)矩陣的第假設(shè)矩陣的第1行第行第1列的元素是最大的列的元素是最大的 */ b1=a00; /* 假設(shè)矩陣的第假設(shè)矩陣的第1行第行第1列的元素是最小的列的元素是最小的 */ for(i=0;iM;i+) for(j=0;jb0) /* 將矩陣中最大的元素存放在將矩陣中最大的元素存放在b0中中 */ b0=aij; if(aijb1) /* 將矩陣中最小的元素存放在將矩陣中最小的元素存放在b1中中 */ b1=aij; 6.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材void main() int count,b2,aMN
54、=2,-1,6,8,11,45,-25,0,55,18,3,-7; put_matric(a); max(a,b); printf(max value is:%4dnmin value is:%4dn,b0,b1); 程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:array is: 2 -1 6 811 45 -25 055 18 3 -7max value is: 55min value is: -256.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材例例6.8 使用調(diào)用函數(shù),實(shí)現(xiàn)矩陣的轉(zhuǎn)置。使用調(diào)用函數(shù),實(shí)現(xiàn)矩陣的轉(zhuǎn)置。#include #defin
55、e N 3void put_matric(int aNN) /* 輸出矩陣的函數(shù)輸出矩陣的函數(shù) */ int i,j; for(i=0;iN;i+) for(j=0;jN;j+) printf(%4d,aij); printf(n); printf(n);6.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材6.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值void fun(int bN) /* 實(shí)現(xiàn)矩陣轉(zhuǎn)置函數(shù)實(shí)現(xiàn)矩陣轉(zhuǎn)置函數(shù) */ int i,j,t; for(i=0;iN;i+) /*將將b矩陣矩陣i行行j列元素和列元素和j行行i列元素進(jìn)行交換
56、列元素進(jìn)行交換*/ for(j=i+1;jN;j+) t=bij; bij=bji; bji=t; 普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材void main() int i,j,cNN=1,55,66,35,1,75,25,45,1; printf(original matric:n); put_matric(c); /* 調(diào)用輸出矩陣函數(shù),輸出原始矩陣調(diào)用輸出矩陣函數(shù),輸出原始矩陣 */ fun(c); /* 調(diào)用矩陣轉(zhuǎn)置函數(shù)調(diào)用矩陣轉(zhuǎn)置函數(shù) */ printf(transposed matric:n); put_matric(c); /* 調(diào)用輸出矩陣函數(shù),輸
57、出轉(zhuǎn)置矩陣調(diào)用輸出矩陣函數(shù),輸出轉(zhuǎn)置矩陣 */程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果: original matric: 1 55 66 35 1 75 25 45 1 transposed matric: 1 35 25 55 1 45 66 75 16.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材6.3.2 6.3.2 函數(shù)的返回值函數(shù)的返回值 函數(shù)的值是指函數(shù)被調(diào)用后,執(zhí)行函數(shù)體中的語(yǔ)句序列后函數(shù)的值是指函數(shù)被調(diào)用后,執(zhí)行函數(shù)體中的語(yǔ)句序列后所取得的值。函數(shù)的值只能通過(guò)所取得的值。函數(shù)的值只能通過(guò)returnreturn語(yǔ)句返回主調(diào)函數(shù)。語(yǔ)
58、句返回主調(diào)函數(shù)。returnreturn語(yǔ)句的一般形式為:語(yǔ)句的一般形式為: return;return; return return 表達(dá)式;表達(dá)式; return(return(表達(dá)式表達(dá)式) ); return return語(yǔ)句的作用是:結(jié)束函數(shù)的執(zhí)行,并將表達(dá)式的值語(yǔ)句的作用是:結(jié)束函數(shù)的執(zhí)行,并將表達(dá)式的值帶回給主調(diào)函數(shù)。帶回給主調(diào)函數(shù)。 6.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材說(shuō)明:說(shuō)明: 表達(dá)式的類型應(yīng)與函數(shù)定義的數(shù)據(jù)類型一致,如果不一表達(dá)式的類型應(yīng)與函數(shù)定義的數(shù)據(jù)類型一致,如果不一致則以函數(shù)定義的數(shù)據(jù)類型為準(zhǔn)。
59、致則以函數(shù)定義的數(shù)據(jù)類型為準(zhǔn)。 在一個(gè)函數(shù)中允許有多個(gè)在一個(gè)函數(shù)中允許有多個(gè)returnreturn語(yǔ)句,流程執(zhí)行到其中語(yǔ)句,流程執(zhí)行到其中一個(gè)一個(gè)returnreturn時(shí),立即返回主調(diào)函數(shù)。時(shí),立即返回主調(diào)函數(shù)。 如果被調(diào)函數(shù)中沒(méi)有如果被調(diào)函數(shù)中沒(méi)有returnreturn語(yǔ)句,函數(shù)不是不帶回值,語(yǔ)句,函數(shù)不是不帶回值,而是帶回一個(gè)不確定的值。而是帶回一個(gè)不確定的值。為了明確表示函數(shù)不帶回值,可以為了明確表示函數(shù)不帶回值,可以定義函數(shù)為無(wú)類型定義函數(shù)為無(wú)類型“void”void”(或稱空類型)。(或稱空類型)。 例如:例如: void printline()void printline()
60、 printf( printf(* * * * * * * * * * *n);n); 6.3 函數(shù)的參數(shù)傳遞方式與函數(shù)的返回值普通高等教育普通高等教育“十一五十一五”國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)規(guī)劃教材例例6.9 求一個(gè)浮點(diǎn)數(shù)的絕對(duì)值。求一個(gè)浮點(diǎn)數(shù)的絕對(duì)值。#include float xabs(float x) /* 此函數(shù)用于求一個(gè)浮點(diǎn)數(shù)的絕對(duì)值此函數(shù)用于求一個(gè)浮點(diǎn)數(shù)的絕對(duì)值 */ if(x0) return(-x); else return(x);void main() float x,y; printf(input x=); scanf(%f,&x); y=xabs(x); /* 調(diào)用調(diào)用xabs函數(shù),并將其結(jié)果賦值給函數(shù),并將其結(jié)果賦值給
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國(guó)雙螺桿泵行業(yè)運(yùn)行態(tài)勢(shì)及未來(lái)發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 修路溝渠工程合同范本
- 出租單間小屋合同范本
- 加盟餐飲連鎖合同范例
- 中國(guó)人體安檢設(shè)備行業(yè)市場(chǎng)深度研究及投資規(guī)劃建議報(bào)告
- 公司個(gè)人借款合同范例
- 分期購(gòu)車合同范本6
- 2025年度摩托車行業(yè)技術(shù)交流合作合同模板
- 公司采購(gòu)勞保合同范本
- 農(nóng)村地?fù)Q地合同范本
- 新《安全生產(chǎn)法》安全培訓(xùn)
- GB/T 8151.13-2012鋅精礦化學(xué)分析方法第13部分:鍺量的測(cè)定氫化物發(fā)生-原子熒光光譜法和苯芴酮分光光度法
- 2023年遼寧鐵道職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ))試題庫(kù)含答案解析
- GB/T 39274-2020公共安全視頻監(jiān)控?cái)?shù)字視音頻編解碼技術(shù)測(cè)試規(guī)范
- GB/T 23800-2009有機(jī)熱載體熱穩(wěn)定性測(cè)定法
- T-SFSF 000012-2021 食品生產(chǎn)企業(yè)有害生物風(fēng)險(xiǎn)管理指南
- 2023年上海市閔行區(qū)精神衛(wèi)生中心醫(yī)護(hù)人員招聘筆試題庫(kù)及答案解析
- 水庫(kù)工程施工組織設(shè)計(jì)
- 基礎(chǔ)護(hù)理學(xué)試題及答案(各章節(jié))-基礎(chǔ)護(hù)理學(xué)第四版試題及答案
- 氣流粉碎機(jī)課件
- SJG 74-2020 深圳市安裝工程消耗量定額-高清現(xiàn)行
評(píng)論
0/150
提交評(píng)論