版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C程序設(shè)計(jì)6.1庫(kù)函數(shù)6.2函數(shù)定義和說(shuō)明6.3函數(shù)調(diào)用6.4函數(shù)參數(shù)6.5函數(shù)的嵌套調(diào)用和遞歸調(diào)用6.6變量的存儲(chǔ)類型6.7內(nèi)部函數(shù)、外部函數(shù)6.8編譯預(yù)處理命令第6章 函數(shù)與編譯預(yù)處理函數(shù)的調(diào)用函數(shù)的嵌套調(diào)用函數(shù)的遞歸調(diào)用局部變量和全局變量變量的存儲(chǔ)類別編譯預(yù)處理命令本章重點(diǎn)第6章 函數(shù)與編譯預(yù)處理第6章 函數(shù)與編譯預(yù)處理常用方法:#includevoid main()printf(“Hello world”);例:在屏幕上打印 Hello world#includevoid main()void print_message();print_message();void print_mes
2、sage()printf(“Hello world”);第6章 函數(shù)與編譯預(yù)處理1、一個(gè)較大的程序分成幾個(gè)功能較為單一的子程序模塊,用函數(shù)完成每個(gè)子程序的作用。2、一個(gè)C程序由一個(gè)主函數(shù)和若干個(gè)其它函數(shù)構(gòu)成。3、由主函數(shù)調(diào)用其它函數(shù),其他函數(shù)也可以相互調(diào)用。4、同一函數(shù)可以被一個(gè)或多個(gè)函數(shù)調(diào)用任意次。第6章 函數(shù)與編譯預(yù)處理函數(shù)常識(shí)1、功能模塊:求解較小問(wèn)題的算法和程序稱作“功能模塊”, 各功能模塊可以先單獨(dú)設(shè)計(jì),然后將求解所有子問(wèn)題的模塊組合成求解原問(wèn)題的程序。 2、一個(gè)解決大問(wèn)題的程序,可以分解成多個(gè)解決小問(wèn)題的模塊,這就是“自頂向下”的模塊化程序設(shè)計(jì)方法。3、用一個(gè)或多個(gè)函數(shù)來(lái)實(shí)現(xiàn)這些功
3、能模塊。第6章 函數(shù)與編譯預(yù)處理函數(shù)常識(shí)4、一個(gè)原程序文件由一個(gè)或多個(gè)函數(shù)組成。一個(gè)源程序文件是一個(gè)編譯單位,即以源文件為單位進(jìn)行編譯,而不是以函數(shù)為單位進(jìn)行編譯。5、程序的執(zhí)行從main函數(shù)開(kāi)始,在main函數(shù)中結(jié)束整個(gè)程序的運(yùn)行。main函數(shù)是系統(tǒng)定義的。6、所有的函數(shù)都是平行的,不能嵌套定義,但可以互相調(diào)用,但不能調(diào)用main 函數(shù)。第6章 函數(shù)與編譯預(yù)處理函數(shù):完成相對(duì)獨(dú)立功能的程序. 標(biāo)準(zhǔn)函數(shù):由系統(tǒng)提供的庫(kù)函數(shù),不必從使用角度分定義直接引用,如fabs()等。 用戶自定義函數(shù):用以解決用戶專門需要。 無(wú)參函數(shù):如printsar();從函數(shù)形式分 有參函數(shù):如 sin(x), sq
4、rt(x); 不傳遞數(shù)據(jù) 主調(diào)函數(shù)被調(diào)用函數(shù) 傳遞數(shù)據(jù) 6.1 庫(kù)函數(shù)1、定義在不同的頭文件中2、用戶使用時(shí),必須用#include“頭文件”把相應(yīng)的頭文件包含到程序中來(lái)。例:數(shù)學(xué)庫(kù)函數(shù)調(diào)用舉例#include#includemain() double a, b;scanf (“%lf “,&a); b = sin (a); printf( “%6.4lf”, b);6.1 庫(kù)函數(shù) 注意: include命令必須以#開(kāi)頭,文件名用一對(duì)雙引號(hào)“ ”或一對(duì)尖括號(hào)括起來(lái),二者的區(qū)別是:用表示編譯時(shí)只按系統(tǒng)標(biāo)準(zhǔn)方式檢索文件目錄,而用“ math.h”形式,則編譯系統(tǒng)先從目標(biāo)文件所在的子目錄中找math
5、.h文件,若找不到再按尖括號(hào)包圍時(shí)的辦法重新搜索一次。include是命令,不是語(yǔ)句,結(jié)尾沒(méi)有分號(hào)。6.2 函數(shù)的定義和說(shuō)明無(wú)參函數(shù)定義的一般形式:類型標(biāo)識(shí)符函數(shù)名()聲明部分語(yǔ)句部分void print_message( )printf(“Hello world”);#include void printstar() printf(“*n”); 例:輸出圖案 * Very Good!* main() void printstar(); 函數(shù)定義和功能實(shí)現(xiàn)函數(shù)調(diào)用函數(shù)名();方法printstar();printf(“ Very Good!”);printstar();有參函數(shù)定義的一般形式:
6、6.2 函數(shù)的定義和說(shuō)明類型標(biāo)識(shí)符函數(shù)名(形式參數(shù)表列)聲明部分語(yǔ)句部分int max(int x,int y)int z; if(xy) z=x;else z=y; return (z);6.2 函數(shù)的定義和說(shuō)明空函數(shù)類型說(shuō)明符函數(shù)名()例:void dummy()6.2 函數(shù)的定義和說(shuō)明注意:(1)函數(shù)名和形式參數(shù)都是用戶命名的標(biāo)識(shí)符。在同一程序中,函數(shù)名必須唯一;形式參數(shù)只要在同一函數(shù)中唯一即可,可以與其它函數(shù)中的變量同名。(2)語(yǔ)言規(guī)定,不能在一個(gè)函數(shù)的內(nèi)部再定義函數(shù)。(3)對(duì)函數(shù)類型的說(shuō)明,必須與return語(yǔ)句中返回值表達(dá)式的類型一致。如果不一致,則以函數(shù)類型為準(zhǔn),由系統(tǒng)自動(dòng)進(jìn)行轉(zhuǎn)
7、換。如果缺省函數(shù)類型,則系統(tǒng)一律按int類型處理。(4)帶參數(shù)的形式參數(shù)表中類型和變量必須成對(duì)出現(xiàn),如下面的定義是錯(cuò)誤的: double add(double x,y)6.2 函數(shù)的定義和說(shuō)明函數(shù)的返回值 在函數(shù)定義的語(yǔ)句部分,常常有個(gè)return返回語(yǔ)句,函數(shù)的返回值也就是return語(yǔ)句中的表達(dá)式的值。函數(shù)類型應(yīng)與return語(yǔ)句中的表達(dá)式類型一致。 return 語(yǔ)句的格式: return(表達(dá)式);或 return 表達(dá)式; 或 return; 功能:1、把return后面“表達(dá)式”的值帶給調(diào)用 函數(shù); 2、把控制轉(zhuǎn)向調(diào)用函數(shù);#includemain( )c=max(a,b);pri
8、ntf(“Max is %d”,c);int max(int x,int y)int z;z=xy?x:y;return(z);沒(méi)有返回值的函數(shù)就沒(méi)有return語(yǔ)句6.2 函數(shù)的定義和說(shuō)明6.2 函數(shù)的定義和說(shuō)明(1) 聲明為void型的函數(shù)中不能包括帶值的return 語(yǔ)句;主函數(shù)體內(nèi)不能出現(xiàn)return語(yǔ)句。(2)當(dāng)函數(shù)沒(méi)有return語(yǔ)句時(shí),以結(jié)束函數(shù)的大括號(hào) 作為返回點(diǎn)。但這時(shí)并不表明函數(shù)沒(méi)有返回值,這時(shí)的返回值是系統(tǒng)給的不確定值。(3)除了空值函數(shù)以外的所有函數(shù)都返回一個(gè)值,那么我們是不是非得去使用這個(gè)返回值呢?答案是否定的。如果沒(méi)有用它賦值,那它就被丟棄了。(4)在同一函數(shù)內(nèi),可
9、用根據(jù)需要在多處出現(xiàn)return語(yǔ)句,但函數(shù)第一次遇到return時(shí)就立即停止執(zhí)行,并返回到主調(diào)函數(shù) 注意:練習(xí):1、定義一個(gè)打印三行星的函數(shù)。2、定義一個(gè)函數(shù)求兩個(gè)數(shù)的和。3、定義一個(gè)函數(shù)判斷一個(gè)數(shù)的奇偶性。4、輸入一個(gè)年份,用函數(shù)判斷是否是閏年。6.2 函數(shù)的定義和說(shuō)明函數(shù)說(shuō)明和函數(shù)原型6.2 函數(shù)的定義和說(shuō)明在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù),即被調(diào)用函數(shù)。需具備以下條件:(1)被調(diào)用的函數(shù)必須是已存在的函數(shù)。(2)如果使用庫(kù)函數(shù),應(yīng)用#include命令將相關(guān)的庫(kù)函數(shù)”包含”到本文件中來(lái)。(3)如果使用用戶自定義函數(shù),而該函數(shù)在調(diào)用它的函數(shù)(即主調(diào)函數(shù))后面,應(yīng)在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)作聲明。#
10、includemain()float add(float x,float y);float a,b,c;scanf(“%f %f”,&a,&b);c=add(a,b);printf(“sum is %fn”,c);float add(float x,float y)float z;z=x+y;return(z);函數(shù)的聲明函數(shù)的調(diào)用函數(shù)的定義函數(shù)的聲明:把函數(shù)的名字、函數(shù)類型以及形參的類型、個(gè)數(shù)和順序通知編譯系統(tǒng),以便在調(diào)用該函數(shù)時(shí)系統(tǒng)按此進(jìn)行對(duì)照檢查。float add(float x,float y)float z;z=x+y;return(z);函數(shù)的定義和聲明區(qū)別float add(f
11、loat x,float y);函數(shù)的定義:對(duì)函數(shù)功能的確定。包括指定函數(shù)名、函數(shù)值類型、形參及其類型、函數(shù)體等,它是一個(gè)完整的,獨(dú)立的函數(shù)單位。說(shuō)明1.如果被調(diào)用函數(shù)的定義出現(xiàn)在主調(diào)函數(shù)之前,可以不必加以聲明。2.如果已在文件的開(kāi)頭,已對(duì)本文件中所調(diào)用的函數(shù)進(jìn)行了聲明,則在各函數(shù)中不必對(duì)其所調(diào)用的函數(shù)再作聲明。3.聲明的時(shí)候可以省略形參的變量名。6.2 函數(shù)的定義和說(shuō)明 用函數(shù)原型聲明函數(shù)練習(xí):把下面的題補(bǔ)充完整,在主函數(shù)中調(diào)用。1、定義一個(gè)打印三行星的函數(shù)。2、定義一個(gè)函數(shù)求兩個(gè)數(shù)的和。3、定義一個(gè)函數(shù)判斷一個(gè)數(shù)的奇偶性。6.2 函數(shù)的定義和說(shuō)明6.3 函數(shù)的調(diào)用一、函數(shù)調(diào)用的一般形式:函
12、數(shù)名(實(shí)參表列);void printstar( ) printf(“*n”);如果調(diào)用無(wú)參函數(shù),則“實(shí)參表列”可省略,但括號(hào)不能省略,如printstar( )printstar( );6.3 函數(shù)的調(diào)用6.3 函數(shù)的調(diào)用如果實(shí)參表列包含多個(gè)實(shí)參,則各參數(shù)間用逗號(hào)間隔,如max(2,3)c=max(a,b);int max(int x,int y)int z;z=xy?x:y;return(z);6.3 函數(shù)的調(diào)用1.函數(shù)語(yǔ)句把函數(shù)調(diào)用作為一個(gè)語(yǔ)句,如printstar();2.函數(shù)表達(dá)式函數(shù)出現(xiàn)在表達(dá)式中,如:c=2*max(a,b);3.函數(shù)參數(shù)函數(shù)調(diào)用作為一個(gè)函數(shù)的實(shí)參,如: m=ma
13、x(a,max(b,c);6.4 函數(shù)的參數(shù)一、形式參數(shù)和實(shí)際參數(shù):在定義函數(shù)時(shí),函數(shù)名后面括號(hào)中的變量名為“形式參數(shù)”(簡(jiǎn)稱“形參”)在主調(diào)函數(shù)中調(diào)用一個(gè)函數(shù)時(shí),函數(shù)名后面括號(hào)中的參數(shù)稱為“實(shí)際參數(shù)”(簡(jiǎn)稱“實(shí)參”)#includemain()int max(int x,int y);/*對(duì)max函數(shù)的聲明*/int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);/*a,b作為實(shí)參*/printf(“Max is %d”,c);int max(int x,int y)/*定義有參函數(shù)max*/*x,y作為形參*/int z;z=xy?x:y;return(z);程
14、序結(jié)果:7,8 Max is 8 關(guān)于形參與實(shí)參的說(shuō)明:1、在定義函數(shù)中指定的形參,在未出現(xiàn)函數(shù)調(diào)用時(shí),不占內(nèi)存。調(diào)用結(jié)束后,所占的內(nèi)存被釋放。#includemain( )int max(int x,int y);int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“Max is %d”,c);int max(int x,int y) xyint z;z=xy?x:y;return(z);2、實(shí)參可以是常量,變量或表達(dá)式。c=max(a,b);int max(int x,int y)int z;z=xy?x:y;return(z);c=max(3,
15、4);c=max(a+3,b*4);6.4 函數(shù)的參數(shù)3、被定義的函數(shù)必須指定形參的類型。int max(int x,int y)int z;z=xy?x:y;return(z);4、實(shí)參與形參的類型應(yīng)相同或賦值兼容。c=max( a , b );6.4 函數(shù)的參數(shù)6.4 函數(shù)的參數(shù)5、實(shí)參向形參的數(shù)據(jù)傳遞是“值傳遞”,單向傳遞,只由實(shí)參傳給形參。c=change(a,b);void change(int x,int y)int t;t=x ; x=y ; y=z;2a3b2x3y326.5函數(shù)的嵌套調(diào)用 C語(yǔ)言中的嵌套調(diào)用函數(shù)main函數(shù)a函數(shù)b函數(shù)調(diào)用a函數(shù)調(diào)用b函數(shù)結(jié)束6.5函數(shù)的嵌套調(diào)
16、用#includemain()int f(int ,int);int x=36,y=16,z;z=f(x,y);printf(%d,z);int f(int a,int b)int ff(int);int m,n,k;m=ff(a);n=ff(b);if(m%2=0) k=m;else k=n;return k;int ff(int d)return(d*3);6.5函數(shù)的嵌套調(diào)用函數(shù)的嵌套注意事項(xiàng):C語(yǔ)言不能嵌套定義函數(shù),但可以嵌套調(diào)用函數(shù)被調(diào)用函數(shù)的定義位置在調(diào)用它的函數(shù)之前,不必對(duì)該函數(shù)進(jìn)行聲明。程序從main函數(shù)開(kāi)始執(zhí)行6.5函數(shù)的遞歸調(diào)用 定義:在調(diào)用一個(gè)函數(shù)的過(guò)程中,又出現(xiàn)直接或間
17、接地調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用直接調(diào)用間接調(diào)用6.5函數(shù)的遞歸調(diào)用用遞歸法求n! 問(wèn)題分析:假設(shè)n=55!=5X4!4!=4X3!3!=3X2!2!=2X1!可用下面的公式來(lái)表示: 1 (n=0,1)n!= n*(n-1)! (n1)6.5函數(shù)的遞歸調(diào)用形參x接收實(shí)參n的值是否x=0|x=1?fac(x-1)遞歸調(diào)用自身輸出結(jié)果n和smain函數(shù)fac函數(shù)f=1f=fac(x-1)*xreturn(f)求n!,調(diào)用fac函數(shù)開(kāi)始輸入ns=fac(n)結(jié)束6.5函數(shù)的遞歸調(diào)用float fac(int n); /* 函數(shù)聲明 */#include main() int n; float
18、y; printf(請(qǐng)輸入一個(gè)整數(shù):); scanf(%d,&n); y=fac(n); printf(%d!=%10.0f,n,y); 源程序如下:float fac(int n) /* 定義計(jì)算n!的函數(shù) */ float f; if (n=0|n=1) f=1; else f=fac(n-1)*n; return(f); 運(yùn)行結(jié)果:請(qǐng)輸入一個(gè)整數(shù): 1010!= 36288006.5函數(shù)的遞歸調(diào)用例: 有5個(gè)人,第5個(gè)人說(shuō)他比第4個(gè)人大2歲,第4個(gè)人說(shuō)他比第3個(gè)人大2歲,第3個(gè)人說(shuō)他比第2個(gè)人大2歲,第2個(gè)人說(shuō)他比第1個(gè)人大2歲,第1個(gè)人說(shuō)他10歲。求第5個(gè)人多少歲?分析: 10 (n=
19、1)age(n)= age(n-1)+2 (n1)6.5函數(shù)的遞歸調(diào)用程序如下:結(jié)果:18#includemain()int age(int);printf(%d,age(5);int age(int n)int c;if(n=1)c=10;else c=age(n-1)+2;return c;6.6變量的存儲(chǔ)類型 從變量的作用域(即從空間)全局變量局部變量從變量值存在的時(shí)間(即生存期)靜態(tài)存儲(chǔ)方式動(dòng)態(tài)存儲(chǔ)方式6.6變量的存儲(chǔ)類型變量的作用域 變量的作用域是指變量的作用范圍,在C語(yǔ)言中分為在全局有效、局部有效和復(fù)合語(yǔ)句內(nèi)有效三種。 語(yǔ)言中所有的變量都有自己的作用域。變量說(shuō)明的位置不同,其作用域
20、也不同,據(jù)此可將語(yǔ)言中的變量分為局部變量(內(nèi)部變量)和全局變量(外部變量)。6.6變量的存儲(chǔ)類型局部變量定義:在一個(gè)函數(shù)內(nèi)部定義的變量是內(nèi)部變量作用范圍:只在本函數(shù)內(nèi)有效,在此函數(shù)以外不能使用這些變量。6.6變量的存儲(chǔ)類型char f2(int x,int y) /* 函數(shù)f2 */ int i,j; float f1(int a) /* 函數(shù)f1 */ int b,c; a、b、c有效x、y、i、j有效m、n有效void main() /* 主函數(shù) */ int m,n; 6.6變量的存儲(chǔ)類型 局部變量主函數(shù)中定義的變量只在主函數(shù)中有效。主函數(shù)不能使用其他函數(shù)中定義的變量。不同函數(shù)中可使用相
21、同名字的變量。形式參數(shù)也是局部變量。在一個(gè)函數(shù)內(nèi)部,可在復(fù)合語(yǔ)句中定義變量,這些變量只在本復(fù)合語(yǔ)句中有效,這種復(fù)合語(yǔ)句也稱“分程序”或“程序塊”。說(shuō)明6.6變量的存儲(chǔ)類型全局變量定義:在函數(shù)之外定義的變量稱為“外部變量”。(或稱“全局變量”或“全程變量”)。有效范圍:從定義變量的位置開(kāi)始到本源文件結(jié)束。6.6變量的存儲(chǔ)類型int p=1,q=5;/* 全局變量 */float f1(int a)int b,c;char c1,c2; /* 全局變量 */char f2(int x,int y) int i,j;void main() int m,n; 全局變量c1、c2的作用范圍全局變量p、q的作用范圍例:#include int a=3,b=5; /* a、b為全局變量 */ void main() int max(int a,int b);/*函數(shù)聲明,a、b為形參名*/ int a=8; /* a為局部變量 */ printf(%dn,max(a,b); int max(int a,int b) /*a、b為形參局部變量*/ int c; c=ab?a:b; return(c); 6.6變量的存儲(chǔ)類型
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版門樓智能鎖具采購(gòu)與安裝協(xié)議4篇
- 二零二五年度面粉行業(yè)市場(chǎng)調(diào)研與分析合同7篇
- 2025年度個(gè)人住房抵押貸款利率調(diào)整合同范本4篇
- 建筑施工工人中介合同(2篇)
- 畢業(yè)論文答辯模板
- 項(xiàng)目組人員培訓(xùn)計(jì)劃三篇
- 二零二五年車位購(gòu)置合同標(biāo)準(zhǔn)文本9篇
- 鍋爐課程設(shè)計(jì)引言
- 2024年中級(jí)電工職業(yè)鑒定考試題庫(kù)-上(單選題)
- 2025年度新能源設(shè)備代理商加盟協(xié)議合同4篇
- 2025-2030年中國(guó)陶瓷電容器行業(yè)運(yùn)營(yíng)狀況與發(fā)展前景分析報(bào)告
- 二零二五年倉(cāng)儲(chǔ)配送中心物業(yè)管理與優(yōu)化升級(jí)合同3篇
- 2025屆廈門高三1月質(zhì)檢期末聯(lián)考數(shù)學(xué)答案
- 音樂(lè)作品錄制許可
- 拉薩市2025屆高三第一次聯(lián)考(一模)英語(yǔ)試卷(含答案解析)
- 開(kāi)題報(bào)告:AIGC背景下大學(xué)英語(yǔ)教學(xué)設(shè)計(jì)重構(gòu)研究
- 師德標(biāo)兵先進(jìn)事跡材料師德標(biāo)兵個(gè)人主要事跡
- 連鎖商務(wù)酒店述職報(bào)告
- 《實(shí)踐論》(原文)毛澤東
- 南潯至臨安公路(南潯至練市段)公路工程環(huán)境影響報(bào)告
- 初中數(shù)學(xué)校本教材(完整版)
評(píng)論
0/150
提交評(píng)論