大學(xué)計(jì)算機(jī)C語(yǔ)言函數(shù)(1 函數(shù)的定義和使用)_第1頁(yè)
大學(xué)計(jì)算機(jī)C語(yǔ)言函數(shù)(1 函數(shù)的定義和使用)_第2頁(yè)
大學(xué)計(jì)算機(jī)C語(yǔ)言函數(shù)(1 函數(shù)的定義和使用)_第3頁(yè)
大學(xué)計(jì)算機(jī)C語(yǔ)言函數(shù)(1 函數(shù)的定義和使用)_第4頁(yè)
大學(xué)計(jì)算機(jī)C語(yǔ)言函數(shù)(1 函數(shù)的定義和使用)_第5頁(yè)
已閱讀5頁(yè),還剩23頁(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、第5章 函 數(shù)5.1 程序設(shè)計(jì)的藝術(shù) 5.2 函數(shù)的定義和使用5.3 數(shù)組作函數(shù)參數(shù)5.4 變量的作用域5.5 變量的存儲(chǔ)類別5.6 預(yù)處理指令一、函數(shù)的概念 函數(shù)是形式上獨(dú)立、功能上完整的程序段(塊)。在C程序設(shè)計(jì)中常將一些常用功能模塊編寫(xiě)成函數(shù)。函數(shù)可以完成特定的計(jì)算或操作處理功能。 C程序由函數(shù)組成;函數(shù)在形式上是平行的,不允許嵌套定義;C程序只執(zhí)行主函數(shù),子函數(shù)必須通過(guò)主函數(shù)或其他子函數(shù)的調(diào)用才能被執(zhí)行;子函數(shù)不能調(diào)用主函數(shù)。實(shí)質(zhì)上,設(shè)計(jì)程序就是設(shè)計(jì)函數(shù)。5.1 程序設(shè)計(jì)的藝術(shù) (略)5.2 函數(shù)的定義和使用二、函數(shù)的分類(一)從用戶的角度分1.標(biāo)準(zhǔn)函數(shù),即庫(kù)函數(shù) ANSI C預(yù)先定義

2、的用戶可直接使用的函數(shù);使用庫(kù)函數(shù)時(shí),必須用#include把該函數(shù)所在的頭文件包含進(jìn)來(lái)。2.用戶自定義函數(shù) 是用戶為了解決各種應(yīng)用問(wèn)題而自行設(shè)計(jì)的函數(shù)。用戶自定義函數(shù)必須先定義后使用!(二)從形式上分1.無(wú)參函數(shù): 即無(wú)形式參數(shù)的函數(shù)。 如:getchar()2.有參函數(shù) 即帶有形式參數(shù)的函數(shù) 如:putchar(ch)、sqrt(x)三、函數(shù)的定義1、 無(wú)參函數(shù)的定義函數(shù)返回值類型 函數(shù)名( void ) 函數(shù)體其中:函數(shù)返回值類型表示函數(shù)的返回結(jié)果值類型,函數(shù)只能有一個(gè)返回值,若函數(shù)無(wú)返回值即用void聲明;返回函數(shù)值需使用:return 變量|表達(dá)式; 函數(shù)名由用戶按標(biāo)識(shí)符的命名規(guī)則自

3、行給定,但不能與標(biāo)準(zhǔn)函數(shù)同名; 圓括號(hào)中的關(guān)鍵字void表示函數(shù)無(wú)形式參數(shù); 函數(shù)體是由實(shí)現(xiàn)函數(shù)功能必需的語(yǔ)句組成。例1:無(wú)參函數(shù)的定義。#includevoid PrintMessage (void)printf(t*n);printf(t Programming is fun.n);printf(t*n);int main(void)PrintMessage ( );PrintMessage ( );PrintMessage ( );return 0;函數(shù)返回值類型 函數(shù)名(數(shù)據(jù)類型 參數(shù)1, 數(shù)據(jù)類型 參數(shù)2, )函數(shù)體說(shuō)明: 函數(shù)返回值類型、函數(shù)名、函數(shù)體的含義與無(wú)參函數(shù)相同;形式參數(shù)

4、的格式如:數(shù)據(jù)類型 形式參數(shù)1 形式參數(shù)(簡(jiǎn)稱形參)必須單個(gè)獨(dú)立定義,形參是用來(lái)接收函數(shù)被調(diào)用時(shí)對(duì)應(yīng)實(shí)際參數(shù)傳遞的值或地址的,因此形參只能是變量,形參的存儲(chǔ)空間是函數(shù)被調(diào)用時(shí)臨時(shí)分配的動(dòng)態(tài)空間、用完即釋放(不能永久存儲(chǔ)數(shù)據(jù))。2、有參函數(shù)的定義int Average(int x, int y)int result;result = (x + y) / 2;return result;函數(shù)首部函數(shù)體例2:定義有參函數(shù)計(jì)算兩個(gè)整數(shù)的平均。#include int Average(int x, int y)int result;result = (x + y) / 2;return result;i

5、nt main(void)int a1 = 12, b1 = 36, a2 = 24, b2 = 46, a3 = 5, b3 = 25;int ave1, ave2, ave3; ave1 = Average(a1, b1);ave2 = Average(a2, b2);ave3 = Average(a3, b3);printf(Average of %d and %d is %d.n, a1, b1, ave1);printf(Average of %d and %d is %d.n, a2, b2, ave2);printf(Average of %d and %d is %d.n, a

6、3, b3, ave3); return 0;形參為整形變量x和y變量a1和b1為實(shí)際參數(shù)1、函數(shù)調(diào)用的一般形式: 函數(shù)名(實(shí)在參數(shù)表)其中: 形參(形式參數(shù))定義函數(shù)時(shí)在函數(shù)名后括號(hào)中聲明的參數(shù);實(shí)參( 實(shí)際參數(shù) )在主調(diào)函數(shù)中調(diào)用函數(shù)時(shí)函數(shù)名后面括號(hào)中的參數(shù)(或表達(dá)式); 調(diào)用函數(shù)時(shí)實(shí)參的個(gè)數(shù)、順序、類型必須與形參一一對(duì)應(yīng)(賦值相容);實(shí)參可是常量、變量、函數(shù)或表達(dá)式; 函數(shù)調(diào)用時(shí)實(shí)參和形參是采用單向值傳遞形式即將實(shí)參的數(shù)值或地址單向傳給對(duì)應(yīng)的形參。四、函數(shù)的調(diào)用有返回值時(shí)(即函數(shù)功能為某種計(jì)算功能) 返回值 = 函數(shù)名(實(shí)參表列);例如:以賦值語(yǔ)句形式調(diào)用函數(shù)如 c = max(a,b)

7、;例如:作為另一個(gè)函數(shù)的參數(shù)形式調(diào)用函數(shù)如 c = max(max(a, b), c); printf(%dn, max(a, b);無(wú)返回值時(shí)(即函數(shù)功能是完成某種操作或處理)例如:以表達(dá)式語(yǔ)句形式調(diào)用函數(shù)如 display(a, b); 函數(shù)名(實(shí)參表列);2、具體調(diào)用形式理解函數(shù)的調(diào)用參數(shù)的傳遞int main(void)int a = 12;int b = 24;int ave;ave = Average(a, b);printf(Average of %d and %d is %d.n, a, b, ave);return 0;#include int Average(int x,

8、int y) int result; result = (x + y) / 2; return result;例3:定義求n!函數(shù),然后調(diào)用該函數(shù)求sum=1!+2!+3!+m!的值。#include double Fac(int n) int i; double p = 1.0; for (i = 1; i n; i+) p *= i; return p; int main(void) int i, m; double sum = 0; printf (“Please input m data:”); scanf(“%d”, &m); for (i = 1; i = m; i+) sum +

9、= Fac(i); printf(“Sum=%.0fn”, sum); return 0;#include int max ( int x, int y ) int z;if (x y) z = x;else z = y;return (z);int main(void) int a = 45, b = 78, c = 99, d, e;d = max(a, b); printf(max1 = %dn, d);printf(max2 = %dn, max(a, b);e = c - max(a, b);printf(e = %dn, e);printf(max3 = %dn, max(max(

10、a, b), c);return 0;例4:函數(shù)定義與調(diào)用max1 = 78max2 = 78e = 21max3 = 99該程序的輸出是什么?例5:定義求素?cái)?shù)的函數(shù),然后調(diào)用該函數(shù)求100到200之間的所有素?cái)?shù)。#include #include int Prim(int x) int i, j, k; k = (int)sqrt(i); for ( j = 2; j = k + 1) return 1; else return 0; int main(void) int i; for (i = 100; i = 200; i+) if ( Prim(i) ) printf(“%d, ”,

11、i); return 0 ; 五、函數(shù)原型聲明(prototype)1、為什么要聲明函數(shù)原型? 函數(shù)應(yīng)該先定義,然后才能調(diào)用。但是,如果函數(shù)的調(diào)用出現(xiàn)在函數(shù)的定義之前,就必須對(duì)被向前調(diào)用的函數(shù)進(jìn)行函數(shù)原型聲明,否則就會(huì)出現(xiàn)函數(shù)調(diào)用錯(cuò)誤。2、聲明格式: 函數(shù)類型 函數(shù)名(類型名1 形參數(shù)1,);或 函數(shù)類型 函數(shù)名(類型名1,類型名2,);注意:如果函數(shù)嚴(yán)格遵循先定義后調(diào)用原則就無(wú)需進(jìn)行函數(shù)原型聲明。例6:函數(shù)原型聲明(先調(diào)用后定義函數(shù))#include double Fac(int n);int main(void) f1 = Fac(m); double Fac(int n) .函數(shù)Fac的

12、原型聲明先調(diào)用函數(shù)Fac函數(shù)Fac的定義出現(xiàn)在調(diào)用之后#include int Average(int x, int y)int result;result = (x + y) / 2;return result;int main(void)int a = 12;int b = 24;int ave = Average(a, b);printf(Average of %d and %d is %d.n, a, b, ave);return 0;函數(shù)定義函數(shù)調(diào)用例7:以下函數(shù)為先定義后調(diào)用,不用聲明原型#include int Average(int x, int y); /*聲明Average

13、()函數(shù)*/ int main(void) int a = 12; int b = 24; int ave = Average(a, b); printf(Average of %d and %d is %d.n, a, b, ave); return 0; int Average(int x, int y)int result;result = (x + y) / 2;return result;例 8:函數(shù)的原型聲明(先調(diào)用后定義)int main()a();return 0;a 函數(shù)b();return;b函數(shù)return;六、函數(shù)的嵌套調(diào)用 在調(diào)用一個(gè)函數(shù)的過(guò)程中,又調(diào)用其他的函數(shù),稱

14、為函數(shù)的嵌套調(diào)用。 以下為函數(shù)調(diào)用與調(diào)用返回過(guò)程:例9:函數(shù)的嵌套調(diào)用#include float b (float m) float n;n = m * 10;return (n);float add (float x, float y) float z;z = b(x) + y; return (z);int main(void)float a = 1.2, b = 3.4, c; c = add(a, b); printf (“c = %fn”, c); return 0;b函數(shù)main調(diào)用add函數(shù)調(diào)用b函數(shù)add函數(shù) 結(jié)束七、函數(shù)的遞歸調(diào)用 在調(diào)用一個(gè)函數(shù)的過(guò)程中,出現(xiàn)直接或間接地調(diào)

15、用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用。int f(int x)int y, z;z = f(y);return (2 * z);f函數(shù)調(diào)用f函數(shù)f1函數(shù)調(diào)用f2函數(shù)f2函數(shù)調(diào)用f1函數(shù)例10:函數(shù)的遞歸調(diào)用 有3個(gè)人坐在一起,問(wèn)第3個(gè)人多少歲?他說(shuō)比第2個(gè)人大2歲。問(wèn)第2個(gè)人多少歲?他說(shuō)比第1個(gè)人大2歲。最后問(wèn)第1個(gè)人,他說(shuō)是10歲。請(qǐng)問(wèn)第3個(gè)人多大?分析:age(3)=age(2)+2;age(2)=age(1)+2;age(1)=10;歸納:n=1 age(n)=10 n1 age(n)=age(n-1)+2程序如下:#include int age(int n) int c; if (n =

16、 1) c = 10; else if (n 1) c = age(n - 1) + 2; return c; int main(void) printf(“%d”, age(3); return 0;程序執(zhí)行過(guò)程如下:int main(void) printf(“%d”, age(3);int age(3) int c; c = age(2) + 2; return c;int age(2) int c; c = age(1) + 2; return c;int age(1) int c; c = 10; return c;課堂習(xí)題#include void func1(int i);voi

17、d func2(int i);char st = hello,friend!;void func1(int i) printf(%c, sti); if (i 3) i += 2; func2(i); void func2(int i) printf(%c, sti); if (i 3) i += 2; func1(i); int main(void) int i = 0; func1(i); return 0;A) helloB) helC) hloD) hlm1下列程序執(zhí)行后的輸出結(jié)果是( )2有如下程序:#include int func(int a, int b) return (a+b); int main(void) int x = 2, y = 5, z = 8, r ; r = func( func(x, y), z); printf(“%dn”,

溫馨提示

  • 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)論